烦恼岁月

付出总是有回报的 take action follow your heart , or follow your head
posts - 40, comments - 5, trackbacks - 0, articles - 4

2007年11月16日

自动地可视化表示数据库也可以让您受益匪浅。实体关系图(ERD)是实现数据库可视化的最流行的图示类型。大多数创建 ERD 的工具(例如,ERWinfor)都需要手动生成 ERD。虽然我将要示范的工具 SchemaSpy 无法与现存的一些更复杂的工具媲美,但是它能够提供数据库的高级 ERD 视图 — 以及约束、关系等。而且,通过自动构建来运行它,您就可以轻松地从您的版本控制库中检查数据定义语言(Data Definition Language,DDL)的最新显示。

Ant 脚本使用 SchemaSpy 工具来创建 Javadoc 格式的文件:

结合使用 SchemaSpy、Ant 和 Javadoc

<property name="reports.dir" value="${basedir}"/>
<java jar="schemaSpy_3.1.1.jar"
  output="${reports.dir}/output.log"
  error="${reports.dir}/error.log"
  fork="true">
  <arg line="-t mysql"/>
  <arg line="-host localhost"/>
  <arg line="-port 3306"/>
  <arg line="-db brewery"/>
  <arg line="-u root"/>
  <arg line="-p sa"/>
  <arg line="-cp mysql-connector-java-5.0.5-bin.jar"/>
  <arg line="-o ${reports.dir}"/>
</java>

 

使用 java Ant 任务调用 SchemaSpy,传递了很多属性:

  • -t 为数据库类型(有效值为 mysqloradb2,等等。)
  • -host 为托管数据库的计算机名。
  • -port 为数据库 URL 的端口数。
  • -u 为数据库用户名。
  • -p 为数据库密码。
  • -cp 为类路径(用于指示数据库驱动程序 JAR 文件的位置)。
  • -o 为输出目录的位置。

这些 SchemaSpy 的命令行属性用于生成显示 ERD 的 HTML 文件

通过结合使用多种工具、作为构建的一部分针对数据库执行 ERD 生成脚本,并调度 ERD 生成,您就可以在开发过程中轻松、快速地做出很多数据库决策。

另外,对于喜欢maven的同学,SchemaSpy  也提供了plugin

http://maven.wakaleo.com/mojo/maven-schemaspy-plugin/faq.html

posted @ 2010-05-16 16:16 不需要解释 阅读(522) | 评论 (0)编辑 收藏

     参加工作也已经5年多了,一直想回头回想一下自己,然后动笔写下来,一来是自己目前还可以记忆起一些事情,等自己将来老了,可以看看这些东西回忆回忆。二来也是想做一个总结。本来这个题目也可以叫做我的bmi5年,不过大家知道bmi的实在是少,而且现在这个公司已经名义上不存在了。

     我是在2001年去沈阳读书的,一直也是很喜欢沈阳的气候和东北人的豪爽,东北爷们是真正可以拿心和你交朋友的,不过我实在不喜欢东北的饮食,觉得不细腻,另外南方还有我的女人在等我回去,要女人来东北,难度不是一般的大,所以在找工作的时候,我就下定决心一定要找南方的公司,最好广州,深圳的,或者老家南昌的也是可以的。但是南方公司去东北招生的实在是少,除了华为,中兴之外真的是少的可怜,尽管我们学校在沈阳也是数一数二的学校。

     在04年在10月份,我面试的第一家公司是东软,没有办法,谁让我们学校是东软的最大股东尼(不知道现在是不是),面试的过程也还不错,考试题也做的很顺,东软还提出我们下学期直接找一些外教来教我们日文,不过当时东软给出的薪水实在是低的可怜,只有1800元,而且还要自己负责住宿,自己当时也老大不小了,还有女人在读书,是不是也是需要买些礼物的,而且沈阳和大连都不是我想去的地方,结果就直接没有去报道。

     接下来的日子也就整天在校内的招聘网站(白山黑水)上看帖子,看到了上海bmi的招聘广告,一看是上海的公司,而且做的是辽宁网通的项目,感觉项目很大,可以学到不少东西,关键是上海的公司,项目做完了就可以去上海发展呢,而且当时女朋友也还在读研究生,仔细的想想觉得这个公司还是比较适合自己,于是也开始做准备,接下来的事情都很顺利,笔试,面试,当时有资格参加面试的,整个我们学校也就2个人,一个本科生,一个研究生,不过最后那个研究生也没有过去。

     在辽宁项目的前期这段时间,估计也会我成长最快,也是最艰苦的时间,我后续的会详细介绍到。我第一天上班就是去做release,也就是做发布和部署,在当时的项目中,我们并没有像一些公司还有项目配置员这个角色,就是直接拉一个开发人员来负责做release,这个角色当时是在项目中最辛苦的一个,经常是下午6点开始,然后编译3-4个小时,到10点才可以编译完成(比较顺利的情况下),如果遇到编译不过去的时候,还需要联系开发人员进行修改,编译之后在对照check list进行增量部署。

    在第一天上班,我就从上午10点过去,第2天凌晨3点半才下班,到4点才到学校宿舍睡觉,后续的1个月都是如此,现在回想起来,感觉当时真的是很辛苦,不过那段时间也开始熟习了不少东西,知道了基于模块开发,对ant,weblogic,oracle,plsql,linux,aix等的使用也开始非常熟习了。在这段时间里也开始熟习了公司的项目情况,开发人员,测试人员。

posted @ 2010-05-04 00:06 不需要解释 阅读(292) | 评论 (0)编辑 收藏

    最近在看一些项目的代码,总是发现很少项目提供出uml图,或者就是提供uml图的也有可能并没有和代码对应上,如果有正确的uml图,可以非常方便的为大家更好的理解代码层次逻辑。其实我们可以使用使用UMLGraph来生成uml图,直接使用java代码来生成UMLGraph。对于大部分项目来说,我们一般使用maven和ant(还在使用ant,你out了)来作为项目的编译工具。

    在maven中,我们可以在pom.xml增加:

    <reporting>
        <plugins>
        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>2.6.1</version>
        <configuration>
          <doclet>org.umlgraph.doclet.UmlGraphDoc</doclet>
          <!-- <docletPath>/path/to/UmlGraph.jar</docletPath> -->
          <docletArtifact>
            <groupId>org.umlgraph</groupId>
            <artifactId>doclet</artifactId>
            <version>5.1</version>
          </docletArtifact>
          <additionalparam>-views</additionalparam>
          <useStandardDocletOptions>true</useStandardDocletOptions>
        </configuration>
        </plugin>
        </plugins>
    </reporting>

使用javadoc:aggregate 就可以生成出整个项目按照package的uml图了。

如果是使用ant,在build.xml中增加target

   <target name="genuml">
        <property name="uml.dir" value="${basedir}/uml"/>
        <property name="src.uml.dir" value="${src.dir}/uml"/>
        <mkdir dir="${uml.dir}"/>
        <path id="uml.source.path">
           <pathelement path="${src.uml.dir}/"/>
           <pathelement path="${src.java.dir}"/>
        </path>
        <javadoc sourcepathref="uml.source.path" packagenames="*" package="true">
           <doclet name="org.umlgraph.doclet.UmlGraph" path="${basedir}/lib/UmlGraph.jar">
               <param name="-d" value="${uml.dir}"/>
           </doclet>
        </javadoc>
        <apply executable="dot" dest="${uml.dir}" parallel="false">
            <arg value="-Tpng"/>
            <arg value="-o"/>
            <targetfile/>
            <srcfile/>
            <fileset dir="${uml.dir}" includes="*.dot"/>
            <mapper type="glob" from="*.dot" to="*.png"/>
        </apply>
    </target>

注意:要正常使用 UMLGraph,您必须先安装 Graphviz 工具,请自己google相关信息。

posted @ 2010-04-19 23:59 不需要解释 阅读(1871) | 评论 (0)编辑 收藏

       尽管工作了5年多了,现在能想起来的培训真的是少之又少,但是我想以后,我一定不会这样说了,因为我参加了百支了!

       百支对于我来说是一次清洗,洗掉以前的恶习,洗掉以前的老思维,重新培养我丢掉已久的价值观,重新找回往日的激情。来阿里之后,也一直在想一个问题,阿里和我以前公司有什么不同?或者说有什么特别的之处?其实这个问题有很简单,就是阿里是一家有梦想的公司,一家有价值观的公司,一家有亲情,友情的公司,一家工作生活一体的公司,从中国来看,阿里是唯一一家大的公司,而且价值体系贯彻的这么好的公司,only one in china。

      百支培训了很多业务知识,传统线,虚拟线,兄弟线,安全线,资金线,…学到了很多东西。

      百支的培训,让我开始结识了新的同学,新的家人,新的伙伴,让我们happly every day! 认真工作,快乐生活!

posted @ 2010-04-16 21:48 不需要解释 阅读(406) | 评论 (0)编辑 收藏

   随着网络技术的发展,很多恶意程序往往按照常规方法无法彻底删除。有没有什么方法能够在不安装任何第三方工具的情况下,删除它们呢?笔者经过多年实践,告诉大家一个秘密武器--关闭Explorer进程法。

  在服务器系统出现问题时,例如某个文件无法删除,某个程序假死或者是系统没有响应都可以按CTRL+SHIFT+ESC,调出Windows任务管理器。接下来找到“进程”标签,将“explorer.exe”进程关闭。接下来整个桌面就会消失,只剩下桌布了。然后通过Windows任务管理器的“文件”菜单下的“新建任务(运行)”打开“创建新任务”窗口,通过“浏览”按钮找到要删除文件所在目录,在浏览窗口里直接删除即可。99%都可以将这个顽固的文件删除,删除后继续选择“文件”菜单下的“新建任务(运行)”打开“创建新任务”窗口,在打开处输入命令--explorer后回车,我们将返回到正常的桌面界面下。显然,对付顽固文件,这个方法尤为简单。

posted @ 2009-11-10 16:19 不需要解释 阅读(221) | 评论 (0)编辑 收藏

    1、专注于构建一个强有力的团队,这一团队能够解决困难的问题,并为客户创造真正的价值。
  2、领导者鼓舞;管理者授权。要同时成为优秀的领导者和管理者,你需要就愿景进行沟通并理解其细节。
  3、对可能出现的障碍有所准备,防微杜渐,在这些障碍尚未壮大时就清除它们。
  4、花时间来仔细倾听别人的意见,但不要过于担心其他人的想法。
  5、专注于事实。
  6、充当一个衰减器,而不是放大器,为团队提供稳定性。
  7、永远不要将不能解释的事情归咎为蓄意破坏。
  8、培养幽默意识来作为严肃认真的一种平衡:对工作一丝不苟,对自己轻松自如。
  9、除了工作,还应该懂得享受生活,而且每年要读25本书。
  10、相信你的直觉:如果你感觉不妙,那么很可能预感就会成真。

posted @ 2009-11-08 03:10 不需要解释 阅读(219) | 评论 (0)编辑 收藏

Productize software

When talking about the productized software, people often think of Microsoft Office and Microsoft XP. Of course the Microsoft product series is very successful. They can provide excellent GUI, and good user experience.

In China, there is a different picture for software products. Let me take Chinese software development companies for example. Most of the companies in China work on some projects, instead of specific products, When a company starts a new project, they need to invest lots of developers and money into the project. Sometimes, they also need to send a number of technicians to the customer site to do the development. In my opinion, there are two reasons.

(1) The software is not very satisfactory enough to be a perfect product.

(2) Chinese customers have lots of special requirements.

Customer is GOD. We can not change the ideas of customer most of time. So, we need to improve our product. Then how to evaluate a software product's success? Because of various concerns, different users hold different opinions and will arrive at different conclusions.

As for redevelopment and customization, the following should be more concerned:

(1) Software scaffolding

If the product provides scaffolding, the redevelopment people will quickly generate code (from database, UML, etc….). As we know, the Spring, Hibernate also provide some scaffolding.

(2) Easy installation package

Most of time, the installation gives the first impression to the customer. So it is very important.

A simple installation must ensure everyone, even someone not very familiar with the application, can install the software.

The installation log file also plays significant role. Sometimes, it’s possible for the customer’s environment to have some problem so that the installation runs unsuccessfully. In this situation, the customer can send the log file to the technicians for analysis.

People who do not know about your product also can install easily according to wizard.

(3) Lots of Examples

The examples are the best teacher. Why most of java developer favor apache ant? The reason is that apache ant can provide lots of examples; you can find any task example in apache ant web site.

Example not only provides assistance to the development but also the product redevelopment If your product provides lost of examples, the questions from customers will be reduced substantially.

(4) Online documentation

If the developer can find some on-line document, he will not worry about that the document in his hands is an old version. And of course, the product developer also can work more effectively. For example, if the document has some error, or need to be modified, he can fix it quickly.

(5) Very good support

If the customer has some problem when he use or customize, he can get easily the support.

As for end-users, the following is very important.

(1) Friendly GUI, operator easily

(2) Collection client information online active, when some error happen.

(3) Auto-update to new version.

For customer, he does not need install some patch.

(4) In a conspicuous place clearly marked version of the software, and contact method

As for a kernel developer, he might think we need to provide:

(1) OSGI framework or plug-in framework to facilitate the expansion

(2) Standard software delivery process

(3) Software quality control

(4) A very good suite of documents.

posted @ 2009-11-02 11:26 不需要解释 阅读(299) | 评论 (0)编辑 收藏

Repositories are remote collections of projects from which Maven uses to populate the local repository of the build system. It is from this local repository that Maven calls it plugins and dependencies. Different remote repositories may contain different projects, and under the active profile they may be searched for a matching release or snapshot artifact.

Example A.8. Repository Configuration in settings.xml

<settings xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
  ...
  <profiles>
    <profile>
      ...
      <repositories>
        <repository>
          <id>codehausSnapshots</id>
          <name>Codehaus Snapshots</name>
          <releases>
            <enabled>false</enabled>
            <updatePolicy>always</updatePolicy>
            <checksumPolicy>warn</checksumPolicy>
          </releases>
          <snapshots>
            <enabled>true</enabled>
            <updatePolicy>never</updatePolicy>
            <checksumPolicy>fail</checksumPolicy>
          </snapshots>
          <url>http://snapshots.maven.codehaus.org/maven2</url>
          <layout>default</layout>
        </repository>
      </repositories>
      <pluginRepositories>
        ...
      </pluginRepositories>
      ...
    </profile>
  </profiles>
  ...
</settings>
releases, snapshots

These are the policies for each type of artifact, Release or snapshot. With these two sets, a POM has the power to alter the policies for each type independent of the other within a single repository. For example, one may decide to enable only snapshot downloads, possibly for development purposes.

enabled

true or false for whether this repository is enabled for the respective type (releases or snapshots).

updatePolicy

This element specifies how often updates should attempt to occur. Maven will compare the local POMs timestamp to the remote. The choices are: always, daily (default), interval:X (where X is an integer in minutes) or never.

checksumPolicy

When Maven deploys files to the repository, it also deploys corresponding checksum files. Your options are to ignore, fail, or warn on missing or incorrect checksums.

layout

In the above description of repositories, it was mentioned that they all follow a common layout. This is mostly correct. Maven 2 has a default layout for its repositories; however, Maven 1.x had a different layout. Use this element to specify which if it is default or legacy. If you are upgrading from Maven 1 to Maven 2, and you want to use the same repository which was used in your Maven 1 build, list the layout as legacy

posted @ 2009-11-02 11:25 不需要解释 阅读(1993) | 评论 (0)编辑 收藏

there are lots tools about the java obfuscate. I know two.

(1)proguard

(2)yguard

the proguard support ant, maven. I use maven as the project and build tools. so I want use the maven proguard plugin, but It is not easy to use. so I use yguard.

in your pom.xml, you can  add:

    <plugin>
            <groupId>net.sf.mgp</groupId>
            <artifactId>maven-unclasses-plugin</artifactId>
            <version>0.0.2</version>
        </plugin>
        <plugin>
  <artifactId>maven-antrun-plugin</artifactId>
  <dependencies>
    <dependency>
      <groupId>yguard</groupId>
      <artifactId>yguard</artifactId>
      <version>2.3.0</version>
      <scope>system</scope>
      <systemPath>lib/yguard.jar</systemPath>
    </dependency>
  </dependencies>
  <executions>
    <execution>
      <phase>package</phase>
      <configuration>
        <tasks>
          <property refid="maven.compile.classpath"
            name="mvn.classpath"></property>
          <!-- <echo message="Using Maven Classpath: ${mvn.classpath}" /> -->
          <taskdef name="yguard"
            classname="com.yworks.yguard.YGuardTask"/>
          <yguard>
            <!-- Input file and output file is the same. -->
            <inoutpair
              in="${project.build.directory}/${project.build.finalName}.${project.packaging}"
              out="${project.build.directory}/${project.build.finalName}.jar"/>
            <!-- Obfuscate classes plus string references. -->
            <rename
              logfile="${project.build.directory}/yguard.log.xml"
              replaceClassNameStrings="true">
              <!-- Keep the only class to be used for easy running and its public method main(). -->
              <keep>
                  <class classes="public" methods="public">
                  <patternset>
                    <include name=”xx.xxx.xxx.util.ConnectionUtil"/>
                  </patternset>
                </class>
              </keep>
            </rename>
            <!-- There are some external libraries used - Maven knows details. -->
            <externalclasses>
              <pathelement path="${mvn.classpath}"/>
            </externalclasses>
          </yguard>
        </tasks>
      </configuration>
      <goals>
        <goal>run</goal>
      </goals>
    </execution>
  </executions>
</plugin>


It is very cool!!!.

posted @ 2009-10-19 00:50 不需要解释 阅读(764) | 评论 (0)编辑 收藏

有个大师说过一句话,有人的地方就有江湖,有江湖的地方就有斗争。今天在java eys就看到了一场Resourcebundle引起的口角,集体见:

http://www.javaeye.com/topic/6417?page=1.

这个问题在jdk1.6已经不存在

clearCache
public static final void clearCache()
Removes all resource bundles from the cache that have been loaded using the caller's class loader.
Since:
1.6
See Also:
ResourceBundle.Control.getTimeToLive(String,Locale)

clearCache
public static final void clearCache(ClassLoader loader)
Removes all resource bundles from the cache that have been loaded using the given class loader.
Parameters:
loader - the class loader
Throws:
NullPointerException - if loader is null
Since:
1.6
See Also:
ResourceBundle.Control.getTimeToLive(String,Locale)

 

在1.5,1.4怎么办呢:

   Class klass = ResourceBundle.getBundle("your.Bundle").getClass().getSuperclass();
   Field field = klass.getDeclaredField("cacheList");
   field.setAccessible(true);
   sun.misc.SoftCache cache = (sun.misc.SoftCache)field.get(null);
   cache.clear();
   field.setAccessible(false);

这样就可以清楚cache.

posted @ 2009-10-17 17:23 不需要解释 阅读(333) | 评论 (0)编辑 收藏

Build in properties
  • ${basedir} represents the directory containing pom.xml
  • ${version} equivalent to ${project.version} or ${pom.version}
Pom/Project properties

All elements in the pom.xml, can be referenced with the project. prefix or using pom. as prefix. This list is just an example of some commonly used elements.

  • ${project.build.directory} results in the path to your "target" dir, this is the same as ${pom.project.build.directory}
  • ${project.build.outputDirectory} results in the path to your "target/classes" dir
  • ${project.name} or ${pom.name} refers to the name of the project.
  • ${project.version} or ${pom.version} refers to the version of the project.
  • ${project.build.finalName} refers to the final name of the file created when the built project is packaged
Local user settings

Similarly, values in the user's settings.xml can be referenced using property names with settings. prefix.

  • ${settings.localRepository} refers to the path of the user's local repository.
  • ${maven.repo.local} also works for backward compatibility with maven1 ??
Environment variables

Environment variables can be referenced using the env prefix

  • ${env.M2_HOME} returns the Maven2 installation path.
  • ${java.home} specifies the path to the current JRE_HOME environment use with relative paths to get for example:
    <jvm>${java.home}../bin/java.exe</jvm>
    Java system properties

All Java System Properties defined by the JVM.

Custom properties in the POM

User defined properties in the pom.xml.

<project>
...
  <properties>
     <my.filter.value>hello</my.filter.value>
  </properties>
...
</project>
  • ${my.filter.value} will result in hello if you inserted the above XML fragment in your pom.xml
Parent Project variables

How can parent project variables be accessed?

You can use the prefix: ${parent.project}.

For example, use ${parent.project.version} to retrieve parent version.

A good way to determine possible variables is to have a look directly at the API. The above example was not working for me, maybe it was working that way with older releases of maven. I'm currently using Maven 2.2.1, and to access the Parent you can use ${project.parent}. This will return an org.apache.maven.project.MavenProject instance.

Reflection Properties

The pattern ${someX.someY.someZ} can simply sometimes mean getSomeX().getSomeY().getSomeZ(). Thus, properties such as ${project.build.directory} is translated to getProject().getBuild().getDirectory().

posted @ 2009-10-11 23:01 不需要解释 阅读(1426) | 评论 (0)编辑 收藏

今天是伟大的甘地的生日,刚好在印度出差也就享受了一天假期,不过如果我在国内的话今天也是不上班了,因为今天是伟大祖国生日的第2天。

今天继续在搞weblogic和jetty的调试,发现一个问题,weblogic会对response中的内容trim,jetty不会。估计是ebos中有一段代码在response的out里面写了一些空白进去,导致这个内容到client端的时候就会解析不对。obj.responseXML会是空。

另外,Fiddler是监控网络连接的,一般的话它会监控有线的那个,我在酒店是使用无线上网,所以一开始找不到原因还以为是fiddler不支持无线方式的监控,查看了一下配置才发现问题。

最后实在没有办法直接写死,好在我做的只是一个开发辅助工具,不需要考虑性能影响:

var xmlData = obj.responseText.trim();
//alert(xmlData);
obj.responseXML.loadXML(xmlData);

明天继续完善程序,争取在这个假期完成之前能完成大体,后续文档补充。也算是功德一件了。

posted @ 2009-10-03 03:31 不需要解释 阅读(255) | 评论 (0)编辑 收藏

     出国有很多好处也有很多坏处,这里就说一处好处,就是可以为自己的历史课好好的补一补了。历史以成败论英雄,当权者一般都会去篡改历史的,不过在长久看来,大家都不过是历史的一粒沙尘,是无法改变历史的,人只能创造历史,无法修改历史。在中国内地的当代史就是一部篡改的历史,所以这次出国就好好的补了补,在国外很多网站都可以访问,使用google可以查任何你想要查的东西,不会过滤掉一些关键的信息。

      下面我就来说说我对近代一些人物的再认识吧:

     先说蒋先生,其实这个人的功劳应该是很大的,我个人觉得比先祖的功劳要大,毕竟统一了中国,而且在台湾也实现了一定程度的民主。尤其的是在8年抗战的历史上更是不能抹去的功绩,历史应该给蒋先生一个公道。

     张学良,这个人的爱国程度超出我原来的影响,以前的历史书上也是说张学良是千古功臣,但是说的很含糊,尤其是在D的丰功伟绩下显得不是伟大,张学良这个人不仅仅是爱国,而且这个人的心胸非常的大,他让蒋先生关了后半辈子,看采访他的是很,他也只是一笑而过,当然这个或者是他后来是基督教有关。

     蒋夫人,不愧是中国的第一夫人,如果有人问我中国的第一夫人是谁?很茫然,是胡夫人吗?她做了一些啥?看看人家蒋夫人在抗战时候做的事情,抗战后方支援,美国国会演讲,国际场合的外交,真的不愧是第一夫人,不过对这个,我了当代历史说的就更加的少了。

    毛太祖,看他在建国后的人大会议上,俨然就是一个皇帝,虽然他本人非常的亲民,而且一直也是爱民如子,不过他错过了历史给他的机会,如果他能学一下华盛顿,为中国留下一个比较完善的制度,我看今天的中国应该会更加富强了。非常可惜,强人政治的时候没有推进民主,在后强人政治就只是剩下了利益斗争了。

    周公,周公年轻的时候非常有才华,非常懂得协调各方的关系,不过可能是太陶醉在协调者的角色上面,导致后期严重的边缘化,他参加革命不必太祖晚,而且有很长一段时间地位还比毛祖高。后来的边缘化导致不得不为了自保,手举红皮书,高喊毛主席万岁来自保,甚至自己的养女,自己的第一任女朋友都眼睁睁的看着他们迫害致死,其下场可想而知。

    今天看一段网上录像,说小平同志还跟过冯玉祥。历史课本上貌似没有这个。

posted @ 2009-09-27 02:08 不需要解释 阅读(485) | 评论 (0)编辑 收藏

     大概在4年前,我还在沈阳做辽宁网通的boss项目,那个时候系统刚刚上线,问题成堆,尤其是一些单子由于程序或者是数据问题,出现异常,出现异常就必须去更正数据,让单子继续走下去。那个时候公司有个强人,使用Python来做这个事情,说白了也是比较简单,就是使用Python调用server端得ejb,修改数据然后提交到server上去。不过在那个时候懂一门动态语言在我看来非常的不简单。

      goon,最近闲的无事,把同事的一个程序拿过来修改了一下,大概也是实现了这样的一个逻辑,不过没有使用Python,or Jython,使用的是java 程序员都很熟悉的Beanshell 语言来写,并添加上了SWT,作为ui。这样对公司大部分人就没有什么难度了,直接可以写java代码,而且没有Jython那样格式的严格要求(很烦人)。

    先上一下图:

image

结果后台配置,就可以直接修改,查看server上的数据,如果有问题的单子还可以通过这个来修改,非常cool。

怎么做到这点呢:

(1)通过java调用beanshell的方法,init 一个init.bsh, 在这个bsh里面写上你自己的逻辑,比如lookup ejb,写好一些方法,这样使用者就直接可以调用了。

(2)把一些服务器的配置写到配置文件里面去。

如果修扩展,也很简单,直接修改一下配置文件,添加一些jar 并在init.bsh里面添加自己的逻辑就可以了。

posted @ 2009-09-23 23:42 不需要解释 阅读(364) | 评论 (0)编辑 收藏

    昨天晚上就抵达了india的hyderabad,一个发展中的城市,在这个城市你可以看到90年代在珠三角的样子,所以至少来讲,india还是落后中国20年,当然我们中国也是和谐的比较厉害,这个我们还是需要承认的。

   到酒店一看,才知道原来这样的地方也敢叫hotel,真是人有多大胆地就有多大产!不服不行啊。从公路上来看india的话,小车和bus比较多,当然更多的是那个三轮摩托他们叫auto,想多的多,而且有一些还是2个人开,非常好奇的是难道一个车还要2个人合伙?更奇怪的是india的bus的门貌似都不关,不管是school bus还是company bus,都一样不关门,开的飞快。也不知道他们的车做门做啥。可惜的是,这次出来没有带照相机,要不照照给大家看看。

   吉隆坡还是一个非常漂亮的city,如果坐飞机去这个城市的话,晚上到,飞机回经过kul的上空,你可以看这个city的全景,可以看双子塔,当然和上海市没有的比。

   早上睡不着觉,就很早起来了,通过老板娘专线和老板娘通了电话叫车,就下楼等车去了,经过一下楼就发现一个出租车往外面跑,叫也叫不住。(这个hotel没有前台,我也搞不清楚老板娘在那个地方,只能通过电话call she)。没有办法就在外面等,经过等了1 hours才等到一个车,可怜吧,呵呵。在等的过程中我就在研究india的马路上的车,大部分小车都比较低端,貌似那款铃木(仿mini的)那款在这个城市还比较多。高端车就没有看到,唯一比较高端的是在那个hotel一楼停车场的丰田的私欲。 说起hotel的一楼,india人的思维也比较奇诡,我们那边的1楼都用来做商品(靠近马路),这边直接就做车库,估计是不愿意搞地下车库。

    office还是不错,非常的大,而且有tea room,非常的不错。中午去了一趟office的食堂,中午食堂:2个咖喱搞的汤(a little),一个鸡蛋,还有一些油炸食品。吃不下,同事介绍说附近有一个shanghai chef,打个auto跑过去(taxi就打不到)才发现,全是假冒的,一点也不是Chinese food。

    出差india,苦啊!

posted @ 2009-08-31 20:11 不需要解释 阅读(243) | 评论 (0)编辑 收藏

      真没想到,户籍制度和计划生育制度协同发力,已经到如此荒谬的地步了!超过了所有的政治讽刺剧和黑色幽默剧。某些公民在自己的国家,已经无法结婚了!(见2009年8月6日南方周末)他们的子女,则无权在自己上学的地方参加高考,必须得返回一个可能从来没有去过的地方参加考试。

  听上去这些人怎么都不像是公民,而更像是俄国农奴或者美国黑奴。

  外地大学生,在北京毕业以后,被单位录用,如果不能得到正式的户口,可以得到一个集体户口。这已经被认为是幸运的了。没想到,集体户口在结婚时遇到麻烦。如果结婚,就要把户口迁出去,变成家庭户口,迁出去就要买房。现在上百万的房价,当然不是人人都买得起,刚毕业没几年的学生,更是难以负担。没有自己的住房,就没有正式的户口卡,没有户口卡,民政局就不给你发结婚证。

  那么,就在集体户口那里登记结婚不行吗?不行,如果在那里结婚,集体户口的管理者就要确保你不超生,不多生孩子。万一不能确保,一票否决,人家的前程就完了。那么,放弃集体户口,回到老家呢?也不行,别以为农业户口就那么容易得到。户籍制度的限制是双向的。小城镇也一样,许出不许进。

  即使你想办法结了婚,你生下来的孩子也相当于印度的低级种姓。虽然不是不可接触者,但时候一到,就让你尝尝厉害。你的孩子在北京学校里高高兴兴地上学,和其他孩子没什么区别。天天在力争上游,或许成绩还很优秀。但到了高考的时候,就傻了。你的孩子必须回到你原来的户口所在地去参加考试。课程不一样,活该!环境不适应,活该!那里早已没有亲人,没人照顾孩子,活该!

  最让人憋闷的是,并不是哪个具体的人在和你过不去,你想发泄都不知道去找谁。大家都是善良人,都为了这个国家好,都没想坑你,但你就是被玩儿了。玩儿得你一点辙都没有。

  为什么要有这么多糟糕的规定?一个政府为什么要这么处心积虑地难为自己的公民?原因就在于,总是有人,包括那些被玩儿的很惨的人,都相信,如果没有限制,人们就会蜂拥进入北京这样的大城市,那么,北京户籍人口就会遭到不公平,就会面对更激烈的竞争,就有可能败下阵来。必须保护他们,必须保护北京户籍人口。

  呸!

  首先声明,我就是北京户籍人口的一员。这样声明,是免得那些脏心烂肺、理解力低下的人以为我仅仅是在泄私愤。前两年我写文章大骂难为小产权房的人,许多人就认为,我是因为买了小产权房才这么愤怒,但我其实没买。我还没那种领先的经济意识。

  不过,我这样说当然也和我的私利有关。我的实际收入和经济利益,当然受到身边人水平、干劲和创造力的直接影响。我不想生活在一个如此荒唐、狭隘的社会里。我想有机会和尽可能大范围的优秀人士共同居住在一个城市中,而不想身边的人都是那些不思进取、离开政府保护就不能生存的家伙。

  重要的是,这个世界上,没有任何正当的法律、道德、伦理、传统规定:一个人偶然出生在哪里,他就有权利、有资格一直在那里生活。如果他负担不起生活费用,政府就必须禁止别人和他竞争,或者从别人那里抢来钱给他,保证他能在出生地继续生活。这种规定太荒唐可笑了。人是人,不是保护区的动物。

  如果你出生在北京,如果你是北京户籍人口之一,那仅仅证明你偶然出生在这里,或者政府曾经批准你居住在这里,仅此而已。如果你自己无能或者不努力,无法竞争过那些并非出生在这里的人,那你只好卷铺盖走人,别再继续在北京生活了。你可以去那些你可以负担起生活费的地方生活。

  很多人来到北京打拼,要在北京买房。房价于是上涨。你买不起了。那你只好租房。如果租也租不起,你倒说说看,除了离开北京之外,还有什么办法?

  大家一起参加高考,你的分数不如人家,人家就更应该上大学。难道仅仅因为你出生在这里,这里的大学就应该优先对你开放吗?你以为自己是婆罗门或者刹帝利吗?

  北京不是你的城市。属于你的,仅仅是你花钱购买、或者别人送给你的房子。除此之外的城市的广大范围,在权利的意义上和你无关。你不要动不动就以城市的主人自居,那是无耻的僭越。

  在精神上,你可以认为自己是城市的主人,但这种精神上的主人,仅仅表现为你应该用自己的努力发扬光大这个城市的精神和原则。城市为所有人提供一个和他人自由合作的场所。城市的精神和原则天生就是自由。人们在城市中,可以更大限度地互相激发,创造力有更大发挥的空间。在这种精神中,丝毫也找不到自闭、限制、停滞、寄生之类的概念

  而且,作为北京户籍人口之一,我从来没有委托过任何官员,请他们帮助我排除外来竞争,禁止其他人在这个城市里比我表现得更加优秀。我也不认为,任何人有权利这样去做,不管他出生在哪里。

  我认为,相关官员这样想,这样做,是对包括我在内的北京户籍人口的侮辱,是在把我们看作毫无竞争力的废物,是对我们人格和尊严的蔑视。我不需要他们的这种保护,我自信可以参与竞争并在这个城市中争取到自己的位置。如果成功,我将享受自己的努力结果,如果不成功,我也不需要别人替我负责。我不是他们的奴隶,他们也不是我的主子。

  实际上,北京户籍人口这个词,引起我极大的嫌恶。如果说,集体户口让我联想到农奴,户籍人口则让我联想到圈养牲口。实际上,饲养者是在以貌似慈祥,实则傲慢的态度看待这些被饲养者。可憎的是,许多被饲养者还因此萌生出优越感,自以为高人一等。真是TMD天生的奴才!

  当然,除了奴才以外,更多的人是糊涂。他们多年受到片面性的宣传。不知不觉中,他们已经习惯从被饲养者的角度看世界,把所有其他人都看作和他抢食的被饲养者。他们已经不能想象还有无需饲养、可以自己创造世界的大写的人的存在。他们真心恐惧城市的开放,恐惧自由竞争,恐惧失去政府的保护。众多被饲养者的存在,是貌似慈祥、实则傲慢的官员的坚定靠山。就是凭借着这巨大的靠山,官员们才弄出让公民甚至无法结婚的黑色闹剧。

  我个人当然无力改变这种闹剧,但我乐于看到所有想在北京凭借诚实劳动谋生存、谋发展的人积极地主张自己的权利。我建议他们的主张要和平和非暴力,要持之以恒和坚持到底。历史上无数的成功先例可以供他们借鉴。权利的获得从来都不是轻松的,但许多时候,权利是最后的赢家。

posted @ 2009-08-10 12:17 不需要解释 阅读(182) | 评论 (0)编辑 收藏

in windows, we can install weblogic as windows service.

(1)edit bea.home/wlserver_10.3/server/bin/installSvc.cmd

add :

rem 设置域的名字,这里是base_domain
set DOMAIN_NAME=wsc52
rem 服务名
set SERVER_NAME=AdminServer
rem 设置用户domain的home
set USERDOMAIN_HOME=D:\bea10\user_projects\domains\wsc52
rem 设置口令
set WLS_pw=weblogic
set JAVA_HOME=D:\bea10\jdk160_05

add in the final line, add

-log:"%USERDOMAIN_HOME%\stdout.log"

so , weblogic will print all wls log to this file.

 

(2)start this server, this server name is “beasvc wsc52_AdminServer”

you can start and stop this service with this command.

net start “beasvc wsc52_AdminServer” and net stop “beasvc wsc52_AdminServer”.

 

if you want do delete this service,use this:SC delete “beasvc wsc52_AdminServer”

posted @ 2009-07-18 08:32 不需要解释 阅读(406) | 评论 (0)编辑 收藏

 
真正的驴爸关键词列表流出,直接破解自安装目录.dat文件,让你感受毛骨悚然的监控

欢迎不署名不写出处转载。

首先分析驴爸的二进制文件。injlib32.exe, 偏移量 89e8H

000089e0h: F8 89 00 10 E8 89 00 10 65 64 69 74 70 6C 75 73 ; 鴫..鑹..editplus
000089f0h: 2E 65 78 65 00 00 00 00 75 65 64 69 74 33 32 2E ; .exe....uedit32.
00008a00h: 65 78 65 00 65 6D 65 64 69 74 6F 72 2E 65 78 65 ; exe.emeditor.exe
00008a10h: 00 00 00 00 77 6F 72 64 70 61 64 2E 65 78 65 00 ; ....wordpad.exe.
00008a20h: 6E 6F 74 65 70 61 64 2E 65 78 65 00 77 70 73 2E ; notepad.exe.wps.
00008a30h: 65 78 65 00 77 70 70 2E 65 78 65 00 65 74 2E 65 ; exe.wpp.exe.et.e
00008a40h: 78 65 00 00 70 6F 77 65 72 70 6E 74 2E 65 78 65 ; xe..powerpnt.exe
00008a50h: 00 00 00 00 66 72 6F 6E 74 70 67 2E 65 78 65 00 ; ....frontpg.exe.
00008a60h: 65 78 63 65 6C 2E 65 78 65 00 00 00 6D 73 61 63 ; excel.exe...msac
00008a70h: 63 65 73 73 2E 65 78 65 00 00 00 00 6F 75 74 6C ; cess.exe....outl
00008a80h: 6F 6F 6B 2E 65 78 65 00 77 69 6E 77 6F 72 64 2E ; ook.exe.winword.
00008a90h: 65 78 65 00 6D 61 69 6C 6D 61 67 69 63 2E 65 78 ; exe.mailmagic.ex
00008aa0h: 65 00 00 00 70 6F 70 6F 2E 65 78 65 00 00 00 00 ; e...popo.exe....
00008ab0h: 71 71 6D 61 69 6C 2E 65 78 65 00 00 61 69 78 6D ; qqmail.exe..aixm
00008ac0h: 61 69 6C 2E 65 78 65 00 69 6D 61 70 70 2E 65 78 ; ail.exe.imapp.ex
00008ad0h: 65 00 00 00 69 6E 63 6D 61 69 6C 2E 65 78 65 00 ; e...incmail.exe.
00008ae0h: 6D 73 69 6D 6E 2E 65 78 65 00 00 00 64 6D 32 30 ; msimn.exe...dm20
00008af0h: 30 35 2E 65 78 65 00 00 66 6F 78 6D 61 69 6C 2E ; 05.exe..foxmail.
00008b00h: 65 78 65 00 67 6F 6F 67 6C 65 74 61 6C 6B 2E 65 ; exe.googletalk.e
00008b10h: 78 65 00 00 6D 69 72 61 6E 64 61 33 32 2E 65 78 ; xe..miranda32.ex
00008b20h: 65 00 00 00 69 6D 75 2E 65 78 65 00 79 70 61 67 ; e...imu.exe.ypag
00008b30h: 65 72 2E 65 78 65 00 00 74 6D 73 68 65 6C 6C 2E ; er.exe..tmshell.
00008b40h: 65 78 65 00 73 74 61 72 74 2E 65 78 65 00 00 00 ; exe.start.exe...
00008b50h: 75 63 2E 65 78 65 00 00 69 63 71 63 68 61 74 72 ; uc.exe..icqchatr
00008b60h: 6F 62 6F 74 2E 65 78 65 00 00 00 00 71 71 2E 65 ; obot.exe....qq.e
00008b70h: 78 65 00 00 6D 73 6E 6D 73 67 72 2E 65 78 65 00 ; xe..msnmsgr.exe.
00008b80h: 67 73 66 62 77 73 72 2E 65 78 65 00 67 72 65 65 ; gsfbwsr.exe.gree
00008b90h: 6E 62 72 6F 77 73 65 72 2E 65 78 65 00 00 00 00 ; nbrowser.exe....
00008ba0h: 74 6F 75 63 68 6E 65 74 2E 65 78 65 00 00 00 00 ; touchnet.exe....
00008bb0h: 74 68 65 77 6F 72 6C 64 2E 65 78 65 00 00 00 00 ; theworld.exe....
00008bc0h: 6D 61 78 74 68 6F 6E 2E 65 78 65 00 74 74 72 61 ; maxthon.exe.ttra
00008bd0h: 76 65 6C 65 72 2E 65 78 65 00 00 00 6E 65 74 73 ; veler.exe...nets
00008be0h: 63 70 2E 65 78 65 00 00 67 65 2E 65 78 65 00 00 ; cp.exe..ge.exe..
00008bf0h: 66 69 72 65 66 6F 78 2E 65 78 65 00 6F 70 65 72 ; firefox.exe.oper
00008c00h: 61 2E 65 78 65 00 00 00 6E 65 74 63 61 70 74 6F ; a.exe...netcapto
00008c10h: 72 2E 65 78 65 00 00 00 6D 79 69 65 2E 65 78 65 ; r.exe...myie.exe
00008c20h: 00 00 00 00 69 65 78 70 6C 6F 72 65 2E 65 78 65 ; ....iexplore.exe
00008c30h: 00 00 00 00 6D 6D 63 2E 65 78 65 00 72 65 67 65 ; ....mmc.exe.rege
00008c40h: 64 69 74 2E 65 78 65 00 74 61 73 6B 6D 67 72 2E ; dit.exe.taskmgr.
00008c50h: 65 78 65 00 6D 70 73 76 63 63 2E 65 78 65 00 00 ; exe.mpsvcc.exe..

什么意思?驴爸软件将监控下列软件:
文本编辑软件:EdiPlus,UltraEdit,EmEditor, 写字板,记事本
办公软件:WPS的Word、Presentation、Spreadsheet,微软的Word、Powerpoint、FrontPage、Excel、Access、Outlook
电子邮件客户端:mailmagic.exe popo.exe qqmail.exe aixmail.exe imapp.exe incmail.exe msimn.exe dm2005.exe foxmail.exe
即时通讯工具:Google Talk,Miranda32,imu.exe,ypager.exe,腾讯QQ和TM,start.exe,新浪UC,ICQ,MSN
浏览器类:GoSuRF,GreenBrowser,TouchNet,TheWorld,MaxThone,腾讯套套浏览器,NetScape,Firefox(说明书里说只能监控到2.0版本),Opera,NetCaptor,MyIE,IE
系统工具类:mmc, regedit, taskmgr

在看看XNet2.exe,偏移量 68968h,看看驴爸将会监控那些程序

00068960h: B3 CC D0 F2 00 00 00 00 77 6F 77 2E 65 78 65 00 ; 程序....wow.exe.
00068970h: C4 A7 CA DE CA C0 BD E7 00 00 00 00 79 61 68 6F ; 魔兽世界....yaho
00068980h: 6F 6D 65 73 73 65 6E 67 65 72 2E 65 78 65 00 00 ; omessenger.exe..
00068990h: D1 C5 BB A2 CD A8 00 00 77 61 6E 67 77 61 6E 67 ; 雅虎通..wangwang
000689a0h: 2E 65 78 65 00 00 00 00 B0 A2 C0 EF CD FA CD FA ; .exe....阿里旺旺
000689b0h: 00 00 00 00 73 74 61 72 74 2E 65 78 65 00 00 00 ; ....start.exe...
000689c0h: CD F8 D2 D7 50 4F 50 4F 00 00 00 00 CD F8 D2 D7 ; 网易POPO....网易
000689d0h: 70 6F 70 6F 00 00 00 00 75 63 2E 65 78 65 00 00 ; popo....uc.exe..
000689e0h: D0 C2 C0 CB 55 43 00 00 D0 C2 C0 CB 75 63 00 00 ; 新浪UC..新浪uc..
000689f0h: 69 63 71 2E 65 78 65 00 49 43 51 36 00 00 00 00 ; icq.exe.ICQ6....
00068a00h: 69 63 71 36 00 00 00 00 73 6B 79 70 65 2E 65 78 ; icq6....skype.ex
00068a10h: 65 00 00 00 53 6B 79 70 65 00 00 00 73 6B 79 70 ; e...Skype...skyp
00068a20h: 65 00 00 00 65 70 68 2E 65 78 65 00 65 BB B0 CD ; e...eph.exe.e话?
00068a30h: A8 00 00 00 64 6F 73 68 6F 77 00 00 6D 73 6E 6D ; ?..doshow..msnm
00068a40h: 73 67 72 2E 65 78 65 00 4D 53 4E 00 6D 73 6E 20 ; sgr.exe.MSN.msn 
00068a50h: 6D 65 73 73 65 6E 67 65 72 00 00 00 71 71 67 61 ; messenger...qqga
00068a60h: 6D 65 2E 65 78 65 00 00 51 51 D3 CE CF B7 00 00 ; me.exe..QQ游戏..
00068a70h: 71 71 D3 CE CF B7 00 00 71 71 63 68 61 74 2E 65 ; qq游戏..qqchat.e
00068a80h: 78 65 00 00 51 51 C1 C4 CC EC CA D2 00 00 00 00 ; xe..QQ聊天室....
00068a90h: 71 71 C1 C4 CC EC CA D2 00 00 00 00 71 71 2E 65 ; qq聊天室....qq.e
00068aa0h: 78 65 00 00 51 51 00 00 71 71 32 00 62 69 74 62 ; xe..QQ..qq2.bitb
00068ab0h: 6F 6D 65 74 2E 65 78 65 00 00 00 00 42 69 74 43 ; omet.exe....BitC
00068ac0h: 6F 6D 65 74 00 00 00 00 62 69 74 63 6F 6D 65 74 ; omet....bitcomet
00068ad0h: 00 00 00 00 B7 D6 CE F6 CD EA B3 C9 A1 A3 00 00 ; ....分析完成。..

具体的我就懒得写了。凡是窗口标题栏有这些文字的统统会遭到监视。

搜索引擎监控,来自Surfgd.dll,偏移量16390h


00016390h: 2E 6D 73 6E 2E 63 6F 6D 00 00 00 00 2E 79 6F 6B ; .msn.com.....yok
000163a0h: 61 2E 63 6F 6D 00 00 00 2E 79 61 68 6F 6F 2E 63 ; a.com....yahoo.c
000163b0h: 6F 6D 00 00 2E 79 69 6D 67 2E 63 6F 6D 00 00 00 ; om...yimg.com...
000163c0h: 2E 62 61 69 64 75 2E 63 6F 6D 00 00 2E 63 6F 70 ; .baidu.com...cop
000163d0h: 79 73 6F 2E 63 6F 6D 00 2E 6D 61 70 62 61 72 2E ; yso.com..mapbar.
000163e0h: 63 6F 6D 00 2E 6E 65 74 73 75 6E 2E 63 6F 6D 00 ; com..netsun.com.
000163f0h: 2E 66 6F 6C 6F 64 61 2E 63 6F 6D 00 2E 6E 70 69 ; .foloda.com..npi
00016400h: 63 70 2E 63 6F 6D 00 00 2E 64 69 63 74 2E 63 6E ; cp.com...dict.cn
00016410h: 00 00 00 00 2E 79 6F 6B 2E 63 6F 6D 00 00 00 00 ; .....yok.com....
00016420h: 2E 7A 68 6F 6E 67 73 6F 75 2E 63 6F 6D 00 00 00 ; .zhongsou.com...
00016430h: 2E 73 6F 67 6F 75 2E 63 6F 6D 00 00 2E 79 61 68 ; .sogou.com...yah
00016440h: 6F 6F 2E 63 6F 6D 2E 63 6E 00 00 00 2E 73 6F 73 ; oo.com.cn....sos
00016450h: 6F 2E 63 6F 6D 00 00 00 2E 67 6F 6F 67 6C 65 2E ; o.com....google.
00016460h: 63 6E 00 00 2E 67 6F 6F 67 6C 65 2E 63 6F 6D 00 ; cn...google.com.

dbfilter.dll,这个是直接把你的Windows的winsock2给监听了,也就是说所有从你网卡经过的每一个字节都会被扫描和分析。

现放出来自直接解密安装路径下的 .dat 文件的关键字列表,并稍加解说

wfile.dat - http://privatepaste.com/450zZe32hn
这个文件说明了过滤文件类型


TrustUrl.dat - http://privatepaste.com/4c0Q3tzzb0
信任网址。这些网站毫无疑问都是老大哥信得过的。值得全球站长屏蔽这些网站。这是驴爸软件中最有价值的一份列表,这些网站都是XX喉舌


vgamfil.dat - http://privatepaste.com/1auoil5bP2
所谓“暴力”游戏类。都有屏蔽了什么游戏呢?Quake,Quake2,Quake3,PLA训练用的counter-strike.net,F22 Raptor,古墓丽影(这也算暴力类?),古墓丽影II,星际争霸(暴力类?我看是“封建迷信”吧?),暴雪母公司activision.com,duke4.com,万年跳票的dukeforever.com,ff8online.com,half-life.com,stormtroopers.com,unreal.org等等。建议大家以后只打清廉战士。

chtfil.dat - http://privatepaste.com/32hbY5XUgy
屏蔽了AOL,AIM,Yahoo,MSN

csnews.dat - http://privatepaste.com/bb1RyuqiVu
这个文件是最喜剧的,驴爸抄袭美国人的过滤库就算了,还很临时工的把cybersitter别人的readme文件一起抄过来了

entfil.dat - http://privatepaste.com/bd0qklsJuD
娱乐类过滤。这里屏蔽了BSG和Firefly的scifi.com,StarTrek.com,StarWars.com,这样Geek四大剧就被围剿得一个不剩了。另外southpark、pokemon、xfiles和BritneySpears也是监视关键字。blizzard.com暴雪公司官方网站被屏蔽

finfil.dat - http://privatepaste.com/b414bkBNPv
金融类过滤。包括华尔街时报www.wsj.com,www.ft.com,www.sec.gov等

fmfil.dat - http://privatepaste.com/3d114bf1mD
电子邮件监控。hotmail.com,gmail.com,甚至www.mail开头的都会受到特别关注。

fshrfil.dat - http://privatepaste.com/b8kPPu9ZiV
文件共享监控。监控市面上几乎所有的P2P客户端和软件。gnutella, bearshare, emule, wrapster, 
scourexchange, imesh, audiogalaxy, kazaa, filesharing, morpheus, limewire, 
javalimewire, gnutella, wrapster, scourexchange, shareaza, kazaalite, 
bittorrent, azureus


gdwfil.dat - http://privatepaste.com/49ftIfdRqJ
屏蔽了amazon.com,还有这款山寨软件的祖宗cybersitter*.com,download.windowsupdate.com,liveupdate.symantec.com,symantec.liveupdate.com,microsoft.com,symantec.com,windowsupdate.com,zdnet.com。也就是说安装了某软件,Windows的补丁和杀毒软件升级,要么被监控,要么就被直接屏蔽了。有人说这个文件是白名单,请问在同一个列表里的amnesty.org,virgin-boys,porno-free.net这些东西也可能是白名单吗? 


imgfil.dat - http://privatepaste.com/cehwHinyM0
这里屏蔽了很多图片类网站,只要URL包含下列字符就会像GFW一样被RST,例如google.ca/image,google.com/image,当然还有Yahoo的yahoo.com/image,还有视频搜索屏蔽searchcat=vid,video.search.yahoo。请问老大哥究竟有什么见不得人的东西要把图片和视频搜索统统屏蔽呢?

mp3fil.dat - http://privatepaste.com/f0uBTti5uh
mp3类。封杀了一些MP3共享软件,例如gnutella, bearshare, wrapster, scourexchange, imesh, audiogalaxy, kazaa, filesharing, morpheus, limewire, gnutella, wrapster, scourexchange


wrestfil.dat - http://privatepaste.com/eapAh32NC8
摔跤类。主要是WWE美摔之类的被屏蔽了。没有屏蔽K1,说明的确是抄袭cybersitter


pkmon.dat - http://privatepaste.com/580KvOFYV4 (POKEMON!)
文件名就很囧。Pokemon就是吃豆子游戏。这份名单貌似过滤了一些anime和manga

sporfil.dat - http://privatepaste.com/e20QeOlezv
体育类过滤。屏蔽了www.nba.com和wnba.com,还有其他的太多了。。。


--------------------分割线--------------------

下面的.dat文件内容,几乎都来自cybersitter,山寨程度可见一斑

wfileu.dat - http://privatepaste.com/9c0oaeS0i1
这个网址就是cybersitter的升级地址了,居然还保留了。你说驴爸这软件山寨不山寨?

wzfil.dat - http://privatepaste.com/170Epo2wTZ
游戏破解


adwapp.dat - http://privatepaste.com/aey5BIlkyx
adult类网站过滤(严格)

adwfil.dat - http://privatepaste.com/091MdBUyDv
adult类网站过滤


lgwfil.dat - http://privatepaste.com/a1ndIrVvEn
同志类网站,不熟悉,不评价。

iawfil.dat - http://privatepaste.com/951A0xSKW2
非法类。照抄cybersitter的名单

auctfil.dat - http://privatepaste.com/f20vFALQPl


bnrfil.dat - http://privatepaste.com/76uATdcCsN
屏蔽广告

bsnlst.dat - http://privatepaste.com/b6tJvZlQJN


cultfil.dat - http://privatepaste.com/dc1NtZn183
文化过滤,包括GeorgeKing,scientology,ChurchOfSatan一类的。还是抄袭cybersitter


gblfil.dat - http://privatepaste.com/53CXciru9I
貌似是赌博类。



gnfil.dat - http://privatepaste.com/c6lU71HHUT
枪支类。

hatfil.dat - http://privatepaste.com/1005oQLOJv
种族仇恨类。


jbfil.dat - http://privatepaste.com/7d1cmQ7bdW
招聘类。


movfil.dat - http://privatepaste.com/99cMT8Xjyr
电影类



nvgamfil.dat - http://privatepaste.com/9aYQOBgQoU
又一个游戏类过滤。nv game filter.dat?


perfil.dat - http://privatepaste.com/7driTj667b
sex类过滤

picsfil.dat - http://privatepaste.com/34TI4cSbZE



popfil.dat - http://privatepaste.com/c10gAsIEuq
广告弹窗类过滤

psyfil.dat - http://privatepaste.com/ae0GA79ZFm
封建迷信和超自然类过滤。



swfil.dat - http://privatepaste.com/aeSIsoDlKd
盗版软件过滤。

tafil.dat - http://privatepaste.com/26FTx1Dfjz
酒精类过滤。抄袭cybersitter的名单

tapfil.dat - http://privatepaste.com/ae0UoosGMk
纹身类过滤。


viofil.dat - http://privatepaste.com/f79OiqXC6J
暴力自杀类。


注意这些网址文件,结合以前网上流传出来的FalunWord.lib,我们可以得出一个很惊人的结论

  国内网站很少被屏蔽,.cn的网址很少出现。

为什么说这个结论很惊人

1. 为什么屏蔽对象仅仅局限于欧洲国家、美国的sex情暴力网站,甚至阿拉伯国家的极端宗教网站
1. 为什么这个耗资4170万的软件屏蔽对孩子有害的网站,都直接非法抄袭来自cybersitter的名单
3. 我知道的几个XX网站,名单里一个都没有!
4. 为什么几乎不怎么屏蔽国内垃圾站呢?国内的垃圾站还少了吗?

所以,绿坝根本不能算一个全功能的家长软件,只是国外同类软件的rip-off加上一个强大的合法木马监控每一台7月1日之后的新电脑。

一个很不情愿的猜测就是官老爷们压根不是认真做家长类软件的。这个软件压根就不是为了保护纳税人的孩子的。为是为了该软件的一些“附加功能”。例如汇报老大哥。比较善意的猜测就是一些利益集团想再度搜刮老百姓(特别是家电下乡的那些)利用国家手段强制搞的一个政策罢了。

最后要感谢http://scott.wolchok.org/greendam.html(解密源码的C算法在http://scott.wolchok.org/gddec.c,大家可以编译,自行解驴爸软件的.dat看看有那些网址),这些成果和你们的辛勤劳动是分不开的。

posted @ 2009-06-13 15:00 不需要解释 阅读(204) | 评论 (0)编辑 收藏

工信部,全称是工业和信息化部,名字莫名其妙,no three no four,不像个正经机构,做起事来果然也很不靠谱,很发飙。比如,最近,这个部忽然发布一个什么通知,要求所有新生产和销售的国产和进口计算机都安装“绿坝—花季护航”软件。
让所有计算机都安装自己的软件,这是无数软件工程师的梦想。年轻时的比尔·盖茨就曾这样幻想过——在每一台PC上都装有微软的操作系统。微软的梦想最终变成了现实。实现这个梦想的过程中有着令人叹为观止的天才、智慧、汗水、机遇和协作。这是计算机发展史上最振奋人心的奋斗历程之一。如今,工信部想凭两页自己弄出来的文件就美梦成真,做到同样的事情,这不是发飙是什么?
这个“绿坝—花季护航”软件是一个过滤软件,据文件说,可以过滤“互联网不良文字和图像内容”。工信部冠冕堂皇的理由是保护青少年,但地球人都知道,他们真正想要过滤的是成年人的头脑。道理很明显,如果真的想要保护青少年,那此软件只应该向家长推介,而不必向所有使用计算机的人强行推广。难道所有计算机使用者的年轻都尚处花季?再说,真正关心青少年身心健康的人当然是他们的家长,而不是某些坐在北京某办公楼内悠闲工作的公务员。为什么要由这些行为可疑、动辄发飙的公务员来代替家长决定如何教育孩子呢?
想要过滤成年人的头脑,这在当下的中国,并不稀奇。许多人都想做这件事。工信部也试图做这件事,这不是奇闻,也不算发飙,但工信部以如此笨拙荒唐的方式做这件事,就完全是奇闻了,不但是标准的发飙,简直可以称作没事找抽了。
发飙者的特征之一就是:做事不考虑后果。官方要求所有新生产销售的计算机都安装某种软件,这可不同于一般的商业软件上市。工信部考虑了这件事的所有后果吗?正常不发飙的人稍微一想就可以想出一大堆麻烦事:
首先,据说,该软件已经“综合测试和试点应用”,意思是,这个软件非常可靠,毫无问题。但稍知计算机的人都明白,新软件总会有问题,这是任何软件都无法彻底解决的问题。既然是强制安装,那消费者自然应该得到全额赔偿。具体来说,这个软件的安全性有保证吗?和系统软件和其他软件的兼容性如何?侵犯计算机使用者的隐私吗?如果有计算机因为这个软件而速度变慢,甚至系统崩溃,谁来负责维修和赔偿?由此而给财政造成的支出由谁来负责?工信部部长吗?
其次,既然是过滤软件,当然就会有过滤清单。工信部保证清单上的被过滤者都确实应该被过滤吗?这些被过滤者是经过什么程序,由哪些权威部门认定的?如果有冤假错案怎么办?如果某个网站其实很好,但被错误地列入过滤清单,由此导致其经济利益受损,工信部准备怎么赔偿?工信部部长个人的收入因此受影响吗?在工信部的文件中,我并没有找到被过滤者如何申辩的规定。死刑犯都可以上诉,但这些网站看来却毫无申辩的机会。或许,工信部假设自己绝不会犯错。这种假设不是发飙是什么?
第三,工信部花了4000万,只买断了一年的软件使用权。那么,一年以后怎么办?如果一年以后该软件企业利用这种行政垄断地位任意抬价,谁来负责?如果该软件企业日后未能及时升级,导致效用下降,谁来负责?如果该软件企业日后经营不善,破产倒闭,广大用户的权益谁来保护,由此造成的损失,谁来负责?
第四,类似的软件早就有了,这种东西的技术含量很低,弄几个软件人员就能搞出来。那么,请问,工信部为何偏偏选择“绿坝—花季护航”软件?这家软件公司并没有什么市场知名度,他们为什么这么幸运,一下子得到这样一个大单?此前召开过公开招标或者听证会吗?如果舆论质询,工信部部长准备怎么回答?
第五,工信部并不是执法机关,却发布这种带有强制性的文件。如果别人不遵守,你们怎么办?抓人?罚款?吊销营业执照?恐怕工信部都没有这种权力。那你们打算怎么办?发动公安工商城管联合执法吗?
中国的计算机行业是个高度灵活的行业,政府干预的力度并不大。这是一件好事,正因为这样,中国的计算机行业才发展迅速,商品品质不断提升,同时价格一降再降,消费者得到了非常大的利益。在这样一个高度灵活的行业中,某个笨拙的政府部门想要耍一把威风,基本上只能是自取其辱。他们会看到那些聪明的经营者是怎么像耍猴儿一样耍他们的。坐在办公室里悠哉游哉的公务员想和那些天天在市场中摸爬滚打的人比较智力和精力,胜算不会比面对美军的萨达姆更高。
当然,还有另一种解释,工信部的人并不是那么飙,他们也知道自己面临的种种困境,那他们为什么还要发布这种no three no four的文件呢?答案就在于那4000万的采购合同。现在的中国软件产业,凭着一个小软件,一年就可以得到4000万收入,这种好买卖,如果不是绝对没有,也是十分罕见的。工信部确定的这个明显过高的价格,其中大有可疑之处。
既有可疑之处,当然不希望人们大加关注。因此,工信部在文件中精心措辞,把强制性的措施架空成一纸空文。这样就可以把社会的关注或者反对降到最低程度。整篇通知都在用“应”,而不是“必须”。了解法律用语的人都知道,在法条中,“应该”和“必须”代表着两种执法力度。如果仅仅是“应该”,根本没有“必须”,那基本上等于没说。果然,在通知的最后,工信部也不得不承认,如果经营者对他们的这个通知不予理睬,当作废纸,不去装什么花季软件,工信部只能“责令改正”。也就是说,经营者即使被当面抓住,也不过是补装了事。工信部才不会傻乎乎去制定严厉的罚则。那种罚则不但无从执行,还会激起从业者的反抗。
对于工信部来说,最好的结果就是,发一个貌似强制的文件,给自己的4000万采购提供一个理由——全国都要强制安装,这么大的数量,自然需要花大笔钱买断软件。然后,由于只是“应该”,而不是“必须”,并且没有罚则,因此,所有人都不会认真执行这个文件,并很快忘掉这件事。这样一来,钱理由充分地花出去了,还不会真正触怒任何人。他们想“闷声发大财”。
但消息毕竟公布出去了。工信部的人还是蠢。你们以为自己真的能控制舆论、蒙混过关吗?那可是一项高难度的技术。许多专业人士都不见得能成功应付舆论。看,你们都成了网站头条了!没想到吧。因此,严重建议反应迟缓、未经过专业训练的公务员最好远离舆论,不要在刀口上舔血吃。
请问,那家软件公司的背景禁得住调查吗?工信部部长难道不知道人肉搜索这回事?这样在众目睽睽之下做事,如果一旦被人家查出不堪的事情来,工信部这不是没事找抽吗?4000万确实是一笔大钱,但能花的钱才是钱,如果钱没挣到,却被人查出腐败,还搭进去几个党的干部,那就太不值了。
请工信部的人记住:你们花的是纳税人的血汗钱。虽然你们口口声声说“政府出资”云云,好像在这个过程中,你们不但没占到便宜,还吃了大亏,但事实真相是,政府不能挣一分钱,政府只能花钱。根本没有什么政府的钱,有的只是纳税人的、被政府通过税收等各种手段强行拿走的血汗钱。
因此,作为一个纳税人,我呼吁,反贪局、纪委公开调查工信部“绿坝—花季护航”软件软件采购案,并将调查结果公布。调查重点是该软件公司和工信部有无关联?有无内部交易?有无私下密谋?该项采购案的程序是否合法?是否经过公开招标?其他同业软件商是否享有同等机会?4000万的定价依据是什么?该项款项的去处?审批人和经办人是谁?
我也呼吁所有有能力调查的媒体记者关注此事。纳税人的钱不应该这样被白白浪费和侵占,作为社会公器的媒体有责任揭露背后的真相。
既然工信部是没事找抽型,不抽他们几下也不对。

posted @ 2009-06-10 23:05 不需要解释 阅读(138) | 评论 (0)编辑 收藏

<html>
<head>
<style>
#test *{vertical-align:middle;}
</style>
<body>
    <div id="test">
        <img src="http://127.0.0.1:7001/wsc/images/message.png"/>
         <span>sdfhsdhfdksfjhtes:</span>
    </div>
</body>
</html>

请注意:#test *{vertical-align:middle;}

 

#test *表示了div里面所有元素,当然包含了span,input,img这些内联元素了。

 

vertical-align
初始值: baseline(缺省值)
可否继承:否
适用于: 内联元素
说明:vertical-align:baseline使元素的基线同父元素的基线对齐.
警告:vertical-align不能影响表格单元中的内容的对齐,对于块元素中的内容也一样.

  请注意,vertical-align只影响内联元素,比如span,img,em,input,a等这些元素,而对div,h3,p等这些块元素是无效的.

posted @ 2009-06-09 18:29 不需要解释 阅读(10184) | 评论 (1)编辑 收藏

Mave is good at jar management. so maven can help me to package the java application. with maven help, we can make the release application zip smaller.

for the smaller:we use the maven ant task to manager jars:

build.xml

<project basedir="." default="all" name="jars" xmlns:artifact="antlib:org.apache.maven.artifact.ant">
<property name="build.compiler" value="modern"/>
     <path id="maven-ant-tasks.classpath" path="${basedir}/maven/maven-ant-tasks-2.0.10.jar" />
  <typeset resource="org/apache/maven/artifact/ant/antlib.xml"
           uri="antlib:org.apache.maven.artifact.ant"
           classpathref="maven-ant-tasks.classpath" />

    <target name="all">
          <antcall target="get_server_jars"/>
          <antcall target="get_orchis_jars"/>
    </target>

    <target name="get_server_jars">
        <artifact:dependencies pathId="dependency.classpath"  filesetId="maven.fileset">
        <dependency groupId="junit" artifactId="junit" version="3.8.2"/>  
        <dependency groupId="activation" artifactId="activation" version="1.1"/>    
        <dependency groupId="castor" artifactId="castor" version="1.1"/>    

        </artifact:dependencies>

    <copy todir="${basedir}/lib">
        <fileset refid="maven.fileset" />
        <!-- This mapped strips off all leading directory information -->
        <mapper type="flatten" />
    </copy>
</target>

    <target name="get_orchis_jars">
        <artifact:dependencies pathId="dependency.classpath"  filesetId="maven.fileset">
            <dependency groupId="junit" artifactId="junit" version="3.8.2"/>       
            <dependency groupId="javax.servlet" artifactId="servlet-api" version="2.4"/>      
        </artifact:dependencies>

    <copy todir="${basedir}/webapps/ROOT/WEB-INF/lib">
        <fileset refid="maven.fileset" />
        <!-- This mapper strips off all leading directory information -->
        <mapper type="flatten" />
    </copy>
</target>

so we can use maven to update you application.

posted @ 2009-06-07 14:25 不需要解释 阅读(280) | 评论 (0)编辑 收藏

as we know maven can manager you jars, I am maven funs, Maven can give me lots of good idea. Compare with ant.

(1)no class path problem.

    Sometimes Many use of ant complained because of class path. They can not direct know which jars they used in project, almost version.

(2)lots of plug-in to use with maven.(maven-jetty-plug-in)

(3)maven report is usefully for improve you code.

(4)manager your jar of application.

(5)good for team.

(6)easy to use.

About this point, user of ant do not agree with me. but i think maven easy to use, you do not need to care class path, you can easily to get all report.

posted @ 2009-06-07 14:19 不需要解释 阅读(187) | 评论 (0)编辑 收藏

运行自己配置的web应用,往往只能看见weblogic编译之后的class文件。而看不见编译前的java的文件。为了调试方便,我们有时候是想看编译前的java文件。
在weblogic.xml中加入
<jsp-descriptor>
  <jsp-param>
    <param-name>keepgenerated</param-name>
    <param-value>true</param-value>
  </jsp-param>
</jsp-descriptor>

即可。
如果没有,在WEB-INF中建立一个weblogic.xml文件。
增加
<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE weblogic-web-app
    PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN"
    "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd" >
<weblogic-web-app>   
    <jsp-descriptor>
        <jsp-param>
            <param-name>keepgenerated</param-name>
            <param-value>true</param-value>
        </jsp-param>
    </jsp-descriptor>
</weblogic-web-app>

看看web应用在weblogic中生成临时文件中,有java文件了吧!!

posted @ 2009-06-03 18:09 不需要解释 阅读(945) | 评论 (0)编辑 收藏

    as we know, in weblogic 10. the weblogic.jar just has more than 30MB. so if you want use the client to invoke weblogic ejb method, you need the weblogic.jar. of course, if you use the weblogic9, it work well, but when you upgrade your weblogic server to weblogic10. the weblogic.jar does not work. the weblogic.jar of the weblogic10 is not enough.

you need do next:


     Use the following steps to create a wlfullclient.jar file for a client application:

      Change directories to the server/lib directory.
cd WL_HOME/server/lib
Use the following command to create wlfullclient.jar in the server/lib directory:
java -jar ../../../modules/com.bea.core.jarbuilder_X.X.X.X.jar
where X.X.X.X is the version number of the jarbuilder module in the WL_HOME/server/lib directory. For example:

      java -jar ../../../modules/com.bea.core.jarbuilder_1.0.1.0.jar
You can now copy and bundle the wlfullclient.jar with client applications.
Add the wlfullclient.jar to the client application’s classpath.

posted @ 2009-06-02 11:53 不需要解释 阅读(241) | 评论 (0)编辑 收藏

Based on the popular and very useful mod_rewrite for apache, UrlRewriteFilter is a Java Web Filter for any J2EE compliant web application server (such as Resin, Orion or Tomcat), which allows you to rewrite URLs before they get to your code. It is a very powerful tool just like Apache's mod_rewrite.

URL rewriting is very common with Apache Web Server (see mod_rewrite's rewriting guide) but has not been possible in most java web application servers. The main things it is used for are:

  • URL Tidyness / URL Abstraction - keep URLs tidy irrespective of the underlying technology or framework (JSP, Servlet, Struts etc).
  • Browser Detection - Allows you to rewrite URLs based on request HTTP headers (such as user-agent or charset).
  • Date based rewriting - Allows you to forward or redirect to other URL's based on the date/time (good for planned outages).
  • Moved content - enable a graceful move of content or even a change in CMS.
  • Tiny/Friendly URL's (i.e. blah.com/latest can be redirected to blah.com/download/ver1.2.46.2/setup.exe)
  • A Servlet mapping engine (see Method Invocation)

UrlRewriteFilter uses an xml file, called urlrewrite.xml (it goes into the WEB-INF directory), for configuration. Most parameters can be Perl5 style Regular Expressions or Wildcard Expressions. This makes it very powerful indeed.

 

example:

web.xml

  <filter>
        <filter-name>UrlRewriteFilter</filter-name>
        <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>UrlRewriteFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>
urlrewrite.xml
<?xml version="1.0" encoding="utf-8"?>

    <!DOCTYPE urlrewrite
        PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
        "http://tuckey.org/res/dtds/urlrewrite3.0.dtd">

    <urlrewrite>
        <rule>
           <from>^/some/olddir/(.*)$</from>
           <to type="redirect">/very/newdir/$1</to>
        </rule>

        <rule match-type="wildcard">
           <from>/blog/archive/**</from>
           <to type="redirect">/roller/history/$1</to>
        </rule>
    </urlrewrite>

posted @ 2009-05-24 16:15 不需要解释 阅读(196) | 评论 (0)编辑 收藏

HttpSessionBindingListener虽然叫做监听器,但使用方法与HttpSessionListener完全不同。HttpSessionBindingListener接口中共定义了两个方法:

valueBound()和valueUnbound(),分别对应数据绑定,和取消绑定两个事件。

所谓对session进行数据绑定,就是调用session.setAttribute()把HttpSessionBindingListener保存进session中。我们在LoginServlet.java中进行这一步。

// 把用户名放入在线列表

session.setAttribute("onlineUserBindingListener", new OnlineUserBindingListener(username));

这就是HttpSessionBindingListener和HttpSessionListener之间的最大区别: HttpSessionListener只需要设置到web.xml中就可以监听整个应用中的所有session。 HttpSessionBindingListener必须实例化后放入某一个session中,才可以进行监听。

从监听范围上比较,HttpSessionListener设置一次就可以监听所有session,HttpSessionBindingListener通常都是一对一的。

正是这种区别成就了HttpSessionBindingListener的优势,我们可以让每个listener对应一个username,这样就不需要每次再去session中读取username,进一步可以将所有操作在线列表的代码都移入listener,更容易维护。

valueBound()方法的代码如下:

public void valueBound(HttpSessionBindingEvent event) {

HttpSession session = event.getSession();

ServletContext application = session.getServletContext();



// 把用户名放入在线列表

List onlineUserList = (List) application.getAttribute("onlineUserList");

// 第一次使用前,需要初始化

if (onlineUserList == null) {

onlineUserList = new ArrayList();

application.setAttribute("onlineUserList", onlineUserList);

}

onlineUserList.add(this.username);

}

username已经通过构造方法传递给listener,在数据绑定时,可以直接把它放入用户列表。

与之对应的valueUnbound()方法,代码如下:

public void valueUnbound(HttpSessionBindingEvent event) {

HttpSession session = event.getSession();

ServletContext application = session.getServletContext();



// 从在线列表中删除用户名

List onlineUserList = (List) application.getAttribute("onlineUserList");

onlineUserList.remove(this.username);



System.out.println(this.username + "退出。");

}

这里可以直接使用listener的username操作在线列表,不必再去担心session中是否存在username。

valueUnbound的触发条件是以下三种情况:

  1. 执行session.invalidate()时。

  2. session超时,自动销毁时。

  3. 执行session.setAttribute("onlineUserListener", "其他对象");或session.removeAttribute("onlineUserListener");将listener从session中删除时。

因此,只要不将listener从session中删除,就可以监听到session的销毁。

posted @ 2009-05-20 17:41 不需要解释 阅读(3664) | 评论 (0)编辑 收藏

1、关于文本编辑器;

文本编辑器有很多,比如图形模式的gedit、kwrite、OpenOffice ... ... ,文本模式下的编辑器有vi、vim(vi的增强版本)和nano ... ... vi和vim是我们在Linux中最常用的编辑器。我们有必要介绍一下vi(vim)最简单的用法,以让Linux入门级用户在最短的时间内学会使用它。

nano 工具和DOS操作系统下的edit操作相似,使用简单,我们不作介绍了,如果您有兴趣,不妨尝试一下;


2、vi 编辑器;

为什么要学会简单应用vi

vi或vim是Linux最基本的文本编辑工具,vi或vim虽然没有图形界面编辑器那样点鼠标的简单操作,但vi编辑器在系统管理、服务器管理中,永远不是图形界面的编辑器能比的。当您没有安装X-windows桌面环境或桌面环境崩溃时,我们仍需要字符模式下的编辑器vi;

vi或vim 编辑器在创建和编辑简单文档最高效的工具;


3、vi 编辑器的使用方法;


3.1 如何调用vi ;

[root@localhost ~]# vi  filename

~
~
~
~
~
~
~
~


3.2 vi 的三种命令模式;

Command(命令)模式,用于输入命令;
Insert(插入)模式,用于插入文本;
Visual(可视)模式,用于视化的的高亮并选定正文;


3.3 文件的保存和退出;

Command 模式是vi或vim的默认模式,如果我们处于其它命令模式时,要通过ESC键切换过来。

当我们按ESC键后,接着再输入:号时,vi会在屏幕的最下方等待我们输入命令;

:w  保存;
:w  filename 另存为filename;
:wq! 保存退出;
:wq! filename 注:以filename为文件名保存后退出;
:q! 不保存退出;
:x 应该是保存并退出 ,功能和:wq!相同


3.4 光标移动;

当我们按ESC进入Command模式后,我们可以用下面的一些键位来移动光标;

j 向下移动一行;
k 向上移动一行;
h 向左移动一个字符;
l 向右移动一个字符;
ctrl+b  向上移动一屏;
ctrl+f  向下移动一屏;
向上箭头    向上移动;
向下箭头    向下移动;
向左箭头    向左移动;
向右箭头    向右移动;

我们编辑一个文件时,对于 j、k、l和h键,还能在这些动作命令的前面加上数字,比如 3j,表示向下移动3行。


3.5 插入模式(文本的插入);

i  在光标之前插入;
a  在光标之后插入;
I 在光标所在行的行首插入;
A  在光标所在行的行末插入;
o  在光标所在的行的上面插入一行;
O  在光标所在的行的下面插入一行;
s  删除光标后的一个字符,然后进入插入模式;
S  删除光标所在的行,然后进入插入模式;


3.6 文本内容的删除操作;

x 一个字符;
#x 删除几个字符,#表示数字,比如3x;
dw 删除一个单词;
#dw 删除几个单词,#用数字表示,比如3dw表示删除三个单词;
dd 删除一行;
#dd 删除多个行,#代表数字,比如3dd 表示删除光标行及光标的下两行;
d$ 删除光标到行尾的内容;
J 清除光标所处的行与上一行之间的空格,把光标行和上一行接在一起;


3.7 恢复修改及恢复删除操作;

u  撤消修改或删除操作;

按ESC键返回Command(命令)模式,然后按u键来撤消删除以前的删除或修改;如果您想撤消多个以前的修改或删除操作,请按多按几次u。这和Word的撤消操作没有太大的区别;


3.8 可视模式;

在最新的Linux发行版本中,vi提供了可视模式,因为这个功能是vim才有的。如果您用的vi没有这个功能,就换成vim就有了。打开可视模式,按ESC键,然后按v就进入可视模式;

可视模式为我们提供了极为友好的选取文本范围,以高亮显示;在屏幕的最下方显示有;

-- 可视 --  

--VISUAL--

如图:

进入可视模式,我们就可以用前面所说的命令行模式中的光标移动指令,可以进行文本范围的选取。

选取文本范围有何用?

我们可以对某部份删除作业,按d键就删除了我们选中的内容。
选中内容后,我们按y就表示复制;按d表示删除;

值得一提是的删除的同时,也表示复制。我们返回到命令模式,然后移动光标到某个位置,然后按shift+p键,就把刚才删除的内容贴上了。我们先在这里提一句,在后文,我们还得详细说说。

退出可视模式,还是用ESC键;


3.9 复制和粘帖的操作;

其实删除也带有剪切的意思,当我们删除文字时,可以把光标移动到某处,然后按shift+p键就把内容贴在原处,然后再移动光标到某处,然后再按p或shift+p又能贴上;

p 在光标之后粘帖;
shift+p 在光标之前粘帖

来举一例:

比如我们想把一个文档的第三行复制下来,然后帖到第五行的后面,我们应该怎么做呢?

有两种方法;

第一种方法:

先把第三行删除,把光标移动到第三行处,然后用dd动作,接着再按一下shift+p键。这样就把刚才删除的第三行帖在原处了。

接着我们再用k键移动光标到第五行,然后再按一下p键,这样就把第三行的内容又帖到第五行的后面了;

第二种方法;

进入可视模式,按ESC键,然后按v键。移动鼠标指针,选中第三行的内容,然后按y键复制;再移动指针到第五行,最后按p键;

所以复制和粘贴操作,是命令模式、插入模式及可视模式的综合运用;我们要学会各种模式之间的切换,要常用ESC键;更为重要的学会在命令模式下移动光标;


3.10 关于行号;

有时我们配置一个程序运行时,会出现配置文件X行出现错误 。这时我们要用到行号相关的操作;


为所有内容添加行号;

按ESC键,然后输入:

:set number

光标所处位置

在屏幕的右下角,有类似如下的;

         57,8          27%

在这之中,57表示第57行,8表示第8个字符;


3.11 查找和替换功能;


3.11.1 查找;

首先,我们要进入ESC键,进入命令模式;我们输入/或?就进入查找模式了;

/SEARCH  注:正向查找,按n键把光标移动到下一个符合条件的地方;
?SEARCH  注:反向查找,按shift+n 键,把光标移动到下一个符合条件的

举一例:比如我想在一个文件中找到swap单词,我应该如下做;

首先按ESC键,进入命令模式,然后输入;

/swap

?swap


3.11.2 替换;

按ESC键进入命令模式;

:s /SEARCH/REPLACE/g  注:把当前光标所处的行中的SEARCH单词,替换成REPLACE,并把所有SEARCH高亮显示;
:%s /SEARCH/REPLACE  注:把文档中所有SEARCH替换成REPLACE;
:#,# s /SEARCH/REPLACE/g  注:#号表示数字,表示从多少行到多少行,把SEARCH替换成REPLACE;

注:在这之中,g表示全局查找;我们注意到,就是没有替换的地方,也会把SEARCH高亮显示;

举例说明:

比如我们有一篇文档要修改;

我们把光标所在的行,把所有单词the,替换成THE,应该是:

:s /the/THE/g

我们把整篇文档的所有的the都替换成THE,应该是:

:%s /the/THE

我们仅仅是把第1行到第10行中的the,替换成THE,应该是;

:1,10  s /the/THE/g


参考:man vi 和vi –help

posted @ 2009-05-20 15:57 不需要解释 阅读(165) | 评论 (0)编辑 收藏

      一个Maven项目发布版本号用version 编码,用来分组和排序发布。Maven中的版本包含了以下部分:主版本,次版本,增量版本,和限定版本号。一个版本中,这些部分对应如下的格式:

<major version>.<minor version>.<incremental version>-<qualifier>

例如:版本“1.3.5”由一个主版本1,一个次版本3,和一个增量版本5。而一个版本“5”只有主版本5,没有次版本和增量版本。限定版本用来标识里程碑构建:alpha和beta发布,限定版本通过连字符与主版本,次版本或增量版本隔离。例如,版本“1.3-beta-01”有一个主版本1,次版本3,和一个限定版本“beta-01”。

当你想要在你的POM中使用版本界限的时候,保持你的版本号与标准一致十分重要。在版本界限,允许你声明一个带有版本界限的依赖,只有你遵循标准的时候该功能才被支持。因为Maven根据本节中介绍的版本号格式来对版本进行排序。

如果你的版本号与格式<主版本>.<次版本>.<增量版本>-<限定版本>相匹配,它就能被正确的比较;“1.2.3”将被评价成是一个比“1.0.2”更新的构件,这种比较基于主版本,次版本,和增量版本的数值。如果你的版本发布号没有符合本节介绍的标准,那么你的版本号只会根据字符串被比较;“1.0.1b”和“1.2.0b”会使用字符串比较。

1. 版本构建号

       我们还需要对版本号的限定版本进行排序。以版本号“1.2.3-alpha-2”和“1.2.3-alpha-10”为例,这里“alpha-2”对应了第二次alpha构建,而“alpha-10”对应了第十次alpha构建。虽然“alpha-10”应该被认为是比“alpha-2”更新的构建,但Maven排序的结果是“alpha-10”比“alpha-2”更旧,问题的原因就是我们刚才讨论的Maven处理版本号的方式。

Maven会将限定版本后面的数字认作一个构建版本。换句话说,这里限定版本是“alpha”,而构建版本是2。虽然Maven被设计成将构建版本和限定版本分离,但目前这种解析还是失效的。因此,“alpha-2”和“alpha-10”是使用字符串进行比较的,而根据字母和数字“alpha-10”在“alpha-2”前面。要避开这种限制,你需要对你的限定版本使用一些技巧。如果你使用“alpha-02”和“alpha-10”,这个问题就消除了,一旦Maven能正确的解析版本构建号之后,这种工作方式也还是能用。

2. SNAPSHOT版本

       Maven版本可以包含一个字符串字面量来表示项目正处于活动的开发状态。如果一个版本包含字符串“SNAPSHOT”,Maven就会在安装或发布这个组件的时候将该符号展开为一个日期和时间值,转换为UTC(协调世界时)。例如,如果你的项目有个版本为“1.0-SNAPSHOT”并且你将这个项目的构件部署到了一个Maven仓库,如果你在UTC2008年2月7号下午11:08部署了这个版本,Maven就会将这个版本展开成“1.0-20080207-230803-1”。换句话说,当你发布一个snapshot,你没有发布一个软件模块,你只是发布了一个特定时间的快照版本。

那么为什么要使用这种方式呢?SNAPSHOT版本在项目活动的开发过程中使用。如果你的项目依赖的一个组件正处于开发过程中,你可以依赖于一个SNAPSHOT版本,在你运行构建的时候Maven会定期的从仓库下载最新的snapshot。类似的,如果你系统的下一个发布版本是“1.4”你的项目需要拥有一个“1.4-SNAPSHOT”的版本,之后它被正式发布。

作为一个默认设置,Maven不会从远程仓库检查SNAPSHOT版本,要依赖于SNAPSHOT版本,用户必须在POM中使用repositorypluginRepository元素显式的开启下载snapshot的功能。

当发布一个项目的时候,你需要解析所有对SNAPSHOT版本的依赖至正式发布的版本。如果一个项目依赖于SNAPSHOT,那么这个依赖很不稳定,它随时可能变化。发布到非snapshot的Maven仓库(如http://repo1.maven.org/maven2)的构件不能依赖于任何SNAPSHOT版本,因为Maven的超级POM对于中央仓库关闭了snapshot。SNAPSHOT版本只用于开发过程。

3. LATEST 和 RELEASE 版本

      当你依赖于一个插件或一个依赖,你可以使用特殊的版本值LATEST或者RELEASE。LATEST是指某个特定构件最新的发布版或者快照版(snapshot),最近被部署到某个特定仓库的构件。RELEASE是指仓库中最后的一个非快照版本。总得来说,设计软件去依赖于一个构件的不明确的版本,并不是一个好的实践。如果你处于软件开发过程中,你可能想要使用RELEASE或者LATEST,这么做十分方便,你也不用为每次一个第三方类库新版本的发布而去更新你配置的版本号。但当你发布软件的时候,你总是应该确定你的项目依赖于某个特定的版本,以减少构建的不确定性,免得被其它不受你控制的软件版本影响。如果无论如何你都要使用LATEST和RELEASE,那么要小心使用。

Maven 2.0.9之后,Maven在超级POM中锁住了一些通用及核心Maven插件的版本号,以将某个特定版本Maven的核心Maven插件组标准化。这个变化在Maven 2.0.9中被引入,为Maven构建带来了稳定性和重现性。在Maven 2.0.9之前,Maven会自动将核心插件更新至LATEST版本。这种行为导致了很多奇怪现象,因为新版本的插件可能会有一些bug,甚至是行为变更,这往往使得原来的构建失败。当Maven自动更新核心插件的时候,我们就不能保证构建的重现性,因为插件随时都可能从中央仓库更新至一个新的版本。从Maven 2.0.9开始,Maven从根本上锁住了一组核心插件的版本。非核心插件,或者说没有在超级POM中指定版本的插件仍然会使用LATEST版本去从仓库获取构件。由于这个原因,你在构件中使用任何一个自定义非核心插件的时候,都应该显式的指定版本号。

posted @ 2009-05-14 10:00 不需要解释 阅读(3676) | 评论 (0)编辑 收藏

Often times you will have 3rd party JARs that you need to put in your local repository for use in your builds. The JARs must be placed in the local repository in the correct place in order for it to be correctly picked up by Maven. To make this easier, and less error prone, we have provide a goal in the install plug-in which should make this relatively painless. To install a JAR in the local repository use the following command:

mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
    -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>

for example:

mvn install:install-file -Dfile=jazzy-core-0.5.2.jar -DgroupId=jazzy-core  -DartifactId=jazzy -Dversion=0.5.2 -Dpackaging=jar

posted @ 2009-05-06 11:06 不需要解释 阅读(113) | 评论 (0)编辑 收藏

ResultSet 接口提供用于从当前行获取列值的获取 方法(getBoolean、getLong 等)。可以使用列的索引编号或列的名称获取值。一般情况下,使用列索引较为高效。列从 1 开始编号。为了获得最大的可移植性,应该按从左到右的顺序读取每行中的结果集列,每列只能读取一次。
对于获取方法,JDBC 驱动程序尝试将底层数据转换为在获取方法中指定的 Java 类型,并返回适当的 Java 值。JDBC 规范有一个表,显示允许的从 SQL 类型到 ResultSet 获取方法所使用的 Java 类型的映射关系。

注意: JDBC 驱动程序目前不支持 SQL Server sqlvariant 数据类型。如果使用查询从包含 sqlvariant 数据类型列的表中检索数据,则会发生异常。

Getter 方法转换

基于 SQL Server 2005 的数据类型,以下图表包含 SQLServerResultSet 类的 get<Type> 方法的 JDBC 驱动程序转换图,以及 SQLServerCallableStatement 类的 get<Type> 方法支持的转换。

JDBC 驱动程序的 getter 方法支持三种基本的转换类别:

  • Non-Lossy (x) :在 getter 类型等于或小于基础服务器类型的情况下执行转换。例如,对基础服务器的十进制数列调用 getBigDecimal 时,无需进行转换。
  • Converted (y) :从数字服务器类型到 Java 语言类型的转换,此时的转换为常规转换,并遵循 Java 语言转换规则。对于这些转换,总是直接截取有效位数(从不四舍五入),而溢出则按目标类型取模处理,以较小者为准。例如,对包含“1.9999”的基础十进制数列调用 getInt 将返回“1”;如果基础十进制数值为“3000000000”,则 int 值将溢出为“-1294967296”。
  • Data Dependent (z) :从基础字符类型转换到数字类型时,要求字符类型所包含的值可转换成数字类型。不执行其他转换。如果值对于 getter 类型过大,则该值无效。例如,如果对包含“53”的 varchar(50) 列调用 getInt ,则该值作为 int 返回;但如果基础值为“xyz”或“3000000000”,则发生错误。

posted @ 2009-05-05 16:07 不需要解释 阅读(449) | 评论 (0)编辑 收藏

最近研究了一下opencms的locale,总结如下:
(1)opencms 在启动的时候会设置locale为en。
(2)可以在folder上面设置locale,如果本级locale没有设置使用父级的,如果还是为空使用en。

posted @ 2008-03-17 22:25 不需要解释 阅读(415) | 评论 (1)编辑 收藏

 

本年度的学习主要围绕当前的工作主题和自己比较有兴趣的内容制定此计划。

2008-2

1opencms

进一步熟悉jsp170规范,比较opencms7比当前我们使用的opencms6.2.3的改进。熟悉opencms user manager,权限,模块开发,site development

2)整理,编写opencms的开发文档

2008-3

1sso,分析当前sso的现状。了解使用sso带来的好处。配置和使用cas做练习。

2weblogic ssl配置。

3openssl的使用。

2008-4

1jetspeed 学习jsr268规范,了解和jsr168的区别和改动。进一步分析jetspeedsso实现。porelet定制实现。

2)研究mvnforum的配置和使用。

3)企业门户研究,研究企业门户应该满足那些功能,怎么更好的实现。

2008-5

1webservice,分析和学习apachewebservice实现。

2etom模型的sid规范。

2008-6

1osgi,学习osgi的规范,在设计中应该怎么使用osgi思想。

2008-7

1jpa的使用和实现。


 

posted @ 2008-03-08 22:30 不需要解释 阅读(243) | 评论 (0)编辑 收藏

     摘要:  # # Based upon the NCSA server configuration files originally by Rob McCool. # # This is the main Apache server configuration file.  It contains the # configuration directives that give...  阅读全文

posted @ 2007-11-22 10:35 不需要解释 阅读(1307) | 评论 (0)编辑 收藏

通常,在一个设计良好的Web应用中,都会综合使用Servlet和JSP技术。Servlet控制业务流转,JSP则负责业务处理结果的显示。此时,将大量用到重定向技术。

        重定向技术可以分为两类,一类是客户端重定向,一类是服务器端重定向。客户端重定向可以通过设置特定的HTTP头,或者写JavaScript脚本实现。本文主要探讨服务器端重定向技术的实现。


服务器端的重定向相关类
        服务器端的重定向技术涉及到javax.servlet.ServletContext、javax.servlet.RequestDispatcher、javax.servlet.http.ServletRequest、javax.servlet.http.ServletResponse等几个接口。
服务器端的重定向方式
        服务器端的重定向可以有两种方式,一是使用HttpServletResponse的sendRedirect()方法,一是使用RequestDispatcher的forward()方法。下面对这两种方式进行介绍。

HttpServletResponse.sendRedirect()方法

HttpServletResponse接口定义了可用于转向的sendRedirect()方法。代码如下:

public void sendRedirect(java.lang.String location)throws java.io.IOException


        这个方法将响应定向到参数location指定的、新的URL。location可以是一个绝对的URL,如response.sendRedirect("http://java.sun.com")也可以使用相对的URL。如果location以“/”开头,则容器认为相对于当前Web应用的根,否则,容器将解析为相对于当前请求的URL。这种重定向的方法,将导致客户端浏览器的请求URL跳转。从浏览器中的地址栏中可以看到新的URL地址,作用类似于上面设置HTTP响应头信息的实现。

RequestDispatcher.forward()方法

        RequestDispatcher是一个Web资源的包装器,可以用来把当前request传递到该资源,或者把新的资源包括到当前响应中。RequestDispatcher接口中定义了两个方法,参见如下代码:

public interface RequestDispatcher {
void forward(ServletRequest request, ServletResponse response);
void include(ServletRequest request, ServletResponse response);
}

        forward()方法将当前的request和response重定向到该RequestDispacher指定的资源。这在实际项目中大量使用,因为完成一个业务操作往往需要跨越多个步骤,每一步骤完成相应的处理后,转向到下一个步骤。比如,通常业务处理在Servlet中处理,处理的结果转向到一个JSP页面进行显示。这样看起来类似于Servlet链的功能,但是还有一些区别。一个RequestDispatcher对象可以把请求发送到任意一个服务器资源,而不仅仅是另外一个Servlet。 include()方法将把Request Dispatcher资源的输出包含到当前输出中。

        注意,只有在尚未向客户端输出响应时才可以调用forward()方法,如果页面缓存不为空,在重定向前将自动清除缓存。否则将抛出一个IllegalStateException异常。


如何得到RequestDispatcher


        有三种方法可以得到Request Dispatcher对象。

1.javax.servlet. ServletRequest的getRequestDispatcher(String path)方法,其中path可以是相对路径,但不能越出当前Servlet上下文。如果path以“/”开头,则解析为相对于当前上下文的根。

2.javax.servlet. ServletContext的getRequestDispatcher(String path)方法,其中path必须以“/”开头,路径相对于当前的Servlet上下文。可以调用ServletContext的getContext(String uripath)得到另一个Servlet上下文,并可以转向到外部上下文的一个服务器资源链接。

3.使用javax.servlet. ServletContext的getNamedDispatcher(String name)得到名为name的一个Web资源,包括Servlet和JSP页面。这个资源的名字在Web应用部署描述文件web.xml中指定。

这三种方法的使用有细微的差别。比如,下面是一个应用的配置文件web.xml:

<?xml version="1.0" ?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>org. javaresearch.redirecttest.ServletOne</servlet-class>
</servlet>
<servlet>
<servlet-name>SecondServlet</servlet-name>
<servlet-class>org.javaresearch. redirecttest.ServletTwo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/servlet/firstservlet/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>SecondServlet</servlet-name>
<url-pattern>/servlet/secondservlet/</url-pattern>
</servlet-mapping>
</web-app>

 

        其中定义了两个Servlet,名字分别为FirstServlet和SecondServlet,对应的类分别为org.javaresearch. redirecttest.ServletOne和org. javaresearch.redirecttest.ServletTwo。可以在浏览器中通过类似于下面的链接访问:

http://localhost:8080/servlet/firstservlet/

使用1中方法,例如在firstservlet可以写入下面的代码:

RequestDispatcher rd = request.getRequestDispatcher("secondservlet");
rd.forward(request, response);

 

此时控制权将转向到第二个Servlet了。

使用2中的方法,可以从Servlet Context中得到RequestDispatcher代码如下:

RequestDispatcher rd = getServletContext().getRequest
Dispatcher("/servlet/secondservlet");
rd.forward(request, response);

 

使用3中的方法,从上面的web. xml配置文件可以看到定义了两个Servlet,名字分别为FirstServlet和SecondServlet,所以可以得到命名的Dispatcher:

RequestDispatcher rd = getServletContext().getNamedDispatcher("SecondServlet");
rd.forward(request, response);

 

这样也可以重定向到SecondServlet了。


JSP页面中的重定向


        JSP在解析后编译为一个Servlet运行,所以在JSP中也可以使用上面的重定向代码,并且,JSP还提供了更便利的操作,如下:

<jsp:forward page= "nextpage.jsp"/>

 

        JSP页面执行到这儿,将终止当前的处理,将控制权交由nextpage.jsp。


如何选择


        RequestDispatcher.forward()方法和HttpServletResponse.sendRedirect()方法的区别是:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用Request Dispatcher.forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用HttpServletResponse.sendRequest()方法


posted @ 2007-11-16 10:40 不需要解释 阅读(812) | 评论 (0)编辑 收藏

我实话告诉你们,我可是身经百战了.bbs我见的多了,哪个版我没灌过?你们要知道, 一塌糊 涂的triangle,PIC,SEX版,那比你们不知道厉害到哪里去了,我在那谈笑风声.你 们有一好就是无论在哪个版,什么话题都灌,但是灌来灌去的问题,都too simple, sometimes naive!你 们懂不懂呀?啊?所以说灌水啊,关键是要提高自己的知识水平.你 们啊,不要总想着弄个大坑,然后灌上十大,再把我羞辱一番……你们啊,naive!你们这 样灌是不行地!~那你問我支持 不支持灌水,我說支持,我常來這裡灌,你說支持不支持?