Archive

Archive for September, 2005

google的登陆验证码

September 30th, 2005

一直没注意过,google登陆时是没有验证码的,今天无意在某个地方看到有人提到这个才试了下,Gmail, orkut,google group都没有,输入用户名和密码就能登进去。

为了安全,防止有人对用户名及密码进行穷举,绝大部分网站在登陆时要求输入一个自动产生的验证码。保证了安全,但给用户的体验极差。

google 没有这么做,但并不是说他放弃了安全,如果你连续输错几次用户名或者密码,就会出现一个图片的验证码要求你输入才能继续登陆。具体几次不知道,几次都不一 样,可能是我没很正规试吧。很细微的地方,google注意到了。很简单的方法,即保证了用户体验,又保证了安全。

现在太多地方有验证码 了,体验最深的是sohu的chinaren校友录。留言都要验证码,明明是已经登陆的用户,每次发言还这么麻烦,造成大家来到都懒得说话,人气一天比一 天低。最初我甚至以为这是张总要结束校友录的有意之举。后来发现很多论坛也采用这种方法,大概是防止使用bot发广告吧。但给广大用户带来的困扰比广告还 大。比这更好的解决办法多的是,不愿意想而已。

如果用心,可能会发现更多的此类的细节。可能,这就是google的成功之道。背后隐隐有种凉凉的感觉。

我就是未分类

信息检索方式会再次改变吗?

September 28th, 2005

10年前,yahoo成立,他的崛起靠的是分类搜索。7年前,google诞生了,又是搜索,不过是关键字搜索。

7年以后的今天,出现了wiki,tag,rss等一系列的名词,人们又开始对信息的检索做出一些尝试。

这是迫不得已的事,信息量日益庞大,现有的信息检索方式已经慢慢的跟不上需要。这主要有以下几个问题。

第 一个是随着信息量的增大,关键字检索开始变的复杂了。单纯靠几个关键字已经很难得到满意的答案。一个关键字往往会出现无数符合条件的搜索结果,普通的关键 字在某些时候已经不足以把信息圈定在足够小的范围。有时候为了得到足够精确的结果,我们不得不绞尽脑汁的思考到底用什么关键字,怎么组合。相信随着互联网 信息的日益增加,这种矛盾会更突出。这时候不得不借助分类搜索,虽然可能层次多些,但比起有些时候绞尽脑汁的想关键字,这种成本更小。

另 外一个问题是信息同质化。天下新闻一大抄,抄袭遍地皆是。基本上一个关键字输进去,几页都是相同的结果,只是出自网站不同,上面的广告不一样.这种搜索结 果极大影响了信息检索结果的价值。网络上信息的严重重复,我们需要借助合理的检索方式进行过滤,可是几乎现在所有的搜索引擎都做不到这一点。

还有个问题是对搜索结果的排序上。搜索引擎很难判断各网页上的信息对用户提供的几个关键字的可用度的高低。它只知道符合不符合,但是在都符合的情况下,哪个会更符合?这很难有个标准。「从许多优质的网页链接过来的网页,必定还是优质网页」,真的是这样吗?虽然有些时候,这个标准很好的对检索结果划定了重要性,可是在信息量十分巨大的时候,一个网页网页对一个检索它的关键字是否优质显得越来越重要。单纯靠这个标准来对检索结果的排序已经越来越满足不了需要,是引入更细化的标准的时候了。

以 上还只是写比较明显的问题,几乎所有用户都有对搜索引擎大发脾气的体验,现有的信息检索方式已经显露出疲态。虽然改变信息的组织方式是最根本的解决办法, 但成本太高。语义网的概念提了那么久,真正的进展,或者只有近期的“tag”能勉强算一点。对现有的检索方式的改进,至少在近期内是不错的解决办法。

下班了,500里加急赶这么点,有时间再说啦。

我就是未分类

web.xml的元素

September 16th, 2005

首先注意 xml是大小写敏感的

1、 web.xml的头和根元素
必须以一个XML头开始。这个头声明可以使用的XML版本并给出文件的字符编码。
DOCYTPE声明必须立即出现在此头之后。这个声明告诉服务器适用的servlet规范的版本(如2.2或2.3)并指定管理此文件其余部分内容的语法的DTD(Document Type Definition,文档类型定义)。
所有部署描述符文件的顶层(根)元素为web-app。
例(红色部分是可选项):
———————————————————————————
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE web-app PUBLIC “-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN” “http://java.sun.com/dtd/web-app_2_3.dtd”>
<web-app id=”WebApp”>
</web-app>
———————————————————————————
2、元素
以下元素几乎都是可选项,不过要注意它们是有顺序的。虽然有些服务器要求宽松些,但某些服务器会拒绝执行顺序不正确的web应用。所以还是按顺序写好

———————————————————————————
· icon icon元素指出IDE和GUI工具用来表示Web应用的一个和两个图像文件的位置。
· display-name display-name元素提供GUI工具可能会用来标记这个特定的Web应用的一个名称。
· description description元素给出与此有关的说明性文本。
· context-param context-param元素声明应用范围内的初始化参数。
· filter 过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。
· filter-mapping 一旦命名了一个过滤器,就要利用filter-mapping元素把它与一个或多个servlet或JSP页面相关联。
· listener servlet API的版本2.3增加了对事件监听程序的支持,事件监听程序在建立、修改和删除会话或servlet环境时得到通知。Listener元素指出事件监听程序类。
· servlet 在向servlet或JSP页面制定初始化参数或定制URL时,必须首先命名servlet或JSP页面。Servlet元素就是用来完成此项任务的。
· servlet-mapping服务器一般为servlet提供一个缺省的URL:http://host/webAppPrefix/servlet /ServletName。但是,常常会更改这个URL,以便servlet可以访问初始化参数或更容易地处理相对URL。在更改缺省URL时,使用 servlet-mapping元素。
·session-config如果某个会话在一定时间内未被访问,服务器可以抛弃它以节省内存。可通过使 用HttpSession的setMaxInactiveInterval方法明确设置单个会话对象的超时值,或者可利用session-config元 素制定缺省超时值。
· mime-mapping 如果Web应用具有想到特殊的文件,希望能保证给他们分配特定的MIME类型,则mime-mapping元素提供这种保证。
· welcom-file-list welcome-file-list元素指示服务器在收到引用一个目录名而不是文件名的URL时,使用哪个文件。
· error-page error-page元素使得在返回特定HTTP状态代码时,或者特定类型的异常被抛出时,能够制定将要显示的页面。
· taglib taglib元素对标记库描述符文件(Tag Libraryu Descriptor file)指定别名。此功能使你能够更改TLD文件的位置,而不用编辑使用这些文件的JSP页面。
· resource-env-ref resource-env-ref元素声明与资源相关的一个管理对象。
· resource-ref resource-ref元素声明一个资源工厂使用的外部资源。
· security-constraint security-constraint元素制定应该保护的URL。它与login-config元素联合使用
· login-config 用login-config元素来指定服务器应该怎样给试图访问受保护页面的用户授权。它与sercurity-constraint元素联合使用。
· security-role security-role元素给出安全角色的一个列表,这些角色将出现在servlet元素内的security-role-ref元素的role-name子元素中。分别地声明角色可使高级IDE处理安全信息更为容易。
· env-entry env-entry元素声明Web应用的环境项。
· ejb-ref ejb-ref元素声明一个EJB的主目录的引用。
· ejb-local-ref ejb-local-ref元素声明一个EJB的本地主目录的应用。

我就是未分类

在web项目中实现计划任务

September 15th, 2005

java.util.Timer和java.util.TimerTask可以很好的实现计划任务

timer = new java.util.Timer(true);
timer.schedule(new myTask(), 0, 50000);

以上语句实现每50(50000毫秒)秒执行一次myTask(); myTask 继承TimerTask类。

另外还要求随着web项目的生命周期运行,web项目启动时此任务的定时器启动,web项目停止时任务的定时器也停止,所以必须实现
javax.servlet.ServletContextListener
接口。接口有两个有两个方法
contextInitialized(ServletContextEvent event)
contextDestroyed(ServletContextEvent event)
把任务定时器的启动和结束分别放到两个方法的实现中。代码如下:
——————————————————————————
package dowei.task;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.util.*;

public class ContextListener implements ServletContextListener {

private java.util.Timer timer = null;

public void contextInitialized(ServletContextEvent event) {
timer = new java.util.Timer(true);
event.getServletContext().log(“启动定时器”);
//定时执行任务
timer.schedule(new myTask(event.getServletContext()), 0, 50000);
}

public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
event.getServletContext().log(“停止定时器”);
}
}
—————————————————————————

这样就实现了定时器随web项目的启动和停止。然后写具体的任务方法:myTask类。
myTask类继承java.util.TimerTask。我在上面调用时为了方便记录执行状态,在构造myTask时传入了参数ServletContextEvent event,所以必须重载构造函数。
为了防止一次运行还为结束下一次调度有开始了,所以设置一个变量isRunning
doTask()方法中写具体的操作
——————————————————————————
package dowei.task;

import java.util.TimerTask;
import javax.servlet.ServletContext;

public class myTask extends TimerTask {
private static boolean isRunning = false;

public myTask(ServletContext context) {
this.context = context;
}
public void run() {
if (!isRunning)  {
isRunning = true;
context.log(“开始执行任务”);
createFile();
isRunning = false;
context.log(“任务执行结束”);
}
}else
{
context.log(“上次任务还未结束”);
}
}

private void doTask(){
//需要执行的动作
}
}
————————————————————————-

最后要把作为监听类部署。修改web.xlm,在添加<web-app></web-app> 标签中间添加<listener>标签,代码如下(红色部分换成适当的包名):
————————————————————————-
<listener>
<listener-class>dowei.task.ContextListener</listener-class>
</listener>
—————————————————————–

我就是未分类

为sina 的blog叫好

September 9th, 2005

三大门户中,新浪无疑是最前卫,wiki,网摘,rss订阅,现在是blog,新东西一个不少,不大张旗鼓宣传,不代表没有。

不过这次不 同,blog还2.0,还请各位大佬到场,陈彤不是说别说web2.0是在炒作吗?现在看来,blog也带个2.0更像炒作。不过,炒作归炒作,有 sina这个巨头来搀和,blog的前途瞬间明亮了很多。只是不知道sina对blog的投入,是不是代表陈彤对blog的投入?那,陈彤模式的sina 新闻会怎么样?不过有一点可以肯定:人多势众的苗帮信徒不用每天都去体育版抢第一苗了——直接去帮主blog就是了。

sina的进入,可 以让更多的人了解blog,加入到信息提供的行列。今天还跟朋友说起信息获取成本的问题,信息量少,别人专程来看一次获得的少,自然成本高。虽然rss方 便了获取者来你这获取信息的成本,但还是高。但sina来了,必将带来大量的用户,也就是大量的信息发布者。提供的信息越多,获取的成本越低(怎么觉得像 软件,边际成本几乎为零)。gougou,blogline,rss,tag,还有各种聚合察看的软件,都只是通过方便获取信息来减少成本,但这个成本的 减少在现阶段远不如增加信息量减少的多。随着信息量的增加,以前打开gougou智能获得少量的信息,以后则将越来越多,人们将愿意依靠blog获取信 息,

为这点,我们要感谢sina,感谢陈彤。

ps:不小心看到了“www.gougou.com总裁李学凌“几个字,突然觉得,新闻的天确实要变了。

我就是未分类