高山流水
msgbartop
动之则分,静之则合,无过不及,随曲就伸。
msgbarbottom

27 四 07 向我开炮吧:小钟脑子里“有用”的Web2.0

看了超平老师的《“有用”才是硬道理》,忍不住想说说自己这么一段时间以来对于Web2.0的一些想法。
首先,绝对不能为了新技术而技术,技术不是用来炫耀的,如果新技术不能更进一步地给用户带来方便,那么新技术的应用将适得其反。在这一点上,我强烈同意超平老师的“替代性”论断。
其次,从2.0出现,我就在想,哪些具体的技术是可以应用到现行的图书馆系统中,并且真正能够给图书馆和用户带来美妙改变。目前,小钟认为有以下几个地方:
不过,在此之前,我需要阐述一个观念:我们要把自己当成商家,把资源当成产品,把读者当成顾客,我们所努力去做的,就是尽全力推销我们的产品!Web2.0的出现,只不过是给了我们更多的推销手段。
第一当然是RSS订阅,做图书馆的新闻订阅吗?不,那没有多少意义。要用RSS来做新书通报,针对不同学科和兴趣的读者,生成个性化的RSS文件,供读者订阅。举个最简单的例子,比如,小钟关心图书馆学期刊的状况,那么通过我定制的RSS文件,我可以很快了解到:哦,今天新的一期《大学图书馆学报》上架了。
第二是WIKI,WIKI的好处在于集众人之智慧,去完善一篇文档。那么,对于图书馆的帮助文档中心来说,采用WIKI模式来实现,是最完美的解决方案了!例如对于CNKI的使用指南,通过馆员、读者共同的完善,我想,这个使用指南,绝对是最经典的。
第三是AJAX,AJAX最大的用处在于异步传输和在客户端修改文档。应用AJAX,可以做的事情非常的多,举个最有用的例子,我们的OPAC系统,往往是很难更改的,但应用AJAX,我们可以在客户端(即用户的浏览器)上,通过分析当前文档结构,获取相关参数(如题名,ISBN号),然后以异步传输的方式将参数传至专门的服务器,由服务器端实现各类资源(比如随书光盘、电子图书、电子期刊、甚至GOOGLE等)的检索,检索完成后再以XML或者文本或者脚本数组的形式返回给客户端,最后由客户端无刷新修改当前文档,创建新的文档内容,让读者在OPAC当前页面中,可以获取到与其检索相关的更多资源——这就是Web2.0时代的资源整合。
而AJAX可以做的事情远远不止这些,比如要实现随时随地的解决用户的困惑,给用户输入前提示,针对用户检索词给用户检索建议,都可以通过AJAX,得意完美的实现。
第四是TAGGING,针对图书馆的各类资源,都可以开放TAGGING功能,并且提供检索入口,这都是很容易实现的模块。当然,如果要在OPAC中针对书目记录开放TAGGING功能,则需要AJAX的帮忙。
第五是推送,推送用到的不一定是2.0的技术,却体现了2.0的精髓,结合读者的借阅信息、学科信息、阅读兴趣等等,通过EMAIL、网站短消息、手机短信等方式,把个性化的服务内容主动推送到读者手中。
第六是强调用户体验,做一些更美观的页面,通过CSS,针对用户的操作行为,给出反应,比如改变一下背景颜色等等,告诉用户你知道他在做什么。这样的改变,虽然小,很多馆可能不屑于去做,但实际上这才是2.0的精髓。
第七才提到BLOG,说实话,小钟认为图书馆架设BLOG纯粹是在扯淡!当然,事情没有绝对,如果BLOG用的方向对,比如用在学科专家服务上,可能会形成图书馆的重要特色资源,而如果仅仅是泛泛而用,小钟绝对会毫不犹豫的批判!所以,这第七点,小钟不看好,因此杀掉!
以上六点,是小钟认为的当前Web2.0可以给图书馆带来积极改变的地方。小钟乃后学晚辈,本科专业课成绩更是惨不忍睹,一家之言,欢迎补充,更欢迎向我开炮!

回万二:
虽然blog可以增加互动,或者说由馆员来写博客提升图书馆人气,但小钟还是认为,这样的营销手段效果是有的。

首先,读者不一定鸟你的博客,即使像斋主那样的大家来操刀,也仅仅是一部分读者有兴趣读上一读,笑上一笑而已。

其次,现在博客已经非常普遍了,对这个东西感兴趣的读者,基本上都有博客了,要说服他们换个地方,其实并不容易。比方说吧,偶现在搞个博客网站,功能绝对不比新浪的差,邀请大家过来,大家会过来吗?不会,因为麻烦。

最后,如果架设博客,不管是馆员的也好,读者的也好,都需要人气才能延续的,不要小看管理、维护、造势一个博客所需要耗费的人力物力,图书馆目前做得起吗?其实我们看到的更多是把站点搭建起来后,就由它自生自灭了。

其实,回到最根本的一点,读者的需求,他们向图书馆要的只是更好的找到他们所需要的资源,而做好资源的揭示,才是图书馆的根本职责。当然,如果有些馆有钱没处花,吃饱没事干,可以搞搞,小钟可以去捧捧场。

以合适的身份,做合适的事情,这是这个世界进步的基础。

回薄学多毛:
由馆员去开博客,对图书馆的服务进行宣传,看似个好点子,但实际上会起到一个弱化图书馆网站的功能。有什么东西我们认为放在馆员博客上会比放在图书馆网站上更有宣传效果的吗?如果有,那么我们应该首先考虑,我们的网站是不是要做一些改变?
其实,我也想塔个博客,主要面向教师服务,让他们通过博客与学生进行更多的互动,有助于教学相长,并且由其博客,可以为图书馆形成一定的资源,但最终还是不了了之。
回后山草地人
恩,后山草地人讲得也有道理,但小钟的本意是在于,很多东西,其实并不一定要用blog才是最好的实现方式,或者说,blog本身不具备完美的替代性。比如您说的台交大的实践,小钟就认为,这个评论功能,以ajax方式直接写入OPAC更有效!这样,对读者而言就是一套系统,而不是另外一套系统了。要知道,读者如果在检索图书的时候看到图书的评价,会很高兴,但把检索图书和图书评价独立开来,没有联系,检索图书的时候看不到评价,看书评的时候看不到图书的记录,就不是很妙了——这个通过blog方式搭建起来的书评和web上其他书评网站又有多大的区别呢?

Tags: , , , , , ,

24 十一 06 可以轻松部署在图书馆网站上的几个web2.0应用

  还是做回小兵,写点自己熟悉的东西比较好些:)


  web2.0已经火了好长一段时间了,图书馆也提了library2.0等概念,论文也春笋般冒出来,可惜真正部署了2.0应用的图书馆网站还很少。的确,以图书馆的技术水平,要吃透这个东西,还需要一段时间的。但小钟是个拿来主义者,几个简单的web2.0应用部署,还是很简单的,所以在这里提提小钟已经做的,正在做的,准备做的一点web2.0应用。

 


  首先明确一点,在小钟的理解中,web2.0的应用不一定要用到2.0的技术,但一定要用到2.0的理念,所以,以下提及的很多是基于成熟的技术开发的应用,而不是所谓最炫的技术。



  1、Rss订阅服务


 


  Rss订阅应该是当前图书馆网站最好部署的应用。其应用范围可以在新闻、新书通告、数据库更新、电子期刊更新等方面。

 


  部署的方式比较简单,首先我们需要一个生成标准Rss文件的程序,然后通过每天读取一次现有数据表的数据,或者在原有更新数据程序中加入触发器,即可实现Rss文件的生成。

 

  Rss文件规范及生成的程序可以参考以下小钟的几篇文章:

   

    RSS 2.0 Specification 1:What is RSS?

    RSS 2.0 Specification 2:Sample files

    实现RSS订阅的两个简单方式

    一个生成RSS的JavaBean



  另外值得一提的是有些数据库比如Engineering Village
2
,提供了基于关键词的Rss订阅服务,这其实给我们做资源整合提供了一个入口。图书馆可以写一个基于某些关键词的读写各个数据库Rss数据的程序,并进行查重整合,给读者提供服务——这可是做到元数据级的整合了。可惜这段时间没空,没来得及写。


 

  2、博客

 

  现在成熟的博客系统已经很多了,图书馆要部署一个,实在是件很轻松的事情。不过,最好能够进行改造,起码将用户模块和图书馆网站整合起来,然后是和网站的反馈模块整合起来,哈哈。

 

  3、WIKI

 

  一看到WIKI,我第一反应就是,我们网站的帮助中心一定要用这种模式来重新开发,用户用,用户建,没有谁能比用户更懂得他们需要什么样的帮助,也没有人能比用户更早的发现问题。

 

  部署WIKI也是很轻松的事情,但是我们最起码也需要整合一下用户模块,可不能让用户登陆了网站之后,还要登陆一次WIKI啊。

 

  4、即时通讯

 

  以前不就是个聊天室嘛,不过2.0时代,披上了许多或小巧或华丽的外衣——比如新浪的woocall——这个很容易部署,只要在页面内嵌入一个脚本文件,不过它的logo和样式我都不喜欢,而且用户整合这一块实在是有些困难,最后玩玩算了,但自己又没时间搞一个(鄙视自己一下….)。其实这个创意不错,在图书馆网站上部署一个,任何浏览图书馆网站任意页面的人,都可以一起聊天,不过这样倒有点信息无序和失控的可能。

 

  新浪woocall的申请和脚本文件可以在这里找到:

 

  http://woocall.sina.com.cn/

 

  大家可以看看,玩一下。当然,有时间的时候,自己开发一个更好啦。

 

   5、Ajax用户体验啦~

 

  这个就比较细节了,比如颜色渐变,输入前提示,检索过程提示等等,现在小钟在二次开发的期刊导航系统,里面就用到了输入前提示功能,大致效果大家可以看一下Google
Suggest
。等过几天系统完工后,开放源程序给大家看看,呵呵。

 

  Ajax如果不通过XMLHttpRequest和服务器端通讯,就是我们常用的Javascript,对于一些颜色渐变的效果,比如,新闻列表中,读者已经阅读的新闻一种颜色,未阅读的新闻一种颜色,又比如用户鼠标指向一个数据库时,浮现一个悦目的图层,告诉读者更多的信息;对于用户的检索行为,在用户执行检索的零结果页面中,适当的浮现图层,根据读者的检索词,给出相关的检索词建议…..这类的细节,改造起来,并不是很困难的事情。

 

  6、Tagging

 

  Tagging是个很有趣的东西,只是我现在还没有想好在图书馆的哪一块入口——大概在数据库的分类方面?还是在电子期刊的描述方面?其实用户的检索行为是一个很好的标记过程,可惜我们都浪费掉了~

 

  我想最好应用Tagging的是有自建图片库的学校,呵呵,好像我们也有一个,让用户对图片进行描述和标记——在这里再结合WIKI的理念,所有用户都可以更新这一标记,呵呵,完美啊~

 

  
Tagging也要用到Ajax(我上一个类目是不是分得不合适),因为要追踪并记录用户行为。

 

  

  
大概目前来说,我能做的web2.0的事情也差不多上面那几个了,对于用户自定义模块,拖曳,OPEN
SOURCE….等等,估计要等下一年(两年?)的图书馆网站2.0了。

 


  真的希望能多点时间搞点新鲜玩意,而又不会有太大的工作负担,唉,喜新厌旧的人啊~

 

   吃饭……

  

 

 

Tags: , , , , , ,

25 九 06 一个生成RSS的JavaBean


//新闻rss

//jnuzyx.2006.09.20

//需要JDOM1.0

//需要数据库链接类

package rss;

import java.io.FileOutputStream;

import java.util.Date;

import java.text.SimpleDateFormat;

import org.jdom.Attribute;

import org.jdom.Document;

import org.jdom.Element;

import org.jdom.output.XMLOutputter;

import org.jdom.output.Format;

import org.jdom.CDATA;

import java.sql.*;

import *.*Pool;

public class news

{

//

public
static void rssnews(String dir) throws Exception {

Element root = new Element(”rss”);

root.setAttribute(new Attribute(”version”, “2.0″));

Document doc = new
Document(root);
//将根元素植入

Element channel = new Element(”channel”);

root.addContent(channel);

Element Ntitle = new Element(”title”);

Ntitle.addContent(”暨南大学图书馆新闻订阅”);

channel.addContent(Ntitle);

Element Nlink = new Element(”link”);

Nlink.addContent(”http://lib.jnu.edu.cn/“);

channel.addContent(Nlink);

Element Ndescription = new Element(”description”);

Ndescription.addContent(”暨南大学图书馆新闻订阅”);

channel.addContent(Ndescription);

Element Nlanguage = new Element(”language”);

Nlanguage.addContent(”zh-cn”);

channel.addContent(Nlanguage);

Element Ncopyright = new Element(”copyright”);

Ncopyright.addContent(”Copyright 2006 暨南大学图书馆. All Rights
Reserved.”);

channel.addContent(Ncopyright);

Element NwebMaster = new Element(”webMaster”);

NwebMaster.addContent(”暨南大学图书馆”);

channel.addContent(NwebMaster);

Element NpubDate = new Element(”pubDate”);

java.util.Date now=new java.util.Date();

NpubDate.addContent(FormatRssDate(now));

channel.addContent(NpubDate);

Element NlastBuildDate = new Element(”lastBuildDate”);

NlastBuildDate.addContent(FormatRssDate(now));

channel.addContent(NlastBuildDate);

Element Ngenerator = new Element(”generator”);

Ngenerator.addContent(”JNULRSS 1.0(beta)”);

channel.addContent(Ngenerator);

//读入数据库数据

//*.*Pool pool = new ****;

ResultSet rs = pool.getRs(”$sql 语句$”);

//增加ITEM

String strContent;

while(rs.next()){

Element student = new
Element(”item”);//生成元素
student.addContent(new
Element(”title”).addContent(rs.getString(”*”)));

student.addContent(new Element(”link”).addContent(”$url$”)));

student.addContent(new
Element(”author”).addContent(”jnuzyx”));

student.addContent(new
Element(”category”).addContent(”暨南大学图书馆新闻订阅”));

student.addContent(new
Element(”pubdate”).addContent(FormatRssDate($date$)));

if(rs.getString(”$content$”)!=null)

{

strContent =
rs.getString(”$content$”).substring(0, 320)+”….”;

}

else

{

strContent = “请点击查看全文….”;

}

student.addContent(new Element(”description”).addContent(new
CDATA(strContent)));

channel.addContent(student);

}

//关闭

if(rs!=null)

{

rs.close();

}

rs = null;

//输出

try{

XMLOutputter XMLOut = new
XMLOutputter(Format.getPrettyFormat());

XMLOut.output(doc, new FileOutputStream(dir + “news.xml”));

}catch (java.io.IOException e) {

e.printStackTrace();

}

}

public
static String FormatRssDate(Date dt) {

SimpleDateFormat RssFmtDt=new SimpleDateFormat(”EEE, dd MM yyyy
HH:mm:ss z”);

return RssFmtDt.format(dt).toString();

}

}

Tags: , , ,

12 九 06 实现RSS订阅的两个简单方式

其实,RSS阅读器从服务器获取的就是一个XML文件,所以我们可以通过提供静态XML文件或封装了XML数据的HTTP流方式提供服务。
对于第一种,我想可能是大多数图书馆最方便实施的,只要更新一下原有的信息发布程序(例如新闻系统),在提交新数据的时候,同时更新相应的XML文件,即可实现订阅服务。
然后,这一种方式不适合实现一些更多需求的功能,比如,某读者定义了他只需要的一部分订阅服务,那么我们的推送应该根据该读者的预定义,只提供其感兴趣的内容,这时,就需要以第二种方式,当读者请求的时候,再从数据库中获取相关信息实时发送给他。
现在有很多相关的辅助工具或程序可以很好的利用,ROME是用JAVA写的开源程序,遵循Apache
Software License
,运行环境需要J2SE 1.4+和JDOM
1.0
,它能转换并解析当前的所有聚合格式,当前版本为0.8Beta。
下载 ,教程API文档

Tags: ,

09 九 06 RSS 2.0 Specification 2:Sample files

<?xml version=”1.0″ ?>

<!– RSS 版本 –>

<rss version=”2.0″>

<channel>

<!–必须的频道节点:title,定义频道名称–>

<title>暨南大学图书馆新闻订阅</title>

<!–必须的频道节点:link,响应频道的网站URL–>

<link>http://lib.jnu.edu.cn/</link>

<!–必须的频道节点:description,频道的描述–>

<description>暨南大学图书馆新闻订阅.</description>

<!–必须频道节点结束–>

<!–以下为可选的频道节点–>

<!–语种:language–>

<language>zh-cn</language>

<!–版权声明:copyright–>

<copyright>Copyright 2006
暨南大学图书馆. All Rights Reserved.</copyright>

<!–负责人EMAIL:managingEditor–>

<managingEditor>jnuzyx@126.com</managingEditor>

<!–技术人员EMAIL:webMaster–>

<webMaster>jnuzyx@126.com</webMaster>

<!–发布时间:pubDate–>

<pubDate>Fri, 08 Sep 2006
18:00:00 GMT+8</pubDate>

<!–最后更新时间:lastBuildDate–>

<lastBuildDate>Fri, 08
Sep 2006 20:00:00 GMT+8</lastBuildDate>

<!–频道所属的分类:category,可多个,要遵循与ITEM级category元素相同的规则,所以一般在此不标注,而在ITEM级标注分类–>

<category>新闻</category>

<!–生成频道的程序名称:generator–>

<generator>JNULRSS
1.0(beta)</generator>

<!–指向RSS格式解释文档的URL:docs,用以向需要了解更多的人介绍RSS的格式情况–>

<docs>http://blogs.law.harvard.edu/tech/rss</docs>

<!–可以忽略的时段:skipHours,0-24–>

<skipHours>0</skipHours>

<!–可以忽略的天:skipDays,星期–>

<skipDays>Sunday</skipDays>

<!–cache生命周期:ttl,分–>

<ttl>60</ttl>

<!–频道的统计图片地址:rating,未用过–>

<rating></rating>

<!–指定rssCloud接口的WEB服务:cloud,rssCloud接口可以用HTTP-POST,XML-RPC或SOAP1.1实现,目的是允许通知注册为cloud的进程频道被更新,从而实现一个轻量级的发布订阅协议,这个还不是很明白:(–>

<cloud domain=”rpc.sys.com”
port=”80″ path=”/RPC2″ registerProcedure=”myCloud.rssPleaseNotify”
protocol=”xml-rpc” />

<!–频道LOGO:image,jpg,png,gif格式,3个必选子节点及3个可选子节点–>

<!–image节点开始–>

<image>

<!–image节点必选子节点–>

<!–LOGO文件的URL地址:url–>

<url>http://lib.jnu.edu.cn/rss/img/logo.jpg</url>

<!–LOGO标题:title,相当于alt属性,应与频道的title节点值相同–>

<title>暨南大学图书馆新闻订阅</title>

<!–LOGO的链接:link,应与频道的link节点值相同–>

<link>http://lib.jnu.edu.cn/</link>

<!–image节点可选子节点–>

<!–LOGO的宽度:width,默认为88,最大为144,单位为像素–>

<width>88</width>

<!–LOGO的高度:height,默认为31,最大为400,单位为像素–>

<height>31</height>

<!–LOGO描述:description,未用过–>

<description></description>

</image>

<!–image节点结束–>

<!–频道可嵌入的textInput表单,包含4个可选子节点,可以用它提供一个搜索引擎输入框,或让读者提供反馈信息,不常用。–>

<!–textInput节点开始–>

<textInput>

<!–表单的提交按钮的标签:title–>

<title>搜索</title>

<!–表单的文本输入区的描述:description–>

<description>百度一下</description>

<!–表单的文本输入区的名称:name–>

<name>关键词</name>

<!–表单提交的URL
:link–>

<link>http://www.baidu.com/s</link>

</textInput>

<!–textInput节点结束–>

<!–可选频道节点结束–>

<!–必须的,可重用的频道节点:item,频道的项目,一个条目可表示一条记录–>

<item>

<!–所有子节点都是可选的,但应该包含title,description子节点–>

<!–标题:title–>

<title>置顶新闻:9月14日学而优书店现场选书通知</title>

<!–记录的URL:link–>

<link>http://lib.jnu.edu.cn/show.jsp?ID=720</link>

<!–描述:description,可以通过使用CDATA部件,告诉解析器忽略描述内容中的HTML解释–>

<description><![CDATA[<a
href="http://lib.jnu.edu.cn/show.jsp?ID=720">查看详细报道</a>]]></description>

<!–作者的EMAIL:author–>

<author>ocat@jnu.edu.cn</author>

<!–分类:category,可以是一个或多个–>

<category>通知</category>

<!–评论地址:comments–>

<comments>http://lib.jnu.edu.cn/feedback/showfeedback.jsp?sysname=新闻系统&amp;itemid=720</comments>

<!–附加的媒体对象:enclosure,有三个必须属性,url属性,length指出它的字节大小,type属性指出它的标准MIME类型–>

<!–<enclosure
url=”http://lib.jnu.edu.cn/upfile/vpn.wmv
length=”6742080″ type=”audio/mpeg” />–>

<!–rss来源频道名称:source,从item的title衍生而来,有一个必须包含的属性url,链接到XML序列化源,作用是提高连接的声望–>

<source
url=”http://lib.jnu.edu.cn/rss/news.xml”>jnul
news</source>

<!–item发布时间:pubDate–>

<pubDate>Fri,
08 Sep 2006 20:00:00 GMT+8</pubDate>

<!–唯一确定item的字符串:guid–>

<guid>http://lib.jnu.edu.cn/show.jsp?ID=720</guid>

</item>

<item>

<title>好消息:西文全文电子期刊统一检索系统正式推出使用</title>

<description>西文电子期刊导航</description>

</item>

<!–item结束–>

</channel>

</rss>

Tags: ,