Monthly Archive for July, 2007

接触Subversion

空间IDC提供Subversion功能.偶好奇查了查,
好像是一个项目开发与版本控制系统,CVS的替代产品.
虽然一般大型程序开发才会用这个东西,不过了解一下,应该不错.

Subversion的一些资料(搜罗自网络,与Subversion官方站点 http://subversion.tigris.org/)

Subversion快速入门教程(转)
作者: Rock Sun
2005-10-20
如何快速建立Subversion服务器,并且在项目中使用起来,这是大家最关心的问题,与CVS相比,Subversion有更多的选择,也更加的容易,几个命令就可以建立一套服务器环境,可以使用起来,这里配套有动画教程。

本文是使用Subversion最快速的教程,在最短的时间里帮助您建立起一套可用的服务器环境,只需略加调整就可以应用到实际项目当中。

本教程分为以下几个部门,不仅仅是快速入门,最后我们还有一些高级功能的说明,为了说明简单,教程是在windows下使用的方式,以方便资源有限的项目使用,对于UNIX环境下,区别并不大。

1. 软件下载
2. 服务器和客户端安装
3. 建立版本库(Repository)
4. 配置用户和权限
5. 运行独立服务器
6. 初始化导入
7. 基本客户端操作

1,软件下载

* 下载Subversion服务器程序。

到官方网站 的下载二进制安装文件,来到二进制包下载部分 ,找到 Windows NT, 2000, XP and 2003部分,然后选择”this directory”,这样我们可以看到许多下载的内容,目前可以下栽 svn-1.2.3-setup.exe。

* 下载Subversion的Windows客户端TortoiseSVN。

TortoiseSVN是扩展Windows Shell的一套工具,可以看作Windows资源管理器的插件,安装之后Windows就可以识别Subversion的工作目录。
官方网站是TortoiseSVN,下载方式和前面的svn服务器类似,在Download页面的我们选择Official version for Win2k/XP or higher的版本,然后在sourceforge的下载页面选择目前的最高稳定版本的安装文件TortoiseSVN-1.2.4.4479-svn-1.2.3.msi。

2,服务器和客户端安装

* 服务器安装,直接运行svn-1.2.3-setup.exe,根据提示安装即可,这样我们就有了一套服务器可以运行的环境。
* 安装TortoiseSVN,同样直接运行TortoiseSVN-1.2.4.4479-svn-1.2.3.msi按照提示安装即可,不过最后完成后会提示是否重启,其实重启只是使svn工作拷贝在windows中的特殊样式生效,与所有的实际功能无关,这里为了立刻看到好的效果,还是重新启动机器。

3,建立版本库(Repository)

运行Subversion服务器需要首先要建立一个版本库(Repository),可以看作服务器上存放数据的数据库,在安装了Subversion服务器之后,可以直接运行,如:

svnadmin create E:\svndemo\repository

就会在目录E:\svndemo\repository下创建一个版本库。

我们也可以使用TortoiseSVN图形化的完成这一步:

在目录E:\svndemo\repository下”右键->TortoiseSVN->Create Repository here…“, 然后可以选择版本库模式, 这里使用默认即可, 然后就创建了一系列目录和文件。

4,配置用户和权限

来到E:\svndemo\repository\conf目录,修改svnserve.conf:

# [general]
# password-db = passwd

改为:

[general]
password-db = passwd

然后修改同目录的passwd文件,去掉下面三行的注释:

# [users]
# harry = harryssecret
# sally = sallyssecret

最后变成:

[users]
harry = harryssecret
sally = sallyssecret

5,运行独立服务器

在任意目录下运行:

svnserve -d -r E:\svndemo\repository

我们的服务器程序就已经启动了。

6,初始化导入

来到我们想要导入的项目根目录,在这个例子里是E:\svndemo\initproject,目录下有一个readme.txt文件:

1. 右键->TortoiseSVN->Import…
2. URL of repository输入“svn://localhost/trunk”
3. ok

完成之后目录没有任何变化,如果没有报错,数据就已经全部导入到了我们刚才定义的版本库中。

7,基本客户端操作

取出版本库到一个工作拷贝:

来到任意空目录下,在本例中是E:\svndemo\wc1,运行右键->Checkout,在URL of repository中输入svn://localhost/trunk,这样我们就得到了一份工作拷贝。

在工作拷贝中作出修改并提交:

打开readme.txt,作出修改,然后右键->Commit…,这样我们就把修改提交到了版本库,我们可以运行。

察看所作的修改:

readme.txt上右键->TortoiseSVN->Show Log,这样我们就可以看到我们对这个文件所有的提交。在版本1上右键->Compare with working copy,我们可以比较工作拷贝的文件和版本1的区别。

最后,所有的内容都已经录制为动画文件,大家可以参考。

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=537628

Subversion基本使用
客户端组件供使用者使用,主要包括以下两个组件:
svn 是命令行客户端程序,用来管理数据.
Svnversion 用来查看工作拷贝的混合版本状态.
服务器组件供管理员使用,包括以下几个组件:
svnadmin 用来创建与调整Subversion的文件库的工具.
svnlook 用来查看Subversion的文件库的工具.
一,Subversion在项目中用到的操作
档案库的两种配置方案:

方案1 方案2
个人意见:
如果projectA和projectB之间互相独立,则使用方案1比较好管理.
如果projectA和projectB之间联系的比较紧密,则使用方案2比较好管理.
创建文件库(新建一个项目),命令如下: (服务端操作)
mkdir /usr/local/svn
svnadmin create /usr/local/svn /java
将目录doc的内容,直接导入至文件库的fox目录里,命令如下:
mkdir java
mkdir java/trunk //主线
mkdir java/branches //分支
mkdir java/tags //标记,用来存放不再变动的分支
svn import . http://localhost/svn/java -m “Initial repository layout” 或
svn import java http://localhost/svn/java -m “Initial repository layout”
checkout(可缩写为co)服务器文件到本地机器上(/usr/local/svn/work)
cd /usr/local/work //先建立本地的工作路径
svn co http://localhost/svn/java java –username afa –password guesswhat
网页访问方式http://myserver/svn/ 的方式
通过命令行执行例如checkout,update等各种操作(建议先切换到当前工作路径).
TortoiseSVN访问方式需要安装TortoiseSVN,可代替命令行执行各种操作.
commit 提交
当本地工作目录上修改或新建文件或文件夹时,服务器上得仓库并不会自动修改,需要使用commit命令把本地做的修改保存到服务器上.每次修改后commit,服务器上得版本号会加1.
新增文件或文件夹(先进入到当前目录)
svn add newfile/newdir
svn commit –m “message”
本地更新文件update(不带参数则更新为最新版本)
svn update –r 3 test.java //本地的test.java更新为第三次提交的版本
注意几个状态:
A 新增
D 删除
U 更新
C 冲突
G 合并
创建分支(branch)和标记(tag)
$ svn checkout http://serverip/svn/java java
$ cd java
$ svn copy trunk/calc branches/calc-branch-1.0
$ svn status
$ svn commit -m “Creating a private branch of /trunk/calc.”
合并分支
(1)合并从某个版本都某个版本
cd 到相应的目录(如 /usr/local/work/java/trunk)
$ svn merge -r 343:344 http://serverip/svn/java/branches/java-branch-1.0
(2)合并整个分支(如从341版本产生了分支到现在要合并起来)
$ svn merge -r 341:HEAD http://serverip/svn/java/branches/java-branch-1.0
(3) 合并时产生冲突的处理主要是靠手动修改.
<<<<<<>>>>>> .merge-right.r14 //这两行是分支上做的修改
修改完了之后,把svn产生的多余的控制文件删除(或用svn resolved命令)再commit就OK了.
“svn status”显示本地更新,如果没有任何更新(或刚刚commit)则没有任何信息显示.
“svn diff”显示详细的更新细节:
$ svn diff -r 343:344 http://serverip/svn/java/trunk/work.java
“svn revert”移除用户的本地更新(本地做了更新,但没有提交时有效).
“svn resolved”命令,当手工解决了版本冲突之后,在commit之前执行,用来告诉SVN”我已经解决了冲突,请让我提交吧”
svn resolved work.java //当前目录下的work.java
svn delete删除命令
cd到某个需要被删除的目录
$ svn del –force branches
$ svn commit –m “Delete the java branches”
其他命令(对服务端进行操作)
(1)svnlook tree path/java –show-ids
(2)备份与恢复(特别是对于升级Subversion的情况)
完整式备份与恢复:
$ svnadmin dump java > dumpfile
$ svnadmin create dumpjava //可以修改仓库(项目)的名字
$ svnadmin load dumpjava dumpfile1
$ svnadmin dump myrepos –revision 1001:2000 –incremental > dumpfile2
$ svnadmin dump myrepos –revision 2001:3000 –incremental > dumpfile3
$ svnadmin load newrepos < dumpfile1
$ svnadmin load newrepos < dumpfile2
$ svnadmin load newrepos < dumpfile3
二,仓库的权限设置
创建口令文件(使用Apache的htpasswd)
$ cd /urs/local/Apache/bin //进入到apache的bin目录
$ htpasswd -c /etc/svn-auth-file afa //第一次: 以 -c 建立口令文件
New password: *****
Re-type new password: *****
Adding password for user afa
$ htpasswd /etc/svn-auth-file test //第二次不用-C参数,但要指定口令文件(含路径)
New password: *******
Re-type new password: *******
Adding password for user test
$
编辑httpd.conf文件,加入身份验证
DAV svn
SVNParentPath /usr/local/svn
AuthType Basic
AuthName “Subversion repository”
AuthUserFile /etc/svn-auth-file
Require valid-user
更细致的权限控制――分组管理
DAV svn
SVNParentPath /usr/local/svn
AuthzSVNAccessFile /etc/svn/authz.conf
AuthType Basic
AuthName “Subversion repository”
AuthUserFile /etc/svn-auth-file
Require valid-user
authz.conf的内容为:
[groups]
everyone = afa,test, tommy, songjy, zhengyong, orcus, zhangq
groupA = afa,robert, zhangq
groupB = test,orcus, tommy
[projectA:/]
@groupA = rw
@everyone = r
[projectB:/]
@everyone = r
@groupB = rw

下篇这篇,是Dreamhost Wiki关于Svn的文档.非常详细
不过偶看得头疼很

Subversion
From DreamHost
Jump to: navigation, search
This article or section may require a cleanup.
We are hoping to create articles that meet certain standards. Please discuss this issue on the talk page. Editing help is available.

Subversion (official site) is a version-control system that keeps track of changes in your files on a server. Subversion helps to coordinate work among multiple people. For an introduction – read the book – it is really great.
Contents
[hide]

* 1 Subversion on Dreamhost
* 2 Quick Start
o 2.1 Gotchas
* 3 Connecting to Subversion Repository
o 3.1 Using svn+ssh
o 3.2 Using HTTP
* 4 How to use: quick reference
o 4.1 Creating Repository via Command-Line
+ 4.1.1 Gotchas
o 4.2 Importing Folders and Files
o 4.3 Loading a dumpfile
o 4.4 Using TortoiseSVN
+ 4.4.1 Create Session Key
+ 4.4.2 Setup New Session
+ 4.4.3 Other References
+ 4.4.4 Notes
o 4.5 Multiple User Access to Repository
o 4.6 Using Apache basic authentication
o 4.7 Using Subversion for Web development (automatic post-commit checkout)
* 5 Upgrading to Newest Subversion
* 6 Interfacing with Subversion from PHP
* 7 Setting up post commit emails
* 8 External Links
o 8.1 Books and tutorials
o 8.2 GUI Integration
o 8.3 Web-based repository browsers
* 9 See Also
* 10 Userbased Scripts

[edit] Subversion on Dreamhost

The current version of Subversion on Dreamhost is 1.4.2. If you want to install a newer version, please see Subversion_Installation. If your server is still running old 1.3.x version, let us know and we can upgrade it for you. Subversion 1.4.x features repository mirroring, more efficient transfer and storage of binary files in comparison with previous versions.

You can install and configure Subversion repositories from control panel.
[edit] Quick Start

To set up a Subversion repository at svn.yoursite.com for a project called “myproject”, follow these steps:

1. Create svn.yoursite.com:
1. Go to your DreamHost control panel and click Domains, then Manage Domains
2. Click Add New Domain / Sub-Domain
3. Enter “svn.yoursite.com” in the Domain To Host field, enter “svn.yoursite.com” in the Web Directory field, and select Remove www.
4. Click Fully Host This Domain Now!
2. Wait a few hours until the new DNS information propagates (that is, when visiting svn.yoursite.com in a web browser doesn’t give an error–the page will look like an empty directory listing once the DNS info has propagated).
3. Set up a Subversion repository:
1. Click Goodies, then Subversion
2. Enter “My Project” in the Project Name field, “myproject” in the Project ID field, and make sure that svn.yoursite.com is selected for the URL. Use “myproject” as the directory name.
3. Replace the dummy usernames and passwords with a username and password for yourself.
4. Click Create My New Project Repository Now!

As soon as the DreamHost Subversive Robot actually creates your repository, you can begin using it. For instance, to import a directory:

svn import some_directory http://svn.yoursite.com/myproject -m “Initial import”

[edit] Gotchas

Warning: If you create a new repository at an existing domain, the domain may be moved to a new Apache service and the DNS information will change. This will affect you if you have your DNS info hosted somewhere else than Dreamhost (you’ll have to get the new IP address and update your DNS info). This is only the case with domains that have been hosted with DreamHost for more than a year or so. Anything added more recently than that will probably not be affected.

Warning: Repositories don’t act like normal directories: You will not be able to use .htaccess files, cgi scripts, etc. in your repository directory. For instance, if you setup your repository at http://svn.example.com/, you will not be able to password protect that directory using .htaccess. You must use the Public/Private field in the Subversion panel page. Changes made in the Htaccess/WebDAV panel also do not apply to your SVN repository.

This also means you can’t install ViewVC in the main repository directory. To work around this, put your repository in http://svn.example.com/svn/ and the ViewVC cgi in http://svn.example.com/. Remember, you’ll need to use a .htaccess file to configure http://svn.example.com/, but the Public/Private field in the Subversion panel to protect http://svn.example.com/svn/.

Hastily-made repositories often don’t work: If you create your repository before its intended host is fully created (and resolved), you may have an inaccessible repository. Assuming it doesn’t yet contain any information (how could it?), just delete it and recreate it. (Alternatively, you may be experiencing a DNS propagation delay if you can access your repository via http within the DreamHost system, but see an empty directory from outside DreamHost [Apache 1.3x serving your empty domain]. If you can’t wait, try querying the DH DNS servers for your IP and using a local hosts file or NetInfo to temporarily resolve your svn host. Remember to undo this when DNS records have propagated.)

Some have reported success just submitting an edit (with no changes) to their repository in the Control Panel. This operation recreates your reponame.access and reponame.passwd files re-establishing dhapache as their group (and undoing any MD5 passwords you’ve made manually). Unfortunately, this does nothing to fix your repository if the owner has been changed from dhapache to your username.

It would be nice if the Subversion Control Panel had an explicit option to fix owner and group on a given repository, say, by running:

sudo chown -R dhapache ~/svn/reponame;
sudo chgrp dhapache ~/svn/reponame.access ~/svn/reponame.passwd;

… in the background. As it is, you have to dump, recreate and reload your repository.

Another nice feature would be a Control Panel switch to allow passwords to be created and maintained with MD5 encryption.

Some clients require MD5 passwords: If you get “access denied” warnings, you may need to use MD5 passwords instead of the standard variety created by the DreamHost Control Panel. Use htpasswd -nm username to generate the entry (ala username:passwd-hash) for your reponame.passwd file. And use an editor (ala nano reponame.passwd) to replace your standard password entry.

Don’t overwrite your reponame.access and reponame.passwd files with echo “username:passwd-hash” > reponame.passwd Overwriting the files will cause them to have your user’s group instead of dhapache, leaving your repository in a read-only or inaccessible state.

Removing repositories through the control panel doesn’t seem to remove the ~/svn/ directory. (as of Apr 12 2006) Workaround:

cd ~/svn;
mkdir old;
mv old

You have the proper permissions to do this. (You can also use WebFTP to delete or rename the repository directory.)
[edit] Connecting to Subversion Repository
[edit] Using svn+ssh

Allows for a svn client to connect directly with the repository via ssh.

You have to set up a ssh username and password. Subversion users defined in the panel will not be used for authentication.

svn+ssh://{user}@www.yourdomain.ext/home/{user}/svn/{project}

note: {project} is the ID of your subversion project, NOT the projectname.

You should also check SSH#Passwordless_Login to use this mode without being asked for the password repeated times

See also SVN book for SSH tricks
[edit] Using HTTP

1. Use the HTTP path that you used in the Subversion panel.
2. Sign in using username and password specified in the panel.

Is there any way for svn users to change their password in this mode? No. Only through panel.
Is there any way to use https instead of http? Probably, but first you will need a unique IP address and Secure Server installed on your domain.

[edit] How to use: quick reference
The instructions provided in this article or section require shell access unless otherwise stated.

You can use the PuTTY client on Windows, or SSH on UNIX.
Your account must be setup for shell access in the Control Panel if you haven’t done so already.
More information may be available on the article’s talk page.
[edit] Creating Repository via Command-Line

If you didn’t use the Dreamhost Subversion Panel, you can create the repository at a directory. If you used the Quick Start method then skip this step and go to the next one.

svnadmin create /home/user/path/to/repository

[edit] Gotchas

Handmade repos are read-only (via http): If you find that you have to tweak and reload your dumpfile a few times, it can be handy to use the CLI tools (e.g. rm -rf and svnadmin create) to wipe and recreate your repository until you get it right. But then you’ll want to use the Control Panel to delete and recreate your repository. Your test repositories will not function properly in production (they won’t permit any changes).

The Panel creates the repository with dhapache as the owner, and the reponame.access and reponame.passwd files with dhapache as the group. Trying to create your own production repo with svnadmin create is futile because you don’t have authorization to change those ownerships and group memberships (and you’re not a sudoer).

Don’t overwrite dhapache files: Don’t overwrite your reponame.access and reponame.passwd files with echo “username:passwd-hash” > reponame.passwd (e.g. if you’re trying to use MD5 passwords). Use an editor and paste in the new data. Overwriting the files will cause them to have your user’s group instead of dhapache. If your repository is relatively mature when you make this mistake, and you have no backup, you will be out of options.
[edit] Importing Folders and Files

Once the repository is created you can add folders and files that you have in another location. It is better to use this method to keep the revisions number down when first creating the repository.

svn import /home/USER/path/to/source file:///home/USER/path/to/repository –message=”Importing Project”

You have to put a message in and change the text inside to whatever you are doing at the time.
[edit] Loading a dumpfile

Sometimes, you would have an existing repository that you want to migrate to your Dreamhost svn repository. You will need to take a dump of your existing repository and load it into your Dreamhost repository.

* Dump your existing repository

svnadmin dump path-to-repo | gzip > dumpfile.gz

* Upload dumpfile.gz to your home directory.

* Load this into your repository.

If you set up using the Dreamhost Subversion Panel, then the repository will be under the $HOME/svn/{repo-id} where the repo-id is the id you used to setup the repository in the panel. Decompress the dumpfile first.

gunzip -c dumpfile.gz | svnadmin load /home/USER/path/to/repository

Command should show all files being imported, if not then check the instructions and try again.
[edit] Using TortoiseSVN

TortoiseSVN is a Windows GUI integration program for svn. Use at your own risk and is not officially supported.

This walkthrough assumes username is myname, with a website at www.mysite.com, and that the repositories are in ~/svn starting with a project named myproject. You can choose your own directory names.

Step 1: Create the repository following the Repository section of this guide. Step 2: Download and install SVN client
[edit] Create Session Key

If you don’t create the public session key, you will have to type your password in for every action in the browser and for every time TortoiseSVN connects to the server.

Start in your home directory

cd ~

Generate the key set using the passphrase of your choice and put the public key in a .ssh directory (note: the name “rsakey” isn’t required)

Write down your passphrase as you will need it later.

ssh-keygen -b 1024 -t rsa -N SomeLongTextForPassphrase -f rsakey

Create the .ssh folder

mkdir .ssh

Move the public key inside of the folder and rename it.

mv rsakey.pub .ssh/authorized_keys

Change permissions on both the folder and file for security.

chmod 700 .ssh
chmod 600 .ssh/authorized_keys

Download and install the Putty tools (scroll down to the Windows-style installer). This is an SSH client with authentication tools.

Download your “rsakey” file (your private key) from the server to your local machine (the rsakey should be in your home directory).

Use your Windows FTP client.

Load it into the PuTTYgen tool (puttygen.exe) and enter your passphrase when it asks for it.

Use SSH-2 (RSA) which will be the default.

Save it as a private key from PuTTYgen in a safe place as rsakey.ppk.
[edit] Setup New Session

1. Run PuTTY Pageant. Pageant will put an icon of a computer wearing a hat into the System tray.
2. Load a private key into it. Double click on the icon and then click on Private Key File.
3. Type in the Passphrase.

* Run Putty and make a new session:
o Hostname: www.mysite.com
o Protocol: SSH
o Saved Sessions: mysiteSSH
o Connection->Data->auto-login username: myuser
o Connection->SSH->preferred protocol: 2
o Connection->SSH->Auth->private key file: path\to\rsakey.ppk

* Click “Save” on the sessions panel to save this config.

* Open PuTTY if you want to test your session. PuTTY will notice that Pageant is running, retrieve the key automatically from Pageant, and use it to authenticate. You can now open as many PuTTY sessions as you like without having to type your passphrase again. You may get a message saying, “The server’s host key is not set in the registry.” (Insert what this means here.)

* Now find your local project directory, and copy what you want to add to Subversion into a temporary directory (let’s call it “ImportMe”), organizing it carefully — it’s smart to put your files in a “trunk” directory so that working with new branches and tags later is simple.

* Right-click on the ImportMe folder and select “Import…” from the TortoiseSVN submenu. You will be adding everything inside this folder into the root of the “myproject” repository.

* In the import dialog, enter the URL of Repository like this. Replace “mysiteSSH” with the name of your PuTTY stored session and “myusername” with your real username. If you just want a straight SSH tunnel, we’d use [email protected] here instead of mysiteSSH:

svn+ssh://mysiteSSH/home/myusername/svn/myproject

…and click “Okay”. This will load your project files into the repository.

* Next, check out the files you want to work with into your project directory (but make sure you aren’t overwriting files when you check out or you’ll get errors). This is the “SVN Checkout…” option in the folder context menu.

Everything should be pretty self-explanatory from there on.
[edit] Other References

[1] – For Windows XP

[2] – Guide from TortoiseSVN site (generate RSA key instead of DSA key).
[edit] Notes

* TortoiseSVN (1.1.3) – Go into Settings and enter TortoisePlink as the SSH client under the Network tab to connect to your repository. You can use svn+ssh://[email protected]/home/myusername/svn/myproject to specify your username directly in the URL. Along with Pageant for key-based authentication, using TortoiseSVN is very transparent and easy to use.

Also screen is getting over worked for overnight checkouts (yes overnight)

screen
svn co &> ~/log_co &
^ad

[edit] Multiple User Access to Repository

(I have only tried this in a bundy shell, not externally (with TortoiseSVN, for example)

* Create at least two users (mysvnadmin, mysvnuser)
* Create the repository and import the project with mysvnuser.
* Login (ssh) to mysvnuser’s account:

$ su mysvnuser
$ svn co file:///home/mysvnadmin/repos/project work
$ svn add file
$ svn commit -m “added file”
$ svn log
r1 | mysvnadmin | 2005-09-04 08:03:47 -0700 (04 Sep 2005) | 1 line
initial import
r2 | mysvnuser | 2005-09-04 23:34:13 -0700 (04 Oct 2005) | 1 line
added file

I had no trouble with svn+shh (on bundy):

$ svn co svn+ssh://[email protected]/home/mysvnadmin/repos/project work

[edit] Using Apache basic authentication

The Dreamhost panel provides a way to create user accounts only for Subversion- the above steps require each user to have a Unix account with shell access so they can log in via SSH.

If you want to do per-directory permissions in your repository using those accounts, you need to manually edit the .access file as described here:

Subversion manual

However, if you make changes to the user list using the Dreamhost control panel, it will overwrite any changes you make to the .access file.

You can manually add and administer the usernames and passwords for Subversion by using htpasswd to add/edit users to the .passwd file for your repository. This is not recommended though, because after manual editing either the .access or .passwd files, the group changes from dhapache to whatever the auto-generated group for your account is. This prevents the Apache module from being able to read the files. You then need to change the permissions so that they can be read by apache: chmod 644

Note that this is giving “world” read access to those files, which potentially is a security risk. Using control panel automatically resets group back to dbapache, but you will lose your per-directory settings. Using Apache and these passwords isn’t very secure anyway without https access, so this is all more for convenience. If you need security, create Unix accounts with SSH shell access as described above.
[edit] Using Subversion for Web development (automatic post-commit checkout)

Subversion can be a very useful tool for developing Web sites or Web-based applications. You may wonder, though, how that would work. After you commit your changes, how do they flow into the site?

Here’s how: you make your site into just another working copy, checked out from your Subversion repository into the appropriate publicly-accessible directory. Then, when you commit a change, you run svn update against that other working copy, and voila! All your updates are on the site.

Tortoise context menus only work in windows explorer. If you want to use the tortoise commands (checkout,update,…) on your dreamhost directories , you can map a network drive to your ftp location. You will need a tool like “novell netdrive” in order to do the mapping.

This, in fact, is the method recommended in the Subversion FAQ. The FAQ even mentions that you can go a step further and have your site update automatically whenever you commit, using Subversion’s cool “hook scripts” functionality to automatically run svn update upon commit.

A userbased script to this purpose can be found down the bottom Userbased Scripts

However, if you try that on Dreamhost, you’ll find that the post-commit hook script will never successfully execute svn update. Why? Here’s the explanation I got from DH:

The reason for why this doesn’t work is that since the [hook] script gets executed as the apache process, the script runs as user dhapache. If you try to have user dhapache (which is a normal unprivileged user) update a subversion repo in your home directory and owned by you, it will fail.

In other words, it’s a permissions issue. And due to the way Subversion is set up by DH, it’s one that you can’t fix — at least not directly.

There is a way around this, though: instead of having your hook script do the svn update directly, we’re going to put a C program in the middle. In other words, instead of the post-commit hook script calling svn update, it will now call a C program, which will execute a bash script that runs the svn update. This gets you around the “script runs as Web server user” issue.

Here’s the steps for doing this:

1. Move your non-working post-commit file to post-commit.bash.

2. Create a file named post-commit.c with the contents:

#define REAL_SCRIPT “/path/to/post-commit.bash”
#include
#include
main( ac, av )
char **av;
{
execv( REAL_SCRIPT, av );
}

(Note: CHANGE the value of the REAL_SCRIPT variable in the C program to be the full path to your newly created post-commit.bash file — something like “/home/YOURUSER/svn/YOURREPOSITORY/hooks/post-commit.bash”.)

3. Compile the C code:

gcc -o post-commit post-commit.c

4. Setuid the file:

chmod 4755 post-commit

(if the above doesn’t work, try)

chmod +s post-commit

Assuming that you have gave the right path to post-commit.bash in the C program, Subversion will now automatically execute it every time you make a commit to your repository, allowing you to do cool stuff like automatically updating a site with newly committed changes. Pretty nifty!

Why does this work? By setting the setuid/setgid bit, when dhapache calls the executable it will temporarily assume the permissions of the owner of the file (you) and perform the actions. For security reasons, this functionality is disabled on most operating systems for shell scripts, so we have to go with the C code.

You may also want to deny public access to the .svn folders that are checked out as part of a subversion repository by adding this to an .htaccess file in your web root:

RedirectMatch 403 /\.svn.*$

[edit] Upgrading to Newest Subversion

If you would like to install a newer version of subversion (e.g., for repository syncing), then you will need to go to this page

http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=260&expandFolder=74

and download both the subversion-x.x.x.tar.bz2 and the subversion-deps-x.x.x.tar.bz2. The “deps” file contains all the subversion dependencies.

The newest subversion as of 2007.03.12 is 1.4.3. To install locally, create a temporary work directory and do the following.

mkdir tmpwork
cd tmpwork
wget http://subversion.tigris.org/downloads/subversion-1.4.3.tar.bz2
wget http://subversion.tigris.org/downloads/subversion-deps-1.4.3.tar.bz2
tar -xjf subversion-1.4.3.tar.bz2
tar -xjf subversion-deps-1.4.3.tar.bz2
cd subversion-1.4.3
./configure –prefix=/home/{yourlogin} –with-ssl
make
make install

That will install the new subversion into your user directory. You’ll need to change the path to include your ~/bin directory to use the new binaries.
[edit] Interfacing with Subversion from PHP

You’ll need to install the PECL extension SVN. Detailed instructions are available here: http://hp.jpsband.org/xhtml-compiler/docs/compile-svn.txt
[edit] Setting up post commit emails

Simply edit your svn/(repository name)/hooks/post-commit.tmpl file. Change /usr/lib/subversion/hook-scripts/commit-email.pl “$REPOS” “$REV” [email protected] to your commit email list. Then reinitialize SVN.

The actual file should be post-commit, not post-commit.tmpl. If you use an editor that edits in place, as opposed to (for instance) emacs which moves the original aside and creates a fresh file, you should still have the right owner/group and not need any reinitializing.

The default settings for commit-email.pl may be to use a connection to localhost instead of firing up sendmail, in which case you need the –from parameter for bounce/envelope address.
[edit] External Links
[edit] Books and tutorials

Version Control with Subversion is the Online Subversion book freely available online in its entirety. If you have shared hosting, focus on the file:// and svn+ssh:// protocols (which do not involve any actual continually running “server” processes that might not be good in a shared environment). If you have a dedicated hosting, you can do whatever you want I imagine.

* Subversion on Dreamhost

[edit] GUI Integration

* SCPlugin is a Finder contextual menu plugin for Mac OS X for subversion operations. Windows users will recognize it as the Mac analogue to TortoiseSVN.
* SVN Client Requires payed registration after 60 day trial.
* SvnX is an excellent GUI for Mac OS X.
* TortoiseSVN is a subversion client implemented as a Windows shell extension.
* RapidSVN Multi-platform GUI for Mac OS X, Linux, Windows.
* Syncro SVN Client a cross platform Subversion client.

[edit] Web-based repository browsers

These provide a number of convenient features, including RSS feeds, integrated bug tracking, collaborative documentation:

* Trac (Difficult Installation)
* ViewVC formerly ViewCVS official site, old site
* WebSVN – auto-tarball of directories, syntax highlighting – official site
* SVN::Web – on CPAN

[edit] See Also

* Subversion Installation
* CVS
* TortoiseSVN using Putty sessions

[edit] Userbased Scripts

This script creates a post-commit hook that runs another post-commit (which actually performs updates). It disables both stdout and stderr to avoid problems with Apache and TortoiseSVN. The script will set up initial import directories (standard trunk, tag, branches folders) and create the necessary hook files to automatically update your http root from /trunk.

Simply copy and paste the following script, filling in the appropriate variables with your own information, into a file on your server. Then set execute permissions (chmod 775 scriptname) and run it (./scriptname). Once it’s done you can safely delete the script and try committing changes to your site.

#./bin/bash
pname=”REPNAME”
webpage=”WEBPAGEFOLDER/”
svnurl=”http://svn.YOURHOST.com”
homedir=”/home/YOURUSER”

mkdir svninit
mkdir svninit/trunk
mkdir svninit/branches
mkdir svninit/tags

svn import svninit $svnurl/$pname -m “Initial Import”

rm -r svninit

svn co $svnurl/$pname/trunk/ $homedir/$webpage

touch post-commit.c

echo ‘#include ‘ > post-commit.c
echo ‘#include ‘ >> post-commit.c
echo ‘#include ‘ >> post-commit.c
echo ‘int main(void)’ >> post-commit.c
echo ‘{‘ >> post-commit.c
echo ‘ close(1);’ >> post-commit.c
echo ‘ close(2);’ >> post-commit.c
echo ‘ execl(“/usr/bin/svn”, “svn”, “update”, “‘$homedir’/’$webpage'”, (const char *) NULL);’ >> post-commit.c
echo ‘ return(EXIT_SUCCESS);’ >> post-commit.c
echo ‘}’ >> post-commit.c

gcc -o post-commit.bash post-commit.c
rm post-commit.c
mv -f post-commit.bash $homedir/svn/$pname/hooks/
chmod 775 $homedir/svn/$pname/hooks/post-commit.bash
chmod +s $homedir/svn/$pname/hooks/post-commit.bash

touch post-commit.c

echo ‘#define REAL_SCRIPT “‘$homedir’/svn/’$pname’/hooks/post-commit.bash”‘ > post-commit.c
echo ‘#include ‘ >> post-commit.c
echo ‘#include ‘ >> post-commit.c
echo ‘#include ‘ >> post-commit.c
echo ‘#include ‘ >> post-commit.c
echo ‘int main( ac, av )’ >> post-commit.c
echo ‘ char **av;’ >> post-commit.c
echo ‘{‘ >> post-commit.c
echo ‘ close(1);’ >> post-commit.c
echo ‘ close(2);’ >> post-commit.c
echo ‘ execv( REAL_SCRIPT, av );’ >> post-commit.c
echo ‘ return(EXIT_SUCCESS);’ >> post-commit.c
echo ‘}’ >> post-commit.c

gcc -o post-commit post-commit.c
rm post-commit.c
mv -f post-commit $homedir/svn/$pname/hooks/
chmod 775 $homedir/svn/$pname/hooks/post-commit
chmod +s $homedir/svn/$pname/hooks/post-commit

中国婚姻法唯一保护人权的地方

近日读 婚姻家庭法新论 所看到
:中国婚姻法并不禁止直系姻亲结婚.

解释:姻亲,法律意义上三种亲属之一,指由于婚姻产生的亲属关系.
包括配偶的血亲,血亲的配偶,,配偶的血亲的配偶,血亲的配偶的血亲四种(中国法律只承认前三种)
对应的,直系姻亲指 直系晚辈亲属的配偶与配偶的直系长辈亲属之间的关系.简单的说,就是女婿与岳母;媳妇与公丈之间关系,当然也包括辈分相差更大的姻亲关系

中国婚姻法并不禁止直系姻亲结婚并不禁止直系姻亲结婚.相比之下,不仅香港,澳门地区法律,台湾等汉语文化圈影响下国家立法禁止此,甚至一些西方民主国家也禁止此.相比之下,中国婚姻法这里堪称是唯一保护人权地方.甚至可以说是整个中国现行法律体系中屈指可数的保护人权地方之一

小谢

同为聊斋文也.一并录之

渭南姜部郎第,多鬼魅,常惑人,因徙去。留苍头门之而死,数易皆死,遂废之。里有陶生望三者,夙倜傥,好狎妓,酒阑辄去之。友人故使妓奔就之,亦笑内不拒,而实终夜无所沾染。常宿部郎家,有婢夜奔,生坚拒不乱,部郎以是契重之。家綦贫,又有“鼓盆之戚”;茅屋数椽,溽暑不堪其热,因请部郎假废第。部郎以其凶故却之,生因作《续无鬼论》献部郎,且曰:“鬼何能为!”部郎以其请之坚,诺之。
  生往除厅事。薄暮,置书其中,返取他物,则书已亡。怪之,仰卧榻上,静息以伺其变。食顷,闻步履声,睨之,见二女自房中出,所亡书送还案上。一约二十,一可十七八,并皆姝丽。逡巡立榻下,相视而笑。生寂不动。长者翘一足踹生腹,少者掩口匿笑。生觉心摇摇若不自持,即急肃然端念,卒不顾。女近以左手捋髭,右手轻批颐颊作小响,少者益笑。生骤起,叱曰:“鬼物敢尔!”二女骇奔而散。生恐夜为所苦,欲移归,又耻其言不掩,乃挑灯读。暗中鬼影僮僮,略不顾瞻。夜将半,烛而寝。始交睫,觉人以细物穿鼻,奇痒,大嚏,但闻暗处隐隐作笑声。生不语,假寐以俟之。俄见少女以纸条拈细股,鹤行鹭伏而至,生暴起诃之,飘窜而去。既寝,又穿其耳。终夜不堪其扰。鸡既鸣,乃寂无声,生始酣眠,终日无所睹闻。
  日既下,恍惚出现。生遂夜炊,将以达旦。长者渐曲肱几上观生读,既而掩生卷。生怒捉之,即已飘散;少间,又抚之。生以手按卷读。少者潜于脑后,交两手掩生目,瞥然去,远立以哂。生指骂曰:“小鬼头!捉得便都杀却!”女子即又不惧。因戏之曰:“房中纵送,我都不解,缠我无益。”二女微笑,转身向灶,析薪溲米,为生执爨。生顾而奖之曰:“两卿此为,不胜憨跳耶?”俄顷粥熟,争以匕、箸、陶碗置几上。生曰:“感卿服役,何以报德?”女笑云:“‘饭中溲合砒、酖矣。”生曰:“与卿夙无嫌怨,何至以此相加。”啜已复盛,争为奔走。生乐之,习以为常。
  日渐稔,接坐倾语,审其姓名。长者云:“妾秋容乔氏,彼阮家小谢也。”又研问所由来,小谢笑曰:“痴郎!尚不敢一呈身,谁要汝问门第,作嫁娶耶?”生正容曰:“相对丽质,宁独无情;但阴冥之气,中人必死。不乐与居者,行可耳;乐与居者,安可耳。如不见爱,何必玷两佳人?如果见爱,何必死一狂生?”二女相顾动容,自此不甚虐弄之。然时而探手于怀,捋裤于地,亦置不为怪。
  一日,录书未卒业而出,返则小谢伏案头,操管代录。见生,掷笔睨笑。近视之,虽劣不成书,而行列疏整。生赞曰:“卿雅人也!苟乐此,仆教卿为之。”乃拥诸怀,把腕而教之画。秋容自外入,色乍变,意似妒。小谢笑曰:“童时尝从父学书,久不作,遂如梦寐。”秋容不语。生喻其意,伪为不觉者,遂抱而授以笔,曰:“我视卿能此否?”作数字而起,曰:“秋娘大好笔力!”秋容乃喜。生于是折两纸为范,俾共临摹,生另一灯读。窃喜其各有所事,不相侵扰。仿毕,祗立几前,听生月旦。秋容素不解读,涂鸦不可辨认,花判已,自顾不如小谢,有惭色。生奖慰之,颜霁。二女由此师事生,坐为抓背,卧为按股,不惟不敢侮,争媚之。逾月,小谢书居然端好,生偶赞之。秋容大惭,粉黛淫淫,泪痕如线,生百端慰解之乃已。因教之读,颖悟非常,指示一过,无再问者。与生竞读,常至终夜。小谢又引其弟三郎来拜生门下,年十五六,姿容秀美,以金如意一钩为贽。生令与秋容执一经,满堂咿唔,生于此设鬼帐焉。部郎闻之喜,以时给其薪水。积数月,秋容与三郎皆能诗,时相酬唱。小谢阴嘱勿教秋容,生诺之;秋容阴嘱勿教小谢,生亦诺之。一日生将赴试,二女涕泪相别。三郎曰:“此行可以托疾免;不然,恐履不吉。”生以告疾为辱,遂行。先是,生好以诗词讥切时事,获罪于邑贵介,日思中伤之。阴赂学使,诬以行简,淹禁狱中。资斧绝,乞食于囚人,自分已无生理。忽一人飘忽而入,则秋容也,以馔具馈生。相向悲咽,曰:“三郎虑君不吉,今果不谬。三郎与妾同来,赴院申理矣。”数语而出,人不之睹。越日部院出,三郎遮道声屈,收之。秋容入狱报生,返身往侦之,三日不返。生愁饿无聊,度日如年。忽小谢至,怆惋欲绝,言:“秋容归,经由城隍祠,被西廊黑判强摄去,逼充御媵。秋容不屈,今亦幽囚。妾驰百里,奔波颇殆;至北郭,被老棘刺吾足心,痛彻骨髓,恐不能再至矣。”因示之足,血殷凌波焉。出金三两,跛踦而没。部院勘三郎,素非瓜葛,无端代控,将杖之,扑地遂灭。异之。览其状,情词悲恻。提生面鞫,问:“三郎何人?”生伪为不知。部院悟其冤,释之。既归,竟夕无一人。更阑,小谢始至,惨然曰:“三郎在部院,被廨神押赴冥司;冥王因三郎义,令托生富贵家。秋容久锢,妾以状投城隍,又被按阁不得入,且复奈何?”生忿然曰:“黑老魅何敢如此!明日仆其像,践踏为泥,数城隍而责之。案下吏暴横如此,渠在醉梦中耶!”悲愤相对,不觉四漏将残,秋容飘然忽至。两人惊喜,急问。秋容泣下曰:“今为郎万苦矣!判日以刀杖相逼,今夕忽放妾归,曰:‘我无他意,原亦爱故;既不愿,固亦不曾污玷。烦告陶秋曹,勿见谴责。’”生闻少欢,欲与同寝,曰:“今日愿与卿死。”二女戚然曰:“向受开导,颇知义理,何忍以爱君者杀君乎?”执不可。然俯颈倾头,情均伉俪。二女以遭难故,妒念全消。会一道士途遇生,顾谓“身有鬼气”。生以其言异,具告之。道士曰:“此鬼大好,不拟负他。”因书二符付生,曰:“归授两鬼,任其福命。如闻门外有哭女者,吞符急出,先到者可活。”生拜受,归嘱二女。后月余,果闻有哭女者,二女争弃而去。小谢忙急,忘吞其符。见有丧舆过,秋容直出,入棺而没;小谢不得入,痛哭而返。生出视,则富室郝氏殡其女。共见一女子入棺而去,方共惊疑;俄闻棺中有声,息肩发验,女已顿苏。因暂寄生斋外,罗守之。忽开目问陶生,郝氏研诘之,答云:“我非汝女也。”遂以情告。郝未深信,欲舁归,女不从,径入生斋,偃卧不起。郝乃识婿而去。
  生就视之,面庞虽异,而光艳不减秋容,喜惬过望,殷叙平生。忽闻呜呜然鬼泣,则小谢哭于暗陬。心甚怜之,即移灯往,宽譬哀情,而衿袖淋浪,痛不可解,近晓始去。天明,郝以婢媪赍送香奁,居然翁婿矣。暮入帷房,则小谢又哭。如此六七夜。夫妇俱为惨动,不能成合卺之礼。生忧思无策,秋容曰:“道士,仙人也。再往求,倘得怜救。”生然之。迹道士所在,叩伏自陈。道士力言“无术”,生哀不已。道士笑曰:“痴生好缠人。合与有缘,请竭吾术。”乃从生来,索静室,掩扉坐,戒勿相问,凡十余日,不饮不食。潜窥之,瞑若睡。一日晨兴,有少女搴帘入,明眸皓齿,光艳照人,微笑曰:“跋履终日,惫极矣!被汝纠缠不了,奔驰百里外,始得一好庐舍,道人载与俱来矣。待见其人,便相交付耳。”敛昏。小谢至,女遽起迎抱之,翕然合为一体,仆地而僵。道士自室中出,拱手径去。拜而送之。及返,则女已苏。扶置床上,气体渐舒,但把足呻言趾股酸痛,数日始能起。
  后生应试得通籍。有蔡子经者与同谱,以事过生,留数日。小谢自邻舍归,蔡望见之,疾趋相蹑,小谢侧身敛避,心窃怒其轻薄。蔡告生曰:“一事深骇物听,可相告否?”诘之,答曰:“三年前,少妹夭殒,经两夜而失其尸,至今疑念。适见夫人。何相似之深也?”生笑曰:“山荆陋劣,何足以方君妹?然既系同谱,义即至切,何妨一献妻孥。”乃入内室,使小谢衣殉装出。蔡大惊曰:“真吾妹也!”因而泣下。生乃具述其本末。蔡喜曰:“妹子未死,吾将速归,用慰严慈。”遂去。过数日,举家皆至。后往来如郝焉。
  异史氏曰:“绝世佳人,求一而难之,何遽得两哉!事千古而一见,惟不私奔女者能遘之也。道士其仙耶?何术之神也!苟有其术,丑鬼可交耳。”

锦瑟-聊斋

偶发现拿聊斋当小说看真不错,以前居然没发现
这篇的男主角巨恶心,连神女带来的侍女一块娶,外加一小妾.^_^

沂人王生,少孤,自为族。家清贫;然风标修洁,洒然裙履少年也。富翁兰氏,见而悦之,妻以女,许为起屋治产。娶未几而翁死。妻兄弟鄙不齿数,妇尤骄倨,常佣奴其夫;自享馐馔,生至则脱粟瓢饮,折稀为匕置其前。王悉隐忍之。年十九往应童试被黜。自郡中归,妇适不在室,釜中烹羊臛熟,就啖之。妇入不语,移釜去。生大惭,抵箸地上,曰:“所遭如此,不如死!”妇恚,问死期,即授索为自经之具。生忿投羹碗败妇颡。

  生含愤出,自念良不如死,遂怀带入深壑。至丛树下,方择枝系带,忽见土崖间微露裙幅,瞬息一婢出,睹生急返,如影就灭,土壁亦无绽痕。固知妖异,然欲觅死,故无畏怖,释带坐觇之。少间复露半面,一窥即缩去。念此鬼物,从之必有死乐,因抓石叩壁曰:“地如可入,幸示一途!我非求欢,乃求死者。”久之无声。王又言之,内云:“求死请姑退,可以夜来。”音声清锐,细如游蜂。生曰:“诺。”遂退以待夕。未几星宿已繁,崖间忽成高第,静敞双扉。生拾级而入。才数武,有横流涌注,气类温泉。以手探之,热如沸汤,不知其深几许。疑即鬼神示以死所,遂踊身入。热透重衣,肤痛欲糜,幸浮不沉。泅没良久,热渐可忍,极力爬抓,始登南岸,一身幸不泡伤。行次,遥见厦屋中有灯火,趋之。有猛犬暴出,龁衣败袜。摸石以投,犬稍却。又有群犬要吠,皆大如犊。危急间婢出叱退,曰:“求死郎来耶?吾家娘子悯君厄穷,使妾送君入安乐窝,从此无灾矣。”挑灯导之。启后门,黯然行去。

  入一家,明烛射窗,曰:“君自入,妾去矣。”生入室四瞻,盖已入己家矣。反奔而出,遇妇所役老媪曰:“终日相觅,又焉往!”反曳入。妇帕裹伤处,下床笑逆,曰:“夫妻年余,狎谑顾不识耶?我知罪矣。君受虚诮,我被实伤,怒亦可以少解。”乃于床头取巨金二铤置生怀,曰:“以后衣食,一惟君命可乎?”生不语,抛金夺门而奔,仍将入壑,以叩高第之门。

  既至野,则婢行缓弱,挑灯尤遥望之。生急奔且呼,灯乃止。既至,婢曰:“君又来,负娘子苦心矣。”王曰:“我求死,不谋与卿复求活。娘子巨家,地下亦应需人。我愿服役,实不以有生为乐。”婢曰:“乐死不如苦生,君设想何左也!吾家无他务。惟淘河、粪除、饲犬、负尸;作不如程,则刵耳劓鼻、敲肘刭趾。君能之乎?”答曰:“能之。”又入后门,生问:“诸役何也?适言负尸,何处得如许死人?”婢曰:“娘子慈悲,设‘给孤园’,收养九幽横死无归之鬼。鬼以千计,日有死亡,须负瘗之耳。请一过观之。”移时入一门,署“给孤园”。入,见屋宇错杂,秽臭熏人。园中鬼见烛群集,皆断头缺足,不堪入目。回首欲行,见尸横墙下;近视之,血肉狼藉。曰:“半日未负,已被狗咋。”即使生移去之。生有难色,婢曰:“君如不能,请仍归享安乐。”生不得已,负置秘处。乃求婢缓颊,幸免尸污。婢诺。

  行近一舍,曰:“姑坐此,妾入言之。饲狗之役较轻,当代图之,庶几得当以报。”去少顷,奔出,曰:“来,来!娘子出矣。”生从入。见堂上笼烛四悬,有女郎近户坐,乃二十许天人也。生伏阶下,女郎命曳起之,曰:“此一儒生乌能饲犬?可使居西堂主薄。”生喜伏谢,女曰:“汝以朴诚,可敬乃事。如有舛错,罪责不轻也!”生唯唯。婢导至西堂,见栋壁清洁,喜甚,谢婢。始问娘子官阀,婢曰:“小字锦瑟,东海薛侯女也。妾名春燕。旦夕所需,幸相闻。”婢去,旋以衣履衾褥来,置床上。生喜得所。

  黎明早起视事,录鬼籍。一门仆役尽来参谒,馈酒送脯甚多。生引嫌,悉却之。日两餐皆自内出。娘子察其廉谨,特赐儒巾鲜衣。凡有赍赉,皆遣春燕。婢颇风格,既熟,颇以眉目送情。生斤斤自守,不敢少致差跌,但伪作𫘤钝。积二年余赏给倍于常廪,而生谨抑如故。

  一夜方寝,闻内第喊噪。急起捉刀出,见炬火光天。入窥之,则群盗充庭,厮仆骇窜。一仆促与偕遁,生不肯,涂面束腰杂盗中呼曰:“勿惊薛娘子!但当分括财物,勿使遗漏。”时诸舍群贼方搜锦瑟不得,生知未为所获,潜入第后独觅之。遇一伏妪,始知女与春燕皆越墙矣。生亦过墙,见主婢伏于暗陬,生曰:“此处乌可自匿?”女曰:“吾不能复行矣!”生弃刀负之。奔二三里许,汗流竟体,始入深谷,释肩令坐。欻一虎来,生大骇,欲迎当之,虎已衔女。生急捉虎耳,极力伸臂入虎口,以代锦瑟。虎怒释女,嚼生臂,脆然有声。臂断落地,虎亦返去。女泣曰:“苦汝矣!苦汝矣!”生忙遽未知痛楚,但觉血溢如水,使婢裂衿裹断处。女止之,俯觅断臂,自为续之;乃裹之。东方渐白,始缓步归,登堂如墟。天既明,仆媪始渐集。女亲诣西堂,问生所苦。解裹,则臂骨已续;又出药糁其创,始去。由此益重生,使一切享用悉与己等。

  臂愈,女置酒内室以劳之。赐之坐,三让而后隅坐。女举爵如让宾客。久之,曰:“妾身已附君体,意欲效楚王女之于臣建。但无媒,羞自荐耳。”生惶恐曰:“某受恩重,杀身不足酬。所为非分,惧遭雷殛,不敢从命。苟怜无室,赐婢已过。”一日女长姊瑶台至,四十许佳人也。至夕招生入,瑶台命坐,曰:“我千里来为妹主婚,今夕可配君子。”生又起辞。瑶台遽命酒,使两人易盏。生固辞,瑶台夺易之。生乃伏地谢罪,受饮之。瑶台出,女曰:“实告君:妾乃仙姬,以罪被谪。自愿居地下收养冤魂,以赎帝谴。适遭天魔之劫,遂与君有附体之缘。远邀大姊来,固主婚嫁,亦使代摄家政,以便从君归耳。”生起敬曰:“地下最乐!某家有悍妇;且屋宇隘陋,势不能容委曲以共其生。”女笑曰:“不妨。”既醉,归寝,欢恋臻至。

  过数日,谓生曰:“冥会不可长,请郎归。君干理家事毕,妾当自至。”以马授生,启扉自出,壁复合矣。生骑马入村,村人尽骇。至家门则高庐焕映矣。先是,生去,妻召两兄至,将箠楚报之;至暮不归,始去。或于沟中得生履,疑其已死。既而年余无耗。有陕中贾某,媒通兰氏,遂就生第与妇合。半年中,修建连亘。贾出经商,又买妾归,自此不安其室。贾亦恒数月不归。生讯得其故,怒,系马而入。见旧媪,媪惊伏地。生叱骂久,使导诣妇所,寻之已遁,既于舍后得之,已自经死。遂使人舁归兰氏。呼妾出,年十八九,风致亦佳,遂与寝处。贾托村人,求反其妾,妾哀号不肯去。生乃具状,将讼其霸产占妻之罪,贾不敢复言,收肆西去。

  方疑锦瑟负约;一夕正与妾饮,则车马扣门而女至矣。女但留春燕,余即遣归。入室,妾朝拜之,女曰:“此有宜男相,可以代妾苦矣。”即赐以锦裳珠饰。妾拜受,立侍之;女挽坐,言笑甚欢。久之,曰:“我醉欲眠。”生亦解履登床,妾始出;入房则生卧榻上;异而反窥之,烛已灭矣。生无夜不宿妾室。一夜妾起,潜窥女所,则生及女方共笑语。大怪之。急反告生,则床上无人矣。天明阴告生;生亦不自知,但觉时留女所、时寄妾宿耳。生嘱隐其异。久之,婢亦私生,女若不知之。婢忽临蓐难产,但呼“娘子”。女入,胎即下;举之,男也。为断脐置婢怀,笑曰:“婢子勿复尔!业多,则割爱难矣。”自此,婢不复产。妾出五男二女。居三十年,女时返其家,往来皆以夜。一日携婢去,不复来。生年八十,忽携老仆夜出,亦不返。

Gallery2自定义网站Logo方法

虽然是个小问题,不过好像没有现成的中文信息
下面资料是我从Gallery官方支持Wiki(http://gallery.sf.net/docs.php)找来的
文字比较简单,我就不翻译了.

Gallery2:How to Add Custom Banner or Remove Gallery Logo
From Gallery Codex

If you want to add your own banner at the top of every page, you just need to follow this simple process:

1. If you don’t have a /local directory in your theme’s template directory create a local directory at /themes//templates/.
2. Copy the theme.tpl file from /themes//templates/ to /themes//templates/local/.
3. Finally, edit the copy of theme.tpl you just made and remove or change these lines:

url href=”sitelogo.jpg” forceDirect=true}” alt=””/>

Then put a sitelogo.jpg file in each multisite directory.

神女-聊斋志异

最近迷上了聊斋志异,每天都要读几篇.
今天读完这篇”神女”,实在不爽

一来痛斥男主人公的无耻(娶了神女后,居然又享齐人之福)
二来羡慕他.^_(
三是对神女抒发敬佩与仰慕(神女 与西方文化传统的”女神”意像显然存在差别,但前者相对与日本文化中”女优”形象,却又远胜了,”神”应该是”可远观而不可亵玩”,而”女性’意像在传统男权文化视野里是被动性的,”从属性”的角色,甚至女性的全部意义在于其被动性的”性”角色带来的快感.当”神”与”女”的意像相结合,成为”女神”或”神女”,这就表达了男性的双重情感,对女性的”爱好”,和对”神”的敬仰;从根本上说,还是没能逃脱男权文化观念的窠臼.
然而,无论如何,”女神”或”神女”仍然是我最为”信仰”的)

神女.
米生,闽人,偶入郡,饮醉过市,闻高门中有箫声。询知为开寿筵者,然门庭殊清寂。醉中雅爱笙歌,因就街头写晚生刺,封祝寿仪投焉。人问:“君系此翁何亲?”米云:“并非。”人又云:“此流寓于此,不审何官,甚属骄倨。既非亲属,又将何求?”生悔之,而刺已投矣。

  未几两少年出迎,华裳炫目,丰采都雅,揖生入。见一叟南向坐,东西列数筵,客六七人,皆似贵胄;见生至,俱起为礼,叟亦杖而起。生久立,待与周旋,叟殊不离席。两少年致词曰:“家君衰迈,起拜良难,予兄弟代谢高贤之枉驾也。”生逊谢。遂增一筵于上,与叟接席。未几女乐作于下。座后设琉璃屏,以幛内眷。鼓吹大作,座客无哗。筵将终,两少年起,各以巨杯劝客,杯可容三斗;生有难色,然见客受,亦受。顷刻四顾,主客尽釂,生不得已亦强尽之。少年复斟;生觉惫甚,起而告退。少年强挽其裾。生大醉逖地,但觉有人以冷水洒面,恍然若寤。起视,宾客尽散,惟一少年捉臂送之,遂别而归。后再过其门,则已迁去矣。

  自郡归,偶适市,一人自肆中出招之饮。并不识;姑从之入,则座上先有里人鲍庄在焉。问其人,乃诸姓,市中磨镜者也。问:“何相识?”曰:“前日上寿者,君识之否?”生曰:“不识。”诸曰:“予出入其门最稔。翁,傅姓,不知其何籍、何官。先生上寿时,我方在墀下,故识之也。”日暮饮散。鲍庄夜死于途。鲍父不识诸,执名讼生。检得鲍庄体有重伤,生以谋杀论死,备历械梏;以诸未获,罪无申证,颂系之。年余直指巡方,廉知其冤,释之。

  家中田产荡尽,衣巾革褫,冀其可以辨复,于是携囊入郡。日将暮,休憩路侧。遥见小车来,二青衣夹随之。既过忽命停舆,车中命一青衣问生:“君非米姓乎?”生曰: “诺。”问:“何贫窭若此?”生告以故。问:“安往?”又告之。青衣向车中语;复返,请生至车前。车中以纤手搴帘,微睨之,乃绝代佳人也。谓生曰:“君不幸得无妄之祸,甚为太息。今日学使署非白手可以出入者,途中无可为赠,……”乃于髻上摘珠花一朵授生,曰:“此物可鬻百金,请缄藏之。”生下拜,欲问官阀,车发已远,不解何人。执花悬想,上缀明珠,非凡物也。珍藏而行。至郡投状,上下勒索甚苦;生又不忍货花,遂归依于兄嫂,幸兄贤,为之经纪,贫不废读。

  过岁赴郡应试,误入深山。时值清明,游人甚众。有数女骑来,内一女郎,即向年车中人也。见生停骖,问:“何往?”生具对。女惊曰:“君衣顶尚未复耶?” 生惨然出珠花,曰:“不忍弃此,故未复也。”女郎晕红上颊,嘱云:“且坐待路隅。”款段而去。久之一婢驰马来,以裹物授生,曰:“娘子说:如今学使之门如市,赠白金二百,为进取之资。”生辞曰:“娘子惠我多矣!自公掇芹不难,重赐所不敢受。但告以姓名,绘一小像,焚香供之,足矣。”婢不顾,委金于地,上马而去。生得金,终不屑夤缘。旋入邑庠第一。乃以金授兄;兄善行运,三年旧业尽复。适有巡抚于闽者乃生祖门人,优恤甚厚。然生素清鲠,虽属通家,不肯少有干谒。

  一日有客裘马至门,家人不识。生出视,则傅公子也。揖入,各道间阔。治具相款,肴酒既陈,公子起而请间;相将入内,公子拜伏于地。生惊问故,则怆然曰:“家君适罹大祸,欲有求于抚台,非兄不可。”生力辞曰:“渠虽世谊,而以私干人,生平从不为也。”公子伏地哀泣。生厉色曰:“小生与公子,一饮之知交耳,何遂以丧节强人!”公子大惭,起而别去。越日方独坐,有青衣人入,视之即山中赠金者。生方惊起,青衣曰:“君忘珠花耶?”生曰:“不敢忘。”曰:“昨公子,即娘子胞兄也。”生闻之窃喜,伪曰:“此难相信。若得娘子亲见一言,则油鼎可蹈耳;不然,不敢奉命。”青衣乃驰马去。更半复返,扣扉入曰:“娘子来矣。”言未几,女郎惨然入,向壁而哭,不出一语。生拜曰:“小生非娘子,无以有今日。但有驱策,敢不惟命!”女曰:“受人求者常骄人,求人者常畏人。中夜奔波,生平何解此苦,只以畏人故耳,亦复何言!”生慰之曰:“小生所以不遽诺者,恐过此一见为难耳。使卿夙夜蒙露,吾知罪矣!”因挽其祛。隐抑搔之。女怒曰:“子诚敝人也!不念畴昔之义,而欲乘人之厄。予过矣!予过分!”忿然而出,登车欲去。生追出谢过,长跪而要遮之。青衣亦为缓颊,女意稍解,就车中谓生曰:“实告君:妾非人,乃神女也。家君为南岳都理司,偶失礼于地官,将达帝庭;非本地都人官印信不可解也。君如不忘旧义,以黄纸一幅为妾求之。”言已,车发遂去。

  生归,悚惧不已。乃假驱祟言于巡抚。巡抚以事近巫盅,不许。生以厚金赂其心腹,诺之,而未得其便。乃归,青衣候门,生具告之,默然遂去,意似怨其不忠。生追送之曰:“归告娘子:如事不谐,我以身命殉之!”归而终夜思维,计无所出。适院署有宠妾购珠,生乃以珠花献之。姬大悦,窃印为生嵌之。怀归,青衣适至。笑曰:“幸不辱命。然数年来贫贱乞食所不忍鬻者,今仍为主人弃之矣!”因告以情。且曰:“黄金抛置,我都不惜:寄语娘子:珠花须要偿也。”逾数日,傅公子登堂申谢,纳黄金百两。生作色曰:“所以然者,为令妹之惠我无私耳;不然,即万金岂足以易名节哉!”再强之,生色益厉。公子惭退,曰:“此事殊未了!”翼日青衣奉女郎命,进明珠百颗,曰:“此足以偿珠花否耶?”生曰:“重花者非贵珠也。设当日赠我万镒之宝,直须卖作富家翁耳;什袭而甘贫贱何为乎?娘子神人,小生何敢他望,幸得报洪恩于万一,死无憾矣!”青衣置珠案间,生朝拜而后却之。

  越数日公子又至。生命治酒。公子使从人入厨下,自行烹调,相对纵饮,欢若一家。有客馈苦糯,公子饮而美,引尽百盏,面颊微赪。乃谓生曰:“君贞介士,愚兄弟不能早知君,有愧裙钗多矣。家君感大德,无以相报,欲以妹子附为婚姻,恐以幽明见嫌也。”生喜出非常,不知所对。公子辞出,曰:“明夜七月初九,新月钩辰,天孙有少女下嫁,吉期也,可备青庐。” 次夕果送女郎至,一切无异常人。三日后,女自兄嫂以及仆妇,皆有馈赏。又最贤,事嫂如姑。数年不育,劝纳妾,生不肯。

  适兄贾于江淮,为买少姬而归。姬,姓顾,小字博士,貌亦清婉,夫妇皆喜。见髻上插珠花,酷似当年故物;摘视,果然。异而诘之,答云:“昔有巡抚爱妾死,其婢盗出鬻于市,先人廉其值,买归。妾爱之。先父止生妾,故与妾。后父死家落,妾寄养于顾媪家。顾,妾姨行,见珠屡欲售去,妾死不肯,故得存也。”夫妇叹曰:“十年之物,复归故主,岂非数哉。”女另出珠花一朵,曰:“此物久无偶矣!”因并赐之,亲为簪于髻上。姬退,问女郎家世甚悉,家人皆讳言之。阴语生曰:“妾视娘子非人间人也,其眉目间有神气。昨簪花时得近视,其美丽出于肌里,非若凡人以黑白位置中见长耳。”生笑之。姬曰:“君勿言,妾将试之;如其神,但有所须,无人处焚香以求,彼当自知。”女郎绣袜精工,博士爱之而未敢言,乃即闺中焚香祝之。女早起,忽检箧中出袜,遣婢赠博士。生见而笑。女问故,以实告。女曰:“黠哉婢乎!”因其慧益怜爱之;然博士益恭,昧爽时必薰沐以朝。

  后博士一举两男,两人分字之。生年八十,女貌犹如处子。生病,女置材,倍加宽大。及死,女不哭;男女他适,女已入材中死矣。因合葬之。至今传为“大材冢”云。

  异史氏曰:“女则神矣,博士而能知之,是遵何术欤?乃知人之慧,固有灵于神者矣!”

小翠.

夜不能寐.引卷而卧,书曰:’小翠”.数年前之读物矣.今之视之,自当不同.
PS:下文复制自网上,编辑无良,多有讹误.在下对照原书,略为修正也.

王太常,越人。总角时,昼卧榻上。忽阴晦,巨霆暴作,一物大于猫,来伏身下,展转不离。移时晴霁,物即径出。视之非猫,始怖,隔房呼兄。兄闻,喜曰:“弟必大贵,此狐来避雷霆劫也。”后果少年登进士,以县令入为侍御。
  生一子名元丰,绝痴,十六岁不能知牝牡,因而乡党无于为婚。王忧之。适有妇人率少女登门,自请为妇。视其女,嫣然展笑,真仙品也。喜问姓名。自言:“虞氏。女小翠,年二八矣。”与议聘金。曰:“是从我糠覈不得饱,一旦置身广厦,役婢仆,厌膏梁,彼意适,我愿慰矣,岂卖菜也而索直乎!”夫人大悦,优厚之。妇即命女拜王及夫人,嘱曰:“此尔翁姑,奉侍宜谨。我大忙,且去,三数日当复来。”王命仆马送之,妇言:“里巷不远,无烦多事。”遂出门去。
  小翠殊不悲恋,便即奁中翻取花样。夫人亦爱乐之。数日妇不至,以居里问女,女亦憨然不能言其道路。遂治别院,使夫妇成礼。诸戚闻拾得贫家儿作新妇,共笑姗之;见女皆惊,群议始息。女又甚慧,能窥翁姑喜怒。王公夫妇,宠惜过于常情,然惕惕焉惟恐其憎子痴,而女殊欢笑不为嫌。第善谑,刺布作圆,蹋蹴为笑。着小皮靴,蹴去数十步,给公子奔拾之,公子及婢恒流汗相属。一日王偶过,圆然来直中面目。女与婢俱敛迹去,公子犹踊跃奔逐之。王怒,投之以石,始伏而啼。王以告夫人,夫人往责女,女俯首微笑,以手刓床.既退,憨笑如故,以脂粉涂公子作花面如鬼.夫人见之怒甚,呼女诟骂。女倚几弄带,不惧亦不言。夫人无奈之,因杖其子。元丰大号,女始色变,屈膝乞宥。夫人怒顿解,释杖去。女笑拉公子入室,代扑衣上尘,拭眼泪,摩挲杖痕,饵以枣栗。公子乃收涕以忻。女阖庭户,复装公子作霸王,作沙漠人;己乃艳服,束细腰,婆娑作帐下舞;或髻插雉尾,拨琵琶,丁丁缕缕然,喧笑一室,日以为常。王公以子痴,不忍过责妇,即微闻焉,亦若置之。
  同巷有王给谏者,相隔十余户,然素不相能;时值三年大计吏,忌公握河南道篆,思中伤之。公知其谋,忧虑无所为计。一夕早寝,女冠带饰冢宰状,剪素丝作浓髭,又以青衣饰两婢为虞候,窃跨厩马而出,戏云:“将谒王先生。”驰至给谏之门,即又鞭挝从人,大言曰:“我谒侍御王,宁谒给谏王耶!”回辔而归。比至家门,门者误以为真,奔白王公。公急起承迎,方知为子妇之戏。怒甚,谓夫人曰:“人方蹈我之瑕,反以闺阁之丑登门而告之,余祸不远矣!”夫人怒,奔女室,诟让之。女惟憨笑,并不一置词。挞之不忍,出之则无家,夫妻懊怨,终夜不寝。时冢宰某公赫甚,其仪采服从,与女伪装无少殊别,王给谏亦误为真。屡侦公门,中夜而客未出,疑冢宰与公有阴谋。次日早期,见而问曰:“夜相公至君家耶?”公疑其相讥,惭言唯唯,不甚响答。给谏愈疑,谋遂寝,由此益交欢公。公探知其情窃喜,而阴嘱夫人劝女改行,女笑应之。
  逾岁,首相免,适有以私函致公者误投给谏。给谏大喜,先托善公者往假万金,公拒之。给谏自诣公所。公觅巾袍并不可得;给谏伺候久,怒公慢,愤将行。忽见公子衮衣旒冕,有女子自门内推之以出,大骇;已而笑抚之,脱其服冕而去。公急出,则客去远。闻其故,惊颜如土,大哭曰:“此祸水也!指日赤吾族矣!”与夫人操杖往。女已知之,阖扉任其诟厉。公怒,斧其门,女在内含笑而告之曰:“翁无烦怒。有新妇在,刀锯斧钺妇自受之,必不令贻害双亲。翁若此,是欲杀妇以灭口耶?”公乃止。给谏归,果抗疏揭王不轨,衮冕作据。上惊验之,其旒冕乃梁黠心所制,袍则败布黄袱也。上怒其诬。又召元丰至,见其憨状可掬,笑曰:“此可以作天子耶?”乃下之法司。给谏又讼公家有妖人,法司严诘臧获,并言无他,惟颠妇痴儿日事戏笑,邻里亦无异词。案乃定,以给谏充云南军。
  王由是奇女。又以母久不至,意其非人,使夫人探诘之,女但笑不言。再复穷问,则掩口曰:“儿玉皇女,母不知耶?”无何,公擢京卿。五十余每患无孙。女居三年,夜夜与公子异寝,似未尝有所私。夫人异榻去,嘱公子与妇同寝。过数日,公子告母曰:“借榻去,悍不还!小翠夜夜以足股加腹上,喘气不得;又惯掐人股里。”婢妪无不粲然。夫人呵拍令去。一日女浴于室,公子见之,欲与偕;女笑止之,谕使姑待。既去,乃更泻热汤于瓮,解其袍裤,与婢扶之入。公子觉蒸闷,大呼欲出。女不听,以衾蒙之。少时无声,启视已绝。女坦笑不惊,曳置床上,拭体干洁,加复被焉。夫人闻之,哭而入,骂曰:“狂婢何杀吾儿!”女冁然曰:“如此痴儿,不如勿有。”夫人益恚,以首触女;婢辈争曳劝之。方纷噪间,一婢告曰:“公子呻矣!”辍涕抚之,则气息休休,而大汗浸淫,沾浃裀褥。食顷汗已,忽开目四顾遍视家人,似不相识,曰:“我今回忆往昔,都如梦寐,何也?”夫人以其言语不痴,大异之。携参其父,屡试之果不痴,大喜,如获异宝。至晚,还榻故处,更设衾枕以觇之。公子入室,尽遣婢去。早窥之,则榻虚设。自此痴颠皆不复作,而琴瑟静好如形影焉。
  年余,公为给谏之党奏劾免官,小有挂误。旧有广西中丞所赠玉瓶,价累千金,将出以贿当路。女爱而把玩之,失手堕碎,惭而自投。公夫妇方以免官不快,闻之,怒,交口呵骂。女奋而出,谓公子曰:“我在汝家,所保全者不止一瓶,何遂不少存面目?实与君言:我非人也。以母遭雷霆之劫,深受而翁庇翼;又以我两人有五年夙分,故以我来报曩恩、了夙愿耳。身受唾骂、擢发不足以数,所以不即行者,五年之爱未盈。今何可以暂止乎!”盛气而出,追之已杳。公爽然自失,而悔无及矣。公子入室,睹其剩粉遗钩,恸哭欲死;寝食不甘,日就羸瘁。公大忧,急为胶续以解之,而公子不乐。惟求良工画小翠像,日夜浇祷其下,几二年。
  偶以故自他里归,明月已皎,村外有公家亭园,骑马墙外过,闻笑语声,停辔,使厩卒捉鞚,登鞍一望,则二女郎游戏其中。云月昏蒙,不甚可辨,但闻一翠衣者曰:“婢子当逐出门!”一红衣者曰:“汝在吾家园亭,反逐阿谁?”翠衣人曰:“婢子不羞!不能作妇,被人驱遣,犹冒认物产也?”红衣者曰:“索胜老大婢无主顾者!”听其音酷类小翠,疾呼之。翠衣人去曰:“姑不与若争,汝汉子来矣。”既而红衣人来,果小翠。喜极。女令登垣承接而下之,曰:“二年不见,骨瘦一把矣!”公子握手泣下,具道相思。女言:“妾亦知之,但无颜复见家人。今与大姊游戏,又相邂逅,足知前因不可逃也。”请与同归,不可;请止园中,许之。公子遣仆奔白夫人。夫人惊起,驾肩舆而往,启钥入亭。女即趋下迎拜;夫人捉臂流涕,力白前过,几不自容,曰:“若不少记榛梗,请偕归慰我迟暮。”女峻辞不可。夫人虑野亭荒寂,谋以多人服役。女曰:“我诸人悉不愿见,惟前两婢朝夕相从,不能无眷注耳;外惟一老仆应门,余都无所复须。”夫人悉如其言。托公子养疴园中,日供食用而已。
  女每劝公子别婚,公子不从。后年余,女眉目音声渐与曩异,出像质之,迥若两人。大怪之。女曰:“视妾今日何如畴昔美?”公子曰:“今日美则美矣,然较畴昔则似不如。”女曰:“意妾老矣!”公子曰:“二十余岁何得速老!”女笑而焚图,救之已烬。一日谓公子曰:“昔在家时,阿翁谓妾抵死不作茧,今亲老君孤,妾实不能产,恐误君宗嗣。请娶妇于家,旦晚侍奉公姑,君往来于两间,亦无所不便。”公子然之,纳币于锺太史之家。吉期将近,女为新人制衣履,赍送母所。及新人入门,则言貌举止,与小翠无毫发之异。大奇之。往至园亭,则女亦不知所在。问婢,婢出红巾曰:“娘子暂归宁,留此贻公子。”展巾,则结玉玦一枚,心知其不返,遂携婢俱归。虽顷刻不忘小翠,幸而对新人如觌旧好焉。始悟锺氏之姻,女预知之,故先化其貌,以慰他日之思云。
  异史氏曰:“一狐也,以无心之德,而犹思所报;而身受再造之福者,顾失声于破甑,何其鄙哉!月缺重圆,从容而去,始知仙人之情亦更深于流俗也!”

最近阅读

英语六级考试结束.凑合.

最近的一般性阅读包括
西方宪政史-美国分册 .中文领域非常优秀的美国宪政历史学术著作.引用案例丰富.对美国宪政史上主要的最高法院的重要判决案例,如 英王地产充公案,(1803)马伯里诉麦迪逊案,(1887?)普莱西案,1967布朗诉教育局案,1973-吉迪恩诉温赖特案,1987纽约州诉合众国案….有详细的叙述,并且给出了最高法院法官代表性的意见词完整中文译本.该书对美国宪法制定的初衷,原则以及其中若干重要条款,如”洲际贸易条款”和隐含的”潜伏贸易条款”(这在20世纪新政之前对于联邦/洲的分权具有极为重要作用),-事实上,美国宪法的诞生就是为了解决当时洲际贸易中的冲突,”联邦至上条款”-马歇尔法官最早肯定了这一宪法第六章的重要地位.在20世纪联邦主义盛行以后,其重要性受到更多人,包括传统上属于保守分支的最高法院的认同,以及若干重要宪法修正案-如宪法前十修正案(权利法案)和美国-邦联战争后通过的三条修正案-其中最重要的是第十四修正案,该修正案在确定所有出生于美国的人的公民权的同时,禁止各洲未经正当合适法律程序而剥夺任何人的生命,自由或财产,-在20世纪以后,最高法院通过在判决中把该修正案同前十修正案逐条”结合”,从而历史性的将权利法案中对联邦对个人人权的侵犯行为的禁止扩展到州权范围,在我看来,这堪称美国宪法史上最重要的事件,-有详细的分析和论述.

列那狐传奇. ([法]吉罗夫人整理版本)法国中世纪著名民间文学,12世纪欧洲广为流传,.
基督教与西方思想史(卷二) .美国两位学者写的.本卷论述19世纪西方思想与基督教传统关联.并非出于神学目的的阅读,或致力于对19世纪西方思想史增进了解人,可以从中获得帮助.但毫无疑问,作者具有对上帝,信仰与爱的虔诚之情,而这,正式基督教传统对西方思想的影响.
葡萄牙的发现 (第三卷) .系列最后一卷..堂恩里克王子以后时期的葡萄牙航海事业.前两卷数月前阅读的.出于一些原因.现在才开始阅读最后一卷.

12月2日,日本语等级考试
出于此,在未来数月内,本人的阅读可能减少,Blog的更新也会减缓.