初初接触Tag的,少有不激动的。就因为它既熟悉又陌生,既简单又复杂。乍看之下觉得两下子能弄一个Tag系统出来,再想想又觉得深不可测。可挖掘的东西似乎还有很多很多......
基于Tag的RSS订阅 是个好主意。不过首先的确让人想到spam。Tag同样存在信息过载的问题。最原始的提高搜索引擎排名的方法,已经太多人用过了:在meta的keyword里面贴一堆无关的关键字:二手、超女、手机、新闻、性感、美女、贴图、援交、笔记本...... 如何保证不在SPAM Blog上面乱贴Tag?
限制Tag数量?没用,辛苦点多copy几个副本就完了。
技术手段限制?说到底还是成本,技术手段有高低之分,有成本大小区别的。除非对Spam特别不介意的,否则多数用户狂热过一段之后,要看有效信息的,最终还是回到少数几个“权威”这里。这些“权威”不是特定个人就是公司,前者就不是基于Tag了,后者提供的Tag,其实还是Web 1.0的SP,再加一个Tag。
当然没必要为了2.0而2.0,我们关心如何更有效获取自己想要的有效信息,尽量过滤无关信息(尤其是Spam)。
Tag最大的特点,我以为在“交流”二字。自己贴了个自我感觉良好的傻冒Tag,完了还想看看谁跟我一样傻... 这个将成为Tag存在的最重要的意义之一。
最有机会整合Tag功能,也是最需要整合Tag功能的网站,是那些比较重视用户之间交互的网站,例如BSP、交友圈等等
由一个Document对象,转换成String,这个方法我几年前写的了:
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
DOMSource source = new DOMSource(inputDoc);
StringWriter out = new StringWriter();
StreamResult result = new StreamResult(out);
transformer.transform(source, result);
out.flush();
return out.toString(); 一直用是没有问题的,直到今天在resin上面运行,发现一个奇怪的现象,写入数据库的中文都变成了类似&#XXXX; 这种编码。更加奇怪的是我用应用程序的方式运行,是正常没问题的。我猜想是resin在某个地方做了设置,在网上搜索又一时找不到好方法,不想为了一个小问题转用jdom之类的包。
研究了一下,找到了解决的办法。在Transformer对象创建之后加一句:
transformer.setOutputProperty("encoding","GBK"); 问题解决了。具体的机制还没有时间去了解,有空再回头研究吧。
历来对framework的感觉是“够用就可以”的原则。这次想用struts,主要希望jsp里面的逻辑代码不要太多。但代价当然是Action类会多起来。完全用Struts的设计,也不是不可以,但是复杂度提高的同时,换了一个不会用struts的人来做,要花太多时间讲解。折中了一下,决定只用Struts的Action,并且主要使用DispatchAction,这样Action的类不用太多。
至于Error和Message,暂时还是自己定义,Tag Library虽然是个好东西,但是让页面更加复杂了(个人感觉),暂时不用。
用Ant在JDK1.5下运行java任务时,如果涉及jaxp的DOM,会抛出异常
javax.xml.parsers.FactoryConfigurationError
解决方法:
把ant的lib下面的xercesImpl.jar放到你的classpath里面。
应该是ANT对应的classloader出了问题,感觉哪里是硬编码了必须拿这个xerces的实现类。
看到一篇文章批评google reader,说界面用了客户端的脚本变得有趣,但功能太简单。
也许是实话,但界面实在太重要了,有时甚至比功能重要。好的界面,起码第一眼吸引人,有多留一会的欲望。
写了个SlideShow的原型,利用image的complete,判断图片是否调用完全,调用完全以后才显示,否则是LOADING的图片,还考虑的是
1.每调用一张图片之前先出现loading的过程,
2.调用图片中不会因为网速和图片过大而未显示全,直接跳到下一张,要按顺序一张一张播放.
3.第一次 播放的时候,因为调用图片会慢一点,重新播放是调用CACHE里的,速度就快了
代码如下:
var currCount=0
var stop=false
function getimg(n){
preImages= new Image()
preImages.src = yourImages[n]
}
function autoPlay(){
if(currCount!=yourImages.length){
document.getElementById("img").style.display="none"
getimg(currCount)
document.getElementById("loadingbar").style.display="block"
setTimeout("loadingImg()",1000)
}
else{
currCount=0;
if (confirm("播放完毕,是否重新播放?")){
return autoPlay()
}
}
}
function loadingImg(){
if (preImages.complete) {
document.getElementById("img").src="
http://blog.donews.com/images/blog_donews_com/dodo/49134/o_pix.gif"
document.getElementById("loadingbar").style.display="none"
document.getElementById("img").style.display="block"
document.getElementById("img").src=yourImages[currCount]
currCount=currCount+1
}
setTimeout("autoPlay()",4000)
}
//-->
</script>
</head>
<body bgcolor="#FFFFFF">
<div style="width:700px">
<center>
<a href="javascript:autoPlay()">自动播放</a><br><br>
<div id="loadingbar" style="display:none;"><img src=http://blog.donews.com/images/blog_donews_com/dodo/49134/o_loading.gif></div>
<img id="img" src=http://blog.donews.com/images/blog_donews_com/dodo/49134/o_pix.gif >
<center>
</div>
</body>
</html>
文章来源:
http://blog.itpub.net/post/7956/49057
cron 是一个可以用来根据时间、日期、月份、星期的组合来调度对重复任务的执行的守护进程。
cron 假定系统持续运行。如果当某任务被调度时系统不在运行,该任务就不会被执行。要调度一次性的任务,请参阅第 37.2 节。
要使用 cron 服务,你必须安装了 vixie-cron RPM 软件包,而且必须在运行 crond 服务。要判定该软件包是否已安装,使用 rpm -q vixie-cron 命令。要判定该服务是否在运行,使用 /sbin/service crond status 命令。
37.1.1. 配置 cron 任务
cron 的主配置文件是 /etc/crontab,它包括下面几行:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly |
前四行是用来配置 cron 任务运行环境的变量。SHELL 变量的值告诉系统要使用哪个 shell 环境(在这个例子里是 bash shell);PATH 变量定义用来执行命令的路径。cron 任务的输出被邮寄给 MAILTO 变量定义的用户名。如果 MAILTO 变量被定义为空白字符串(MAILTO=""),电子邮件就不会被寄出。HOME 变量可以用来设置在执行命令或脚本时使用的主目录。
/etc/crontab 文件中的每一行都代表一项任务,它的格式是:
minute hour day month dayofweek command |
minute — 分钟,从 0 到 59 之间的任何整数
hour — 小时,从 0 到 23 之间的任何整数
day — 日期,从 1 到 31 之间的任何整数(如果指定了月份,必须是该月份的有效日期)
month — 月份,从 1 到 12 之间的任何整数(或使用月份的英文简写如 jan、feb 等等)
dayofweek — 星期,从 0 到 7 之间的任何整数,这里的 0 或 7 代表星期日(或使用星期的英文简写如 sun、mon 等等)
command — 要执行的命令(命令可以是 ls /proc >> /tmp/proc 之类的命令,也可以是执行你自行编写的脚本的命令。)
在以上任何值中,星号(*)可以用来代表所有有效的值。譬如,月份值中的星号意味着在满足其它制约条件后每月都执行该命令。
整数间的短线(-)指定一个整数范围。譬如,1-4 意味着整数 1、2、3、4。
用逗号(,)隔开的一系列值指定一个列表。譬如,3, 4, 6, 8 标明这四个指定的整数。
正斜线(/)可以用来指定间隔频率。在范围后加上 /<integer> 意味着在范围内可以跳过 integer。譬如,0-59/2 可以用来在分钟字段定义每两分钟。间隔频率值还可以和星号一起使用。例如,*/3 的值可以用在月份字段中表示每三个月运行一次任务。
开头为井号(#)的行是注释,不会被处理。
如你在 /etc/crontab 文件中所见,它使用 run-parts 脚本来执行 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly 目录中的脚本,这些脚本被相应地每小时、每日、每周、或每月执行。这些目录中的文件应该是 shell 脚本。
如果某 cron 任务需要根据调度来执行,而不是每小时、每日、每周、或每月地执行,它可以被添加到 /etc/cron.d 目录中。该目录中的所有文件使用和 /etc/crontab 中一样的语法。范例请参见例 37-1。
# record the memory usage of the system every monday
# at 3:30AM in the file /tmp/meminfo
30 3 * * mon cat /proc/meminfo >> /tmp/meminfo
# run custom script the first day of every month at 4:10AM
10 4 1 * * /root/scripts/backup.sh |
例 37-1. crontab 的例子
根用户以外的用户可以使用 crontab 工具来配置 cron 任务。所有用户定义的 crontab 都被保存在 /var/spool/cron 目录中,并使用创建它们的用户身份来执行。要以某用户身份创建一个 crontab 项目,登录为该用户,然后键入 crontab -e 命令,使用由 VISUAL 或 EDITOR 环境变量指定的编辑器来编辑该用户的 crontab。该文件使用的格式和 /etc/crontab 相同。当对 crontab 所做的改变被保存后,该 crontab 文件就会根据该用户名被保存,并写入文件 /var/spool/cron/username 中。
cron 守护进程每分钟都检查 /etc/crontab 文件、etc/cron.d/ 目录、以及 /var/spool/cron 目录中的改变。如果发现了改变,它们就会被载入内存。这样,当某个 crontab 文件改变后就不必重新启动守护进程了。
37.1.2. 控制对 cron 的使用
/etc/cron.allow 和 /etc/cron.deny 文件被用来限制对 cron 的使用。这两个使用控制文件的格式都是每行一个用户。两个文件都不允许空格。如果使用控制文件被修改了,cron 守护进程(crond)不必被重启。使用控制文件在每次用户添加或删除一项 cron 任务时都会被读取。
无论使用控制文件中的规定如何,根用户都总是可以使用 cron。
如果 cron.allow 文件存在,只有其中列出的用户才被允许使用 cron,并且 cron.deny 文件会被忽略。
如果 cron.allow 文件不存在,所有在 cron.deny 中列出的用户都被禁止使用 cron。
37.1.3. 启动和停止服务
要启动 cron 服务,使用 /sbin/service crond start 命令。要停止该服务,使用 /sbin/service crond stop 命令。推荐你在引导时启动该服务。
文章来源:
http://blog.itpub.net/post/7956/48958
一台旧机装了好多次都不成功,google一下原来因为RedHat对旧款CD-ROM的驱动支持很差。只好从硬盘装了。
用了Grub for Dos也是不成,后来用第一张碟上的一个iso映象烧了张启动盘,启动之后再选择从硬盘安装。OK!搞定了。
文章来源:
http://blog.itpub.net/post/7956/48897
从硬盘安装Fedora Core 4
由于我的IBM240没有光驱,所以安装Fedora Core 4我选择硬盘安装,但Fedora Core 4跟redhat 9.0的硬盘安装方法有所不同,redhat不需要要安装其他软件,只要把光盘的某个目录拷贝出,然后dos下启动就可以安装,但到了Fedora Core 已经没了类似的目录,所以硬盘安装模式有点变化。
1:首先当然是下载Fedora Core 4的光盘镜像了,很多地方可以下载,这里提供一个
ftp://mirror.switch.ch/mirror/fedor...-i386-disc1.iso
ftp://mirror.switch.ch/mirror/fedor...-i386-disc2.iso
ftp://mirror.switch.ch/mirror/fedor...-i386-disc3.iso
ftp://mirror.switch.ch/mirror/fedor...-i386-disc4.iso
2:把CD1的isolinux目录解压到c:下
3:下载Grub For Dos
ftp://ftp2.linuxeden.com/tools/grub_for_dos-0.2.0pre13.tar.gz
解压把里面的文件和文件夹剪切出,放在解压后目录的外边.此时的路径为:C:boot
4:修改boot.ini
最后面添加这么一行
C:grldr="GRUB For Dos
保存退出
5:修改C:bootgrubmenu.lst
添加这么几行
title Install-Fedora Core 4
kernel (hd0,0)/isolinux/vmlinuz
initrd (hd0,0)/isolinux/initrd.img
注意:我的C盘这里是hd0,0表示第一个ide硬盘第一个分区,大家可根据自己的需要修改硬盘参数
ok,重新启动系统,会看到GRUB For Dos 菜单,选择后,在安装媒介选择硬盘安装就行。
文章来源:
http://blog.itpub.net/post/7956/48838
想在HTML里面通过DOM用JavaScript操作,弄了半天无法将弄好的style节点插入document里面去。后来用排除法,惊奇地发现把style改个别的名字就部出错了。
查了一下手册,原来样式表的处理是用专门的方法做的,它并不是一个通用的普通Element,Document提供了方法createStyleSheet()来生成一个StyleSheet对象,这个对象再有addRule等其它方法来操作。
文章来源:
http://blog.itpub.net/post/7956/48826