2010年12月29日星期三
gVim使用技巧:排版命令
2. 命令模式下,输入 le 表示该行左对齐,相似的,输入ri表示右对齐。居中对齐就是ce。这三个命令分别是left和right,center的头两个字母,比较利于记忆
3. gqq 命令,在本行进行段落重排。
4. gqQ命令,在全文段落重拍
2010年12月28日星期二
gVim使用技巧:基本操作
1. 如何打开文件:直接把文件拖到gVim的编辑区或者在命令模式下输入“tabnew 文件名”,按tab键可以自动补全,然后回车即可。也可以显示命令菜单,然后点击“打开”来打开一个文件。
2. 光标移动:在Normal模式下,hjkl分别代表左下上右。gg回到文件开头,G$回到文件末尾。w跳过一个词,并且停留在词开头;e跳过一个词,并且停留在词结尾。i在光标前插入,I在行首插入。a在光标后插入,A在行尾插入。^ 键回到行首,$ 键回到行尾(类似正则表达式的首尾)。输入数字+G或者数字+gg可以跳到指定的行。
3. 文本编辑:
1) 复制&粘贴: 采用y命令组合来实现复制。例如
yy 表示复制一行
y$ 表示复制从光标到行尾
y^ 表示复制从光标到行首
采用p命令来实现粘贴。在要粘贴的地方直接按p,即可实现粘贴功能。
2) 查找:采用/或者?来进行查找,支持正则表达式。/ 为从上到下查找,? 为从下到上查找。查找到的结果会自动高亮。如果要移动到下一个查找到的目标,则按n键。移动到上一个查找到的目标按N键。
3)替换:采用s命令来进行替换。在正常模式下,按:进入命令模式,输入“%s/old/new”,其中,%表示全文替换,将所有找到的old用new来替换。为了保险起见,可以输入“%s/old/new/c”,c参数表示confirm,替换之前会进行一次确认。如果不指定范围,默认替换发生在光标所在的行。
4)删除:在正常模式下使用x命令进行删除单个字符。可以指定数字或者和光标移动命令组合使用。比如5x表示删除从光标开始的5个字符。可以使用dd来快速删除一行记录。dw删除一个词。
4. 保存文件:在命令模式下输入w表示保存(write),可以组合命令,比如qw表示保存且退出。
2010年12月14日星期二
JRockit和Hotspot进行Heap Dump的参数
-XX:+HeapDumpOnOutOfMemoryError: Enables generation of Java heap dumps on out-of-memory errors
-XX:+HeapDumpOnCtrlBreak: Enables generation of Java heap dumps on pressing Ctrl-Break.
第一个参数是OOM时自动转储,第二个参数是在控制台按Ctrl+Break转储。
注意这个参数和使用jrcmd里面的print_threads,oom_diagnose之类的命令是不同的,后者产生的是标准的文本文件,供人阅读分析的。Heap Dump文件是二进制文件,可以使用MAT一类的离线分析工具来分析系统中可能存在的内存泄漏问题。
2010年12月7日星期二
Nginx反向代理配置
1. 下载安装Nginx
2. 修改Nginx的配置文件nginx.conf,加入以下配置:
location /rc {
proxy_pass http://destHost:80/rc;
proxy_redirect default;
}
当请求本机Nginx监听端口时,Nginx会将该请求代理至目标服务器,由此实现反向代理和负载均衡。
3. 如果客户端至服务器中有Hessian请求时,需要修改Hessian请求参数,否则会导致Nginx抛出411异常,如下:
com.caucho.hessian.client.HessianConnectionException: 411:java.io.IOException: Server returned HTTP response code: 411 for URL:http://xxxx/xxx/xxxService
解决该问题的方法是关闭Hessian向服务端请求时的分块数据传送(chunked post),可以通过设置Hessian的客户端代理类的方式进行,具体如下:
proxyFactory.setChunkedPost(false);
这样就能解决Hessian应用走Nginx反向代理的异常。详细的说明可参见这里
Apache反向代理配置
Apache的反向代理设置较为简单,按以下步骤进行即可:
1. 下载安装apache http server
2. 安装
3. 编辑apache_install_directory/conf/httpd.conf文件:
1)开启加载反向代理模块,即取消一下两行配置代码的注释:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
2)增加如下配置:
1 <IfModule mod_proxy.c> 2 ProxyRequests off 3 <Proxy *> 4 Order deny,allow 5 Allow from all 6 </Proxy> 7 ProxyPass /rc http://target_host:port/rc 8 ProxyPassReverse /rc http://target_host:port/rc 9 </IfModule> 10将Proxy开启,其中ProxyPass为反向代理主要配置,当请求本机监听的端口,且URL为rc时,Apache将会去目标服务器(destHost)请求,从而代理该请求。ProxyPassReverse配置为Apache 调整HTTP重定向回应中
Location,Content-Location和URI头里的URL。代理的配置详细参数可参见这里。
4. 如果请求量比较大,则考虑关闭apache的访问日志,否则该日志增长过快,且影响性能,在httpd.conf里面注释掉配置项:
#CustomLog "logs/access.log" common
6. 如果是Windows系统,则可能会因为防火墙和杀毒软件的关系,导致apache报以下的异常:
(OS 64)指定的网络名不再可用。 : winnt_accept: Asynchronous AcceptEx failed.
造成该问题的原因是因为Apache使用了Windows的一个封装方法,加入以下配置消除该异常:
Win32DisableAcceptEx
ThreadsPerChild 250
MaxRequestsPerChild 0
7. 如果出现 Server ran out of threads to serve requests. Consider raising the ThreadsPerChild setting 的提示,则考虑增加ThreadsPerChil (子进程的线程数)值。
2010年8月13日星期五
2010年8月10日星期二
解决连接Oracle时出现的异常
java.sql.SQLException: Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=169870336)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:334)
at oracle.jdbc.ttc7.TTC7Protocol.handleIOException(TTC7Protocol.java:3695)
at oracle.jdbc.ttc7.TTC7Protocol.logon(TTC7Protocol.java:352)
at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:362)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:536)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:328)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
...
原因一般为jdbc连接URL里面填写了错误的sid,查看sid方法如下:
select INSTANCE_NAME from v$instance;
然后填写正确的sid即可。
2010年8月1日星期日
[转]我的幸福生活从国家统计局的报告开始
原文链接见: http://www.haoyou.name/7446.html这可不是我瞎掰,是国家统计局告诉我的。人家说了,全国城镇居民半年的工资收入就达到了一万多块,我就是全国城镇居民之一,也就是说我半年的工资收入已经达到了一万多块。
另外,国家统计局还告诉我,我的“人均”住房面积已经达到了二十六平方米,照此算来,我们家已经拥有了一套一百多平方米的宽敞住宅了。此外,我还有一千多美元的人均GDP收入,而物价上涨幅度非常低,还不到5%。
您说这生活能不幸福吗?但是,经过一番仔细研究,我又惊奇地发现,除了这些之外,我还有不少“隐形收入”。比如:
我拥有0.11辆汽车。
我每年出国旅游0.02次。
我每天上酒店用餐0.13次。
我每年能到电影院看美国大片0.17场。
我拥有欧洲著名品牌时装0.28件。
我拥有纯血统赛马0.05匹。
我还拥有0.0001艘游艇。
我还拥有0.07个情妇。
我还拥有足有我巴掌那么大的一块高尔夫球场
…… …… …… …… …… ……
除此之外,还有很多,实在无法一一列举。拥有了这一切,我自然而然地就会过上幸福的生活,我每天的生活是这样的:
在一个阳光明媚的上午,我离开了我们家那座一百多平米的豪宅,穿着我那0.28件欧洲品牌时装,带上了我那0.07个情妇,坐上了我那0.11辆汽 车,风驰电掣地行驶在宽阔的马路上。我们来到了我所拥有的那块巴掌大小的高尔夫球场,在绿草如茵的球场上,我和那0.07个情妇尽情地撒欢、追逐。
我们玩得十分尽兴,临近中午,我看了一眼手腕上戴的那0.0003块“江诗丹顿”手表,决定去吃饭。我的情儿拿起了她那0.004个“路易威登”手提包,和我又上了那0.11辆汽车,来到了大酒店,我们一同在这里吃了0.13顿生猛海鲜。
吃完饭,我们又驱车来到了洗浴中心,在那里洗了0.09次桑拿。洗完澡之后,我们商量起了那0.02次出国旅游应该到哪个国家才好。我那0.07个 情妇想去巴黎,而我想去柬埔寨,我们吵了起来。我一怒之下,一脚踹碎了我那0.0003块“江诗丹顿”手表,我的情儿也在火头上一甩手扔掉了她那 0.004个“路易威登”手提包。于是,我们不欢而散,就此分道扬镳。
这时,我醒悟了:千好万好还是不如自己的老婆孩子好啊!于是,我开着那0.11辆汽车立刻回家。到了家里,我牵出了我那0.05匹纯血统赛马,我们一家三口兴高采烈地骑在高头大马上,直奔海滨而去。
到了海边,我们弃马登舟,坐上了我那0.0001艘豪华游艇,我们在大海上尽情驰骋,好不开心。直到夕阳西下,我们才依依不舍地上岸。
这,就是我一天的“人均”生活。大家说,我的生活是多么的幸福啊!
2010年7月27日星期二
一个奇怪的BUG
at org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor.convertHttpInvokerAccessException(HttpInvokerClientInterceptor.java:211)
at org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor.invoke(HttpInvokerClientInterceptor.java:144)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
......
看日志应该是有一个类未实现序列化接口导致的,浏览了代码,也没发现有什么异常的。然后就开始跟踪这个类:RandomAccessSubList, 终于发现ArrayList实例在调用subList方式是,返回的就是这个类,代码如下(AbstractList.java):
public List<E> subList(int fromIndex, int toIndex) {
return (this instanceof RandomAccess ?
new RandomAccessSubList<E>(this, fromIndex, toIndex) :
new SubList<E>(this, fromIndex, toIndex));
}
显然就是类RandomAccessSubList未实现序列化接口,由此得到一个写RMI服务需要注意的地方:返回对象不能包含通过调用subList方法得到的结果,否则会抛出该异常。为了避免这个缺陷,有两种方法:
1. 通过hessian等远程调用方式绕开RMI
2. 不直接调用subList,实现一个自己的类似方法即可。
2010年5月11日星期二
Spring事务配置的五种方式
总结如下:
Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪 种配置方式,一般变化的只是代理机制这部分。
DataSource、TransactionManager这两部分只是会根据数据访问方式有所变化,比如使用Hibernate进行数据访问 时,DataSource实际为SessionFactory,TransactionManager的实现为 HibernateTransactionManager。
具体如下图:
根据代理机制的不同,总结了五种Spring事务的配置方式,配置文件如下:
第一种方式:每个Bean都有一个代理
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml" />
<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
bean>
<bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory" />
bean>
<bean id="userDao"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager" />
<property name="target" ref="userDaoTarget" />
<property name="proxyInterfaces" value="com.bluesky.spring.dao.GeneratorDao" />
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIREDprop>
props>
property>
bean>
beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml" />
<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
bean>
<bean id="transactionBase"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
lazy-init="true" abstract="true">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIREDprop>
props>
property>
bean>
<bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory" />
bean>
<bean id="userDao" parent="transactionBase" >
<property name="target" ref="userDaoTarget" />
bean>
beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml" />
<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
bean>
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIREDprop>
props>
property>
bean>
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>*Daovalue>
list>
property>
<property name="interceptorNames">
<list>
<value>transactionInterceptorvalue>
list>
property>
bean>
<bean id="userDao" class="com.bluesky.spring.dao.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory" />
bean>
beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<context:annotation-config />
<context:component-scan base-package="com.bluesky" />
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml" />
<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" />
tx:attributes>
tx:advice>
<aop:config>
<aop:pointcut id="interceptorPointCuts"
expression="execution(* com.bluesky.spring.dao.*.*(..))" />
<aop:advisor advice-ref="txAdvice"
pointcut-ref="interceptorPointCuts" />
aop:config>
beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<context:annotation-config />
<context:component-scan base-package="com.bluesky" />
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml" />
<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
bean>
beans>
import java.util.List;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Component;
import com.bluesky.spring.domain.User;
@Transactional
@Component("userDao")
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
public List<User> listUsers() {
return this.getSession().createQuery("from User").list();
}

}
2010年4月21日星期三
2010年4月18日星期日
2010年4月1日星期四
海鸥之歌
灰蓝色的海洋上暮色苍黄,
一艘船驶行着穿越波浪,
满载着带有镣链的囚犯,
去向某个不可知道的地方。
囚徒们沉默着凝望天末,
深陷的眼睛里闪着火光,
破碎的衣衫上沾遍血迹,
枯瘠的胸膛上布满鞭伤。
船啊!你将停泊在哪个海港?
你要把我们往哪儿流放?
反正有一点总是同样,
哪儿也不会多些希望!
我们犯下了什么罪过?
杀人?放火?黑夜里强抢?
什么都不是——只有一桩,
我们把自由释成空气和食粮。
暴君用刀剑和棍棒审判我们,
因为他怕自由象怕火一样;
他害怕一旦我们找到了自由,
他的宝座就会摇晃,他就要遭殃!
昂起头来啊!兄弟们用不着懊丧,
囚禁、迫害、侮辱……那又有何妨?
我们是殉道者,光荣的囚犯,
这镣链是我们骄傲的勋章。
* * * * *
一个苍白的青年倚着桅樯,
仿佛已支不住镣链的重量,
他动也不动像一尊塑像,
只有眼晴星星般在发亮。
梦想什么呢?年轻的伙伴!
是想着千百里外的家乡?
是想着白发飘萧的老母?
是想着温柔情重的姑娘?
别再想了吧!别再去多想,
一切都已被剥夺得精光。
我们没有未来,我们没有幻想,
甚至不知道明天见不见太阳。
荒凉的海岛,阴暗的牢房,
一小时比一年更加漫长,
活着,锁链伴了呼吸的节奏起落,
死去,也还要带着镣链一起埋葬。
* * * * *
我想家乡么,也许是,
自小我在它怀中成长,
它甘芳的奶水将我哺养,
每当我闭上了双目遥想,
鼻端就泛起了乡土的芳香。
我想妈妈么,也许是,
妈妈头发上十年风霜,
忧患的皱纹刻满在面庞,
不孝的孩儿此去无返日,
老人家怕已痛断了肝肠!
我想爱人么,也许是,
我想她,我心中的仙女,
我们共有过多少美满的时光,
怎奈那无情棒生隔成两下,
要想见除非是梦魂归乡。
我到底在想什么,我这颗叛逆的
不平静的心,它是如此刚强,
尽管它已经流血滴滴,遍是创伤,
它依然叫着“自由”,用它全部的力量。
自由!我的心叫道:自由!
充满它的是对于自由的想望……
象濒于窒息的人呼求空气,
象即将渴死的人奔赴水浆。
象枯死的绿草渴望雨滴,
象萎黄的树木近向太阳,
象幼儿的乳母唤叫孩子,
象离母的婴孩索要亲娘。
我宁愿被放逐到穷山僻野,
宁愿在天幔下四处流浪,
宁愿去住在狐狸的洞里,
把清风当被,黄土当床。
宁愿去捡掘松子和野菜,
跟飞鸟们吃一样的食粮,
我宁愿牺牲一切甚至生命,
只要自由这瑰宝在我的身旁,
我宁愿让满腔沸腾的鲜血,
洒上那冰冷的枯瘠的土地,
宁愿把前途、爱情、幸福,
一起抛向这无限的波浪。
只要我的血象沥青一样,
铺平自由来到人间的道路,
我不惜把一切能够献出的东西,
完完全全地献作她自由的牲羊。
多少世纪,多少年代啊,自由!
人们追寻你像黑夜里追求太阳。
父亲在屠刀的闪光里微笑倒下,
儿子又默默地继承父亲的希望。
钢刀已经被牺牲者的筋骨磕钝,
铁锈也已经被囚徒们的皮肉磨光。
多难的土地啊,浸润着血泪,
山般高的白骨砌堆成狱墙,
埋葬的坟墓里多少死尸张着两眼,
为的是没能看见你,自由的曙光。
你究竟在哪里?自由!你需要多少代价?
为什么你竟象影子那么虚妄?
永远是恐怖的镣铐的暗影,
永远是张着虎口而狞笑的牢房,
永远是人对他们同类的迫害,
永远是专制——屠杀——暴政的灾殃。
不,你存在,自由啊!我相信你存在!
因为总是有了实体才造成影象,
怎么能够相信千百年来
最受到尊敬的高贵的名字,
只不过是一道虚幻的虹光。
那一天啊自由,你来到人间,
带着自信的微笑高举起臂膀,
于是地面上所有的锁链一齐断裂,
囚犯们从狱底里站起来欢呼解放!
哪一天啊,千百万为你牺牲的死者,
都会在地底下尽情纵声欢唱。
这声音将震撼山岳和河流,
深深地撼动大地的胸膛。
而那些带着最后的创伤的尸体,
他们睁开的双眼也会慢慢闭上。
那一天,我要狂欢,让嗓子喊得嘶哑,
不管我是埋在地下还是站在地上,
不管我是活人还是在死者的行列里,
我的歌永远为你——自由而唱。
* * * * *
远远地出现了一个黑点,
年青人睁大眼对它凝望,
听见谁轻声说:是一个岛,
他的心便猛然撞击胸膛。
海岛啊!你是个什么地方?
也许你不过是海鸥的栈房,
也许你荒僻没有人迹,
也许你常淹没在海的波浪。
但是这一切又算得什么?!
只要你没有禁锢自由的狱墙,
只要你没有束缚心灵的枷锁,
对于我来说你就是天堂。
勇敢的黑眼睛燃烧着光芒,
他走前一步,镣铐叮当作响,
暗暗地目测着水上的距离,
对自由的渴望给了他力量。
我能够游过去么?能还是不?
也许押送者的枪弹会把我追上,
也许沉重的镣铐会把我拖下水底,
也许大海的波浪会叫我身丧海浪,
我能游到那里么?能还是不?
我要试一试——不管会怎么样!
宁可做逃犯葬身在海底,
也强似在囚禁中憔悴地死亡。
不管付出什么代价,在我死去之前,
也得要吸一口自由的空气,
即使我有三十次生命的权利,
我也只会全都献到神圣的自由祭坛上。
别了,乡土和母亲!别了,爱我的你!
我的祝福将长和你们依傍。
别了,失败的战友!别了,不屈的伙伴!
你们是多么英勇又多么善良,
可惜我只能用眼睛和心拥抱你们,
愿你们活得高傲死得坚强!
别了,谁知道也许这就是永别,
但是我没法——为了追踪我们的理想。
啊!自由,宇宙间最最贵重的名字,
只要找到你,我们的一切牺牲,
便都获得了光荣的补偿…….
* * * * *
他握紧双拳一声响亮,
迸断的镣铐落在甲板上,
他象飞燕般纵到栏边,
深深吸口气投进了海洋。
枪弹追赶着他的行程,
波浪也卷着他死死不放,
那个黑点却还是那么遥远,
他只是奋力地泅向前方。
海风啊!为什么兴啸狂号?
海浪啊!为什么这样激荡?
臂膊象灌了铅那么沉重,
年青的逃犯用尽了力量。
最后一次努力浮上水面,
把自由的空气吸满了肺脏,
马上,一个大浪吞没了他,
从此他再没能游出水上。
押送者停止了活靶射击,
追捕的小艇也收起双桨。
难友们化石般凝视水面,
无声地哀悼壮烈的死亡。
……年青的伙伴,我们的兄弟,
难道你已经真葬身海洋?
难道我们再听不见你激情爽朗的声音?
再看不见你坚定果决的面庞?
难道我们再不能和你在一起战斗,
为争取自由的理想献出力量?
海浪啊,那么高那么凉,
我们的心却象火炭一样!
听啊!我们年青的兄弟,
悲壮的挽歌发自我们的心房:
记得你,无畏的英烈的形象,
记得你,为自由献身的榜样,
记得你啊,我们最最勇敢的战士,
在一场力量悬殊的战斗中,
你从容自若地迎接了死亡。
海浪啊,请抚慰我们年青的兄弟,
海风啊,把我们的挽歌散到四方,
象春风带着万千颗种子,
散向万千颗爱自由的心房…….
* * * * *
那是什么——囚人们且莫悲伤,
看啊!就在年轻人沉默的地方,
一只雪白的海鸥飞出了波浪,
展开宽阔的翅膀冲风翱翔。
就是他,我们不屈的斗士,
他冲进死亡去战胜了死亡,
残留的锁链已沉埋在海底,
如今啊,他自由得象风一样。
啊!海鸥!啊!英勇的叛徒,
他将在死者中蒙受荣光,
他的灵魂已经化为自由——
万里晴空下到处是家乡!
2010年3月28日星期日
我的读书笔记-把时间当做朋友
大脑太活跃 太易受外界干扰:对策,自己控制自己的大脑,而不是它控制你!
做事情不够执着,成功的人方法没有共同点,但是都很执着,都很专注。
做事情要有长远的眼光,推迟满足自己。
2010年3月26日星期五
能搜到ChinaNet信号的可以免费无线上网
| 刚搬了家,发现电脑的无线网络列表里面有个叫ChinaNet的无线网络,没有加密,但是连接上后打开浏览器却自动跳转到了电信的登录页面,要求输入帐号密码认证后才能上网。 于是随便ping了个域名,发现可以解析成IP,但是无法ping通。这说明DNS通信是正常的,这说明还有一条秘密通道为我们开放着!我赶紧设置了下LoopcVPN的端口,一测果真能连上VPN服务器上网。 为什么通过LoopcVPN软件就可以通过ChinaNet无线局域网免费上网呢?原来ChinaNet无线局域网使用的是DHCP+Web技术进行用户身份认证,该认证方式工作在应用层,为了实现在浏览器地址栏输入任意网址跳转到认证入口的功能,必须开放DNS端口(UDP 53)及Web端口(TCP 80)。可能是由于管理员的疏忽,某些认证系统并没有限制客户端访问DNS的IP地址,因此未经过认证的客户端是可以正常访问服务器的UDP 53端口的,而LoopcVPN软件恰好使用的是UDP 53端口,使得客户端能通过它实现代理上网。 基于上面的道理,不仅仅是ChinaNet,包括CMCC无线局域网在某些地方也有这个配置上的漏洞,同样可以使用LoopcVPN来代理上网,当然一些不知名的小宽带公司有此漏洞也很正常。 |
2010年1月8日星期五
django框架学习笔记之四:URL映射和模板
django另一优秀的地方就是其url映射,相当的简洁和强大,用起来有一种很舒服的感觉。
下面的注册和登录考虑采用extjs+python的方式来展现,这样的话可能用到django模板语言的地方就会少很多了。
通过修改工程的urls.py脚本来实现url映射的处理。


