见:“育儿”目标下的日记:一年半前买的陈健翔主编的3本育儿书现在还几乎没有看http://www.learndiary.com/disDiaryContentAction.do?searchDiaryID=1673&goalID=1673&naviStr=a10a246
我认为,时期家庭教育对塑造孩子一生的习惯和性格等基本素质很重要。而这些是需要家长学习的。
这套书立足于信息时代的0~学龄前儿童的家庭教育。其它什么事都可以延后,而孩子是一天天长大的,再不学习这套书,以后就有可能补不回来了。所以,我下定决心,一定要用一个月左右时间把这套书读一遍。
这三本书是:《父母是孩子的同龄人》、《天才是一种状态》、《成功了我会更努力》。现代家庭的教育财富、陈建翔主编。-北京:北京出版社,2001
ISBN 7-200-04408-3
作者:littlebat
健康谚语(转帖)(你抄我抄大家抄,我也来抄一份)
转自:http://www.qingdaonews.com/content/2006-02/28/content_6103414.htm
今天在2006年2期的四川《党课》上读到一篇《健康谚语》的文章,觉得很好,就上网用百度(中文知识的搜索用它最好了)搜了一下,发现太多了。我不禁哑然失笑,真可谓:你抄我抄大家抄。我也来抄一份,事先声明:个人收藏。要是哪天查侵权的事还请这篇文章的原作者手下留情哟:)
健康谚语
青岛新闻网 2006-02-28 02:58:00
【 现有新闻评论】
健康谚语
作者李恒有顾代明
好人健康,恶人命短
鲁迅说:“无论古今,谁都知道,一个人如果一味地放纵自己,十恶不赦,就是天天喝三鞭酒也无效。”民间有健康谚语“好人健康,恶人短命”、“心怀鬼胎,苦闷短命”,说的就是这个道理。
&n
bsp; 希望延年益寿,必须把品德修养放在首位,正如宋人邵雍所说:“始知行义修仁者,便是延年益寿人。”
美国科学家调查研究的结果,与上述的说法不谋而合。美国密执安州大学对2700多人进行长达14年的跟踪调查,发现善恶影响人的健康和寿命。
他们研究的课题是“社会关系如何影响人的死亡率”。研究发现,一个乐于助人和与他人相处融洽的人,预期寿命显著延长,在男性中尤其如此;相反,心怀恶意、损人利己,且和他人相处不融洽的人,死亡率比正常人高1.5倍;那些性格孤僻,行为异常的人,死亡率比正常人要高。科学家解释说,施舍善心,能够激发受施者的友爱和感激之情,而施者从中获得内心温暖,能缓解在日常生活中常有的焦虑。
经常行善还有益于增强人体免疫系统。在哈佛大学的一次实验中,受试者看了一部纪录美国妇女终生在加尔各答救助病人和残疾人的片子。受试者被故事情节感动了,随后进行的受试者唾液分析表明,他们免疫蛋白的数量比看记录片前增加了,而这种抗体能防止呼吸道感染。
与此相反,一个心脏病常发作又对他人怀有敌意的人,心脏冠状动脉堵塞的情况就大;视别人为敌人的人,愤怒往往一触即发,暴跳如雷,易使血压升高,甚至酿成高血压。至于贪污受贿和盗窃之类的人,因做贼心虚,易失眠、烦躁、精神压力很大,这种人的寿命比大多数人短。
做好事,行善心,不是一件困难的事,每个人都可以采用这种变法来促进自己的身心健康。
先睡心,后睡眼
每个人都有过失眠的经历,有的人失眠会通过狠狠闭眼的方法强迫自己入睡。然而事实证明,这种方法是行不通的。失眠起于“心”,许多人失眠是由于学习、工作压力大、心理矛盾冲突多,不会调节情绪。所以,只有首先“睡心”,然后睡眼,才能进入真正的睡眠状态。
睡眠的过程,睡眼是标,睡心是本。“先睡心,后睡眼”是历代养生家十分推崇的睡眠方法。
唐代大医学家孙思邈是我国医学史上的老寿星,活了一百多岁。孙思邈十分讲究睡眠养生,他在《千金要方·卷二十七·道林养性》中说:“凡眠,先卧心,后卧眼。”“卧”字本意为伏在矮小的桌子上,这里引申为躺在床上。
《老老恒言·安寝》中说:“心欲求寐则寐愈难。盖醒与寐交界关头,断非意想所及。”意思是说你越想尽快入睡,越是睡不着。只有先放松情绪,消除一切思虑,即首先“睡心”,才能真正入睡。
清初著名养生学家石成金在《长生秘诀》中曾说:“凡睡下就要一心安慰思睡,不可又复想其他事务,只‘睡心’,即是极妙睡功。”
睡前摒除一切喜怒忧思,烦恼杂念,放松精神,做到怡淡虚静,内心安宁,静静地躺着,使大脑处于轻松状态,合上双眼,自然就会酣然入睡。事实上,心不睡的人是无法安眠的。要想心睡,先要心静。达到心静的最简单的方法就是静坐。
“静坐”是针对失眠者的脑神经“开关”不能在短时间内关上,即不能很快入睡的特点,所采用的一种过度方法。失眠者利用“静坐”达到“入境”状态,头脑中不要想任何事。这种状态能使脑神经各种开关分期、分批地关上,而且关上的神经开关短时间内不会打开。达到这种入静状态一般需要30—45分钟,这段时间又称为“亚睡眠状态”。
进入亚睡眠状态,睡意自然就产生了,而且睡意很浓,还伴随着呵欠不断、睁不开眼等现象。这时马上躺到床上去,不消几分钟,就会睡着了。
“先睡心,后睡眼”的“心”指的是大脑,如果你的脑神经细胞不能进入睡眠状态,尽管你的眼闭得严严的,还是睡不着。“静坐”的作用在于帮助你的脑细胞进入睡前准备阶段,达到“入静”状态,然后入睡。
希望这一招对众多失眠者有所帮助,让你们的睡眠尽早达到正常良好的状态。
吃面多喝汤,免得开药方
很多人吃面只吃面,而把汤倒掉,这是不对的。倒不是舍不得那一碗清面汤,而是面汤里含有大量的营养。健康谚语说,“吃面多喝汤,免得开药方”,充分说明了面汤的价值。
面粉中含有大量的维生素,在酸性环境中,维生素B1是比较稳定的,但加碱做面时,这种稳定性受到了破坏。煮面条时,大量的营养素会流失到面汤中,一般可损失49%的维生素B1、57%的维生素B2和22%的维生素B3。煮饺子时,高温也会使大量的营养素流失。
维生素B1又叫硫胺素,别名为抗神经炎素,是一种水溶性维生素。它能促进碳水化合物和脂肪的代谢,在能量代谢中起辅酶作用;能提供神经组织所需要的能量,防止神经组织萎缩和退化,预防和治疗脚气病;还能维持正常的食欲,保持肌肉的弹性和健康的精神状态。
维生素B2又叫核黄素,在体内参与糖、蛋白质、脂肪的代谢,还与维持视网膜的正常机能有关。此外,它还是脂肪转化为能量不可缺少的营养素,多用于治疗口角溃疡、唇炎、结膜炎、阴囊炎及脂溢性皮炎等疾病。
维生素B3又叫尼克酸、烟酰胺、烟酸。它能溶于水,在人体中可利用色胺酸合成,是合成性激素不可缺少的物质。它还能促进血液循环,降低血压、胆固醇和甘油三酯,减轻胃肠障碍等。
可见,面粉中大量流失到汤里的维生素B1、B2、B3对人体非常重要,在吃完面条和饺子之后应该把面汤喝下去,这样可以很好地避免面食中营养的损失。所谓“原汤化原食”,就充分说明了这一点。
早喝盐汤如参汤,晚喝盐汤如砒霜
盐是人体不可缺少的成分,可是怎样补充盐分,这是有讲究的。健康谚语说得好:“早喝盐汤如参汤,晚喝盐汤如砒霜。”
出汗较多,体内部分钠离子、钾离子丢失,出现低钠血症或低钾血症状,这就要补充钠和钾。一般的方法就是多饮用淡盐水和含钾较高的食品或者饮料。可是,不少人都是在出汗之后,有的甚至出现疲乏无力、口干、眩晕、肌肉疼痛、手足麻木等症状时,才想起喝淡盐开水。如此则会加重肾脏负担,往往起不到应有的作用。
养成主动补钠的好习惯,在大量出汗前或天热时,清晨起床就喝些淡盐开水,就能使出汗后体内纳含量保持平衡,以维护正常的新陈代谢,稳定细胞内外渗透压,调节体内酸碱平衡。
研究发现,早晨饮淡盐水能够被机体迅速吸收,起到稀释血液、增加血流量,预防脑血栓、动脉硬化的作用。
因此,“早喝盐汤如参汤”,也是预防习惯性便秘及养生保健的好办法。如果晚上喝盐汤,就可能出现食盐超过人体的需要,因此就有了“晚喝盐汤如砒霜”的说法。
晨吃三片姜,如喝人参汤
生姜是一种最常见的佐料,也是一种中药材。《论语·乡党》中就记载了孔子平生“不撤姜食”,可见在2500年前,人们就知道吃生姜对身体有益。
中医书上说,生姜能益脾开胃,止呕,温经散寒,解头疼、发热,调理痼冷沉寒、霍乱腹痛、吐泻之疾等。在中国,各地流传着关于生姜的健康谚语:“早吃三片姜,如喝人参汤”、“一早不吃姜,身体不安康”、“冬吃萝卜夏吃姜,不用医生开药方”、“早晨吃片姜,赛过人参鹿茸汤”、“冬天一碗姜糖汤,去风去寒赛仙方”、“冬有生姜,不怕风霜”等。
姜味辛、气微温、气味轻、无毒,四季不缺。生拌煎炒做汤均可放姜,所以说姜是饭桌上不可缺少的佐料之一。由于生姜辣味特殊,不少人望而却步,殊不知生姜有很好的保健作用。
生姜所含的阿司匹林(乙酰水杨酸)对降血脂、降血压、预防心肌梗塞有特殊作用;姜所含的姜酚具有较强的利胆作用,可防治胆囊炎、胆石症;姜还可以调节前列腺机能———在控制前列腺素血液黏稠度等方面具有重要作用。
最新医学科学研究还显示,经常食用生姜能够除去“体锈”———老年人的体表尤其是脸部的褐斑,俗称“老年斑”,这是体内自由基作用于各脏器形成类似的体锈,如果自由基过度活跃,可致人早衰。
营养学家研究发现,生姜所含的姜辣素和挥发油能够刺激神经系统,激发人的灵感。生姜素和挥发油能够稀释血液,血液因而流动更加畅通,给大脑提供更多氧气。因此,生姜能够使人思路开阔,产生创造力。专家指出,从事新闻、艺术、写作的人,应该多吃生姜,这对他们的创作很有帮助。
虽说生姜对人体有益,但是不可多食,因为生姜辛辣,凡阴虚内热、热病、疮疡、痔疾者忌之。实际上,即使无内热之人,如果过量久食,也会蕴热生病。
我们常说,“冬吃萝卜夏吃姜,不用医生开药方”,理由是:夏天炎热,人们习惯贪凉,喜服寒凉之品,夜间又感受夜寒,易产生暑湿,影响脾胃。因此夏季有些人胃口会下降,少食厌腻。因此,喝一点姜汤,做菜时多加点姜,不仅能够散寒祛暑,还可以治疗因吃不洁食物而引起的腹痛、腹泻、呕吐等。
女子三日不断藕,男子三日不断姜
健康谚语“鲜藕止血,熟藕补血”、“包饭用荷叶,清香又解热”、“女子三日不断
藕,男子三日不断姜”等,都说明藕对人的健康很重要。
现代医学研究表明,荷叶含鞣质、维生素C及荷叶碱。藕节含鞣酸、天门冬酰胺、淀粉、维生素C等。莲子含淀粉、棉子糖、天门、冬素、蜜三糖等,是营养丰富的滋补食品,有助睡眠。所以有句谚语说:“若要不失眠,煮粥加白莲。”
中医学认为,莲子味甘涩、性平、入心、脾、肾经,具有补脾益肾、养心安身之功,可以收敛浮越之心阳,使人宁静而容易入睡,被《神农本草经》列为上品。
无论生吃、熟食,藕都有医疗作用。《本草经书》中说,藕“生者甘寒,能凉血止血、除热清胃,主消散淤血、吐血、口鼻出血、产后血闷,治金疮伤折及止热渴、霍乱、烦闷、解酒等;熟者甘温,能健脾开胃、益血补心、消食、止泻、生肌,久服令人心欢止怒”。
生藕性寒,甘凉入胃可消瘀止血,清热止渴,开胃。妇女产后生冷皆忌,只有生藕不忌。民间用鲜藕洗净切片,加白糖拌食,有清热解暑的功效。如将鲜藕压榨取汁,清热生津的功效更强。《温病条辨》中载有治疗急性热病、发热口渴的名方“五汁饮”,其中就有鲜藕汁。饮用鲜藕汁对于流鼻血、吐血、痰中带血以及产后出血,均有凉血止血的功效。
熟藕性温,有养胃滋阴功效,藕节含有丰富的单宁酸,有收缩血管作用,可止血治疗吐血、咳血、尿血、便血、子宫出血等症。鲜藕熟食无祛瘀清热功效,有滋阴、补心、益胃的作用。脾胃虚弱者宜食用熟藕。
藕生熟都可食用,也可入药,是生活中不可多得的菜肴和健身补体佳品。尤其是女性,更应“三日不断藕”。
中午睡觉好,犹如捡个宝
人除了在晚上睡觉外,中午的睡眠也是不可少的。关于睡眠的谚语如“中午一小觉,神仙也不要”、“中午睡觉好,犹如捡个宝”、“吃罢中饭睡一觉,健健康康活到老”等。
研究发现,上午9点、中午1点和下午5点是人的三个睡眠高峰点。由此可见,除了夜间睡眠外,在白天,还有三个需要睡眠的睡眠高峰点。特别是中午吃完饭之后,特别想睡上一小觉。
可是,白天的睡眠已经被繁忙的工作、紧张的情绪所代替;或被酒茶之类具有提神、兴奋作用的饮料所消除。只是一到这几个时间点,我们会感到有少许的睡意。这就是人为什么白天也要打几次盹的原因所在。
上午9点和下午5点的睡眠点很快就会过去,因为那时候人们忙着工作,很容易转移睡眠注意力。可是中午人们会停下工作,休息一下。这时候我们不妨小睡一会儿。事实证明,午睡能使大脑和身体各个系统都得到放松与休息,更有利于下午、晚上的工作、学习,而且也是夏秋季节预防暑热的积极措施。
有资料证明,在一些有午睡习惯的国家和地区的人群中,冠心病的发病率要比其它国家不睡午觉的人群低得多。这与午睡能使心脏系统舒缓,并使人体紧张度降低有关。午睡在昼长夜短的夏天尤其重要。夏天天气炎热,即使到了晚上,气温仍然很高,难以入睡,要等到下半夜气温稍稍降低之后才能睡着。而第二天四五点钟天已大亮,气温又逐渐升高,又睡不着了。从而导致睡眠不足。
在人的第二个睡眠点,即下午1点左右,这时候肝脏需要休息,大脑反应迟钝,人会感到疲劳。所以许多人一到中午就昏昏沉沉、毫无精神。如果这时候睡上一小觉,让大脑和身体其它器官都休息一下,补充一下午消耗的能量,对提高下午工作效率和身体健康都有好处。
同时,一天中温度最高的时候是下午2点左右,如果这时工作过于劳累,容易中暑。特别是那些在户外工作的建筑工人、农民、野外作业者,应该避开这段最热的一个小时,稍事休息,这对工作和身体都是有利的。
所以,无论是体力劳动者还是脑力劳动者,最好在中午睡一觉,养精蓄锐,以最好的状态迎接下午的工作。
饮了空腹茶,疾病身上爬
毫无疑问,喝茶有许多好处,可是如果喝茶的时间和方法不对,不仅不会促进健康,还会适得其反。例如有些老年人嗜茶如瘾,起床第一件事就是喝杯热茶。起床便空腹喝茶是一种不良习惯。因为茶叶中含有咖啡碱成分,空腹喝茶,腹中无物,茶水直入脘腹,有如“引狼入室”。如果肠道所吸收的咖啡碱过多,会产生性肾上腺皮质功能亢进症状,出现心慌、尿频等不良反应。时间久了,还会影响人体对维生素B1的吸收。所以自古以来就有“不饮空心茶”之说。那么怎样正确喝茶
呢?这里有几句民间的“歌诀”:空腹饮茶心里慌,隔夜饮茶脾胃伤;过量饮茶人瘦黄,淡茶温饮保健康。下面就对这首“歌诀”加以“解读”。1.不可空腹或饭后饮茶
空腹饮茶会稀释胃液,降低消化功能,容易引起胃炎。空腹状态,吸收率高,茶叶中某些不良成分就会被大量吸收到血液里,因而引起头晕、心慌、手脚无力、心神恍惚等症状,这就是人们所谓的“醉茶”。
有人喜欢饭后立即饮茶,这也是不良习惯。研究发现:茶叶中含有大量单宁酸,如果饭后马上饮茶,食物中的蛋白质、铁质与单宁酸很容易发生凝集。特别是老年人,因肠胃功能下降,对这些凝固物难以消化吸收,势必会减少对蛋白质、铁质的吸收。资料表明,饭后饮茶,人体对食物中铁的吸收量至少会降低50%,时间久了,不仅降低了人体对食物营养的吸收,影响器官的多种生理功能,还容易引发缺铁性贫血。
饮茶以现泡现饮为好,茶水放久了,不仅会失去维生素等营养成分,而且易发馊变质,饮了易生病。
2.不饮隔夜茶
民间有这样的说法:“隔夜茶,毒如蛇。”虽然有些夸大其词,但正好说明隔夜茶的特点。清代《闲居杂录》有这样一段记载:
惊蛰后至九月,凡茶水在几上经宿者不可饮。因守宫(壁虎)之性,见水则淫,每于水内相交,余沥遗入,为性最毒。如误饮时,急觅地浆水解之,或吐或泻,尚可救一二。掘地以冷水拨之,令浊,少顷取饮,谓之地浆。
这个故事很有意思,“隔夜茶”,之所以“不可饮”,是因为壁虎在里面放了毒,颇有民间传说的韵味。现代科学研究证明,隔夜茶因时间过久,维生素大多已丧失,且茶中的蛋白质、糖类等会成为细菌、霉菌繁殖的养料,很容易变质,所以不宜引用。
可是,在医疗上,未变质的隔夜茶隔夜自有妙用。茶中含有丰富的酸素,能阻止毛细血管出血,如口腔炎、舌痈、湿疹、牙龈出血、创口脓疮等,都可以使用隔夜茶治疗。眼睛带血丝或常流泪,每天几次用隔夜茶洗眼,也有较好疗效。清晨刷牙前后或吃饭之后,用隔夜茶漱一下口,顿感口气清新,并有固齿作用。
3.不宜饮浓茶
其一:浓茶咖啡碱含量很高,对大脑中枢神经刺激较大。因此,喝了浓茶神经活动活跃,尤其在睡前喝浓茶,会影响睡眠,甚至造成失眠。
其二:浓茶中含过多的鞣酸,鞣酸能与人体中的维生素B反应,引起维生素B缺乏症。鞣酸还会使胃黏膜收缩,蛋白质凝集、沉淀,影响人的消化功能。
其三:浓茶还会减弱肠胃对铁质的吸收,时间久了会引起贫血。
其四:浓茶中的茶多酚对乳汁有收敛作用,因此浓茶还会导致哺乳期妇女乳汁分泌减少。
其五:饮浓茶会使血压升高,这与咖啡碱活性物质有关。有些人饮茶后感到头晕、头痛,这可能就是血压升高引起的。
此外,病后需静养及甲亢、结核病人;活动性胃溃疡、十二指肠溃疡病人;习惯性便秘者;贫血患者均不宜喝茶。(摘自《健康百谚》,该书由中国华侨出版社出版)
cvs中源码的头部信息不能自动更新了
原来,我用eclipse2.1提交文件时,在源码中的头部信息如:“// $ Id: DispatchPageAction.java,v 1.3 2005/12/18 13:49:06 dashing_meng Exp $”就会自动更新版本和时间,可是,在最近的代码提交中,我发现它不起作用了。
因为上次是因为文件属性被设置成了kb成了二进制文件不能自动更新,这次我特意看了文件类型,是kkv(文本文件),没错。可是,为什么这种自动更新不起作用了?搞不懂。
为什么学习日记没有实现rss0.91的支持
在使用rome生成的程序中,我发现了rss0.91的一些限制:例如:language是channel的必需元素,copyRight的长度不能超过100个字符(?),description的长度不能超过?个字符
我生成的内容不符合这些限制,所以就不支持rss0.91了(包括RSS 0.91 Netscape 和 RSS 0.91 Userland)。
我只是从程序的出错信息中得知这些限制的,还没有具体去学习这些规范。
学习日记新增RSS订阅功能简介(NEW);什么是RSS?(转帖)
学习日记新增RSS订阅功能简介(NEW)
××××××××××××××××××××××××××××××××××××××××××××××××××××××××
(详见:http://www.learndiary.com/dispatchPageAction.do?act=rss)
学习日记网站 RSS 订阅使用说明:
本站RSS订阅使用rome动态生成,除了下面链接中的默认订阅,您可以修改url中参数取得您定制的RSS订阅(包括定制:RSS版本,条目数,用户等),(注意:参数大小写敏感):
参数"type": 为您订阅的类型,即为下面7种和"所有目标 "页面的2种;
参数"feedType": 为订阅的rss类型,包括:RSS 0.90, RSS 0.92, RSS 0.93, RSS 0.94, RSS 1.0, RSS 2.0, Atom 0.3, Atom 1.0 ,参数为: RSS类型 + "_" + RSS版本号, 如:atom_0.3(必须全部小写,RSS 0.91学习日记未实现支持);
参数"entriesNum": 为您RSS订阅的条目数,默认为39条;
参数"userName": 为您的用户名;
参数"channelID": 为您在"所有目标 "页面订阅某个目标下面的条目的目标ID号。
========================================================
根据我的理解,RSS就是在一个RSS阅读器里订阅所有你感兴趣的、利用了RSS发布的网上的信息,这样,在你打开RSS阅读器或者RSS阅读器在系统中运行固定的时间间隔(例如1个小时)后,RSS阅读器自动连接到这些提供了RSS发布的网站上并自动更新相关的信息。
这样,你就可以用一个RSS阅读器获得你感兴趣的所有最新信息,而不用登录到它们的一个个的网站上去浏览。
我现在在用的一款RSS阅读器是新浪网发布的,你也可以一试:http://rss.sina.com.cn。大家如果有其它的好的RSS阅读器也希望在这里跟帖说一下。
下面是一篇来自网上的转帖,供还没有使用过RSS阅读器朋友参考。
什么是RSS?(转帖)
××××××××××××××××××××××××××××××××××××××××××××××××××××××××
(转自:http://wm23.com/resource/R01/Internet_1005.htm)
什么是RSS?RSS及其发展历程
(网络营销教学网站 www.wm23.com 2005-01-03)
RSS是2004年最热门的互联网词汇之一,不过,相对于博客(BLOG)来说,RSS的知名度相应会低很多,而且至今还没有一个非常贴切的中文词汇,也许以后无需中文名,大家都习惯于直接叫RSS了。RSS之所以同BLOG一样会被认为是热门词汇的一个原因,个人推测,应该是许多分析人士认识到RSS将要对互联网内容的浏览方法所产生的巨大影响。
什么是RSS呢?RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是目前使用最广泛的XML应用。RSS搭建了信息迅速传播的一个技术平台,使得每个人都成为潜在的信息提供者。发布一个RSS文件后,这个RSS Feed中包含的信息就能直接被其他站点调用,而且由于这些数据都是标准的XML格式,所以也能在其他的终端和服务中使用。
如果从RSS阅读者的角度来看,完全不必考虑它到底是什么意思,只要简单地理解为一种方便的信息获取工具就可以了。RSS获取信息的模式与加入邮件列表(如电子杂志和新闻邮件)获取信息有一定的相似之处,也就是可以不必登录各个提供信息的网站而通过客户端浏览方式(称为“RSS阅读器”)或者在线RSS阅读方式这些内容。例如,通过一个RSS阅读器,可以同时浏览新浪新闻,也可以浏览搜狐或者百度的新闻(如果你采用了RSS订阅的话)。
在许多新闻信息服务类网站,会看到这样的按钮 ,有的网站使用一个图标,有的同时使用两个,这就是典型的提供RSS订阅的标志,这个图标一般链接到订阅RSS信息源的URL。当然,即使不用这样的图标也是可以的,只要提供订阅RSS信息源的URL即可,如网上营销新观察提供的RSS订阅URL是:http://www.marketingman.net/rss.xml
使用RSS获取信息的前提是,先安装一个RSS阅读器,然后将提供RSS服务的网站加入到RSS阅读器的频道即可。大部分RSS阅读器本身也预设了部分RSS频道,如新浪新闻、百度新闻等。
RSS基础知识:如何利用RSS阅读器订阅RSS新闻内容?如何免费下载RSS阅读器?(http://www.marketingman.net/wmtheo/zh272.htm)
常用的RSS阅读器:周博通RSS阅读器(http://www.potu.com/) 看天下网络资讯浏览器(http://www.kantianxia.com/)
网上营销新观察专题文章:RSS营销研究(http://www.marketingman.net/topics/020_RSS-marketing.htm)
【RSS实用知识】:关于RSS订阅与RSS阅读的常见问题解答(网上营销新观察 冯英健) (http://www.marketingman.net/wmtheo/zh272.htm)
为了进一步了解RSS及其发展历程的有关背景知识,下面摘录了2003年10月平文胜为时代营销撰写的有关RSS技术层面的介绍文章。仅供参考。网上此类介绍文章也不少,有兴趣的请到网上检索更多信息。例如维基百科对于RSS的定义、RSS规范、RSS专用阅读器和RSS在线阅读器、中文RSS搜索引擎等等(http://zh.wikipedia.org/wiki/RSS)
RSS及其发展历程简介 (时代营销 平文胜 2003-10-10)
RSS是一种描述和同步网站内容的格式,是目前使用最广泛的XML应用。RSS应用在国外已经非常普遍,从个人博客(Blog)栏目、企业站点到世界级的门户都提供基于RSS的服务,如IBM公司站点的中文新闻RSS http://www.ibm.com/news/cn/zh/index.rss ,YAHOO站点的http://news.yahoo.com/rss ,微软MSDN站点的http://msdn.microsoft.com/aboutmsdn/rss.asp 等等。
1、 RSS的历史
那么RSS究竟代表什么呢?比较普遍的有两种说法,一种是“Rich Site Summary”或“RDF Site Summary”,另一种是“Really Simple Syndication”,之所以有这些分歧,需要从RSS发展的历史说起。
最初的0.90版本RSS是由Netscape公司设计的,目的是用来建立一个整合了各主要新闻站点内容的门户,但是0.90版本的RSS规范过于复杂,而一个简化的RSS 0.91版本也随着Netscape公司对该项目的放弃而于2000年暂停。
不久,一家专门从事博客写作软件开发的公司UserLand接手了RSS 0.91版本的发展,并把它作为其博客写作软件的基础功能之一继续开发,逐步推出了0.92、0.93和0.94版本。随着网络博客的流行,RSS作为一种基本的功能也被越来越多的网站和博客软件支持。
在UserLand公司接手并不断开发RSS的同时,很多的专业人士认识到需要通过一个第三方、非商业的组织,把RSS发展成为一个通用的规范,并进一步标准化。于是2001年一个联合小组在0.90版本RSS的开发原则下,以W3C新一代的语义网技术RDF(Resource Description Framework)为基础,对RSS进行了重新定义,发布RSS1.0,并将RSS定义为“RDF Site Summary”。但是这项工作没有与UserLand公司进行有效的沟通,UserLand公司也不承认RSS 1.0的有效性,并坚持按照自己的设想进一步开发出RSS的后续版本,到2002年9月发布了最新版本RSS 2.0,UserLand公司将RSS定义为“Really Simple Syndication”。
目前RSS已经分化为RSS 0.9x/2.0和RSS 1.0两个阵营,由于分歧的存在和RSS 0.9x/2.0的广泛应用现状,RSS 1.0还没有成为标准化组织的真正标准。
2、 RSS目前的版本和推荐
到目前为止,RSS共有七种版本,推荐使用的是RSS 1.0和RSS 2.0,对于一些基本的站点同步,也可以选用RSS 0.91。
3、 RSS的语法介绍
一个RSS文件就是一段规范的XML数据,该文件一般以rss,xml或者rdf作为后缀。下面我们选择http://msdn.microsoft.com/visualc/rss.xml中的一部分作为例子简单说(略)
4、 RSS的联合(Syndication)和聚合(Aggregation)
发布一个RSS文件(一般称为RSS Feed)后,这个RSS Feed中包含的信息就能直接被其他站点调用,而且由于这些数据都是标准的XML格式,所以也能在其他的终端和服务中使用,如PDA、手机、邮件列表等。而且一个网站联盟(比如专门讨论旅游的网站系列)也能通过互相调用彼此的RSS Feed,自动的显示网站联盟中其他站点上的最新信息,这就叫着RSS的联合。这种联合就导致一个站点的内容更新越及时、RSS Feed被调用的越多,该站点的知名度就会越高,从而形成一种良性循环。
而所谓RSS聚合,就是通过软件工具的方法从网络上搜集各种RSS Feed并在一个界面中提供给读者进行阅读。这些软件可以是在线的WEB工具,如http://my.netscape.com ,http://my.userland.com , http://www.xmltree.com ,http://www.moreover.com ,http://www.oreillynet.com/meerkat 等,也可以是下载到客户端安装的工具
5、 RSS的未来发展
随着越来越多的站点对RSS的支持,RSS已经成为目前最成功的XML应用。RSS搭建了信息迅速传播的一个技术平台,使得每个人都成为潜在的信息提供者。相信很快我们就会看到大量基于RSS的专业门户、聚合站点和更精确的搜索引擎。
参考文献:
1、 RSS 0.9 Specification http://www.purplepages.ie/RSS/netscape/rss0.90.html
2、 RSS 1.0 Specification http://web.resource.org/rss/1.0/spec
3、 RSS 2.0 Specification http://blogs.law.harvard.edu/tech/rss
rss支持第一次代码提交
程序类基本完成,页面还没有做。使用rome可以较好的实现所有rss版本和atom的feed。个人认为还是应用得比较成功的。今天早上已经把全部代码和argoUML0.18.1的粗略设计提交到了cvs库。
主要类的实现概略:(希望得到你的意见或建议,也供想使用rome的朋友参考。)
1、
//$ Id: RSSAction.java,v 1.0 2006/02/26 20:49:06 dashing_meng Exp $
//Copyright (c) 2004-2005 Http://www.learndiary.com. All Rights Reserved.
//Permission to use, copy, modify, and distribute this software and its
//documentation without fee, and without a written agreement is hereby
//granted, provided that the above copyright notice and this paragraph
//appear in all copies. This software program and documentation are
//copyrighted by http://www.learndiary.com. The software program and
//documentation are supplied "AS IS", without any accompanying services
//from The LearnDiary. The LearnDiary does not warrant that the operation
//of the program will be uninterrupted or error-free. The end-user
//understands that the program was developed for research purposes and is
//advised not to rely exclusively on the program for any reason.
//IN NO EVENT SHALL HTTP://WWW.LEARNDIARY.COM BE LIABLE TO ANY PARTY FOR
//DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
//INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
//DOCUMENTATION, EVEN IF HTTP://WWW.LEARNDIARY.COM HAS BEEN ADVISED OF THE
//POSSIBILITY OF SUCH DAMAGE. HTTP://WWW.LEARNDIARY.COM SPECIFICALLY
//DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
//WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
//SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND
//HTTP://WWW.LEARNDIARY.COM HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE,
//SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
package com.learndiary.website.action.rss;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionForward;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import com.learndiary.website.util.rss.*;
import com.sun.syndication.io.FeedException;
/**
* action for generating rss feed.
* @author http://www.learndiary.com,LearnDiary Develop Group
*/
public class RSSAction extends Action {
/* {src_lang=Java}*/
private Log __log = LogFactory.getFactory().getInstance(this.getClass());
;
/* {transient=false, volatile=false}*/
/**
* pseudo code:
* {
* //the rss feed type,includes:
* //latestDiariesOfMyProcessGoal, latestAdvicesOfMyDiaries,
* //latestGoals, mostJoinedGoals, latestDiaries, latestAdvices,
* //latestDiariesOfGoal, latestAdvicesOfGoal,etc..
* String type=request.getParameter("type");
*
* //feed type,includes:
* //RSS 0.90, RSS 0.91 Netscape, RSS 0.91 Userland,
* //RSS 0.92, RSS 0.93, RSS 0.94, RSS 1.0,
* // RSS 2.0, Atom 0.3, Atom 1.0
* String rssVersion = request.getParameter("feedType");
*
* //entries number:
* //user can specify how many entries he would like to see,
* //the default entries number is 39.
* int entriesNum=Integer.parseInt(request.getParemeter("entriesNum"));
*
* //user's name:
* //for getting specified user's entries.
* String userName=request.getParameter("userName");
*
* //channel article's ID:
* //it is only for subscribing a goal's sub-entries,goalID.
* int channelID=Integer.parseInt(request.getParemeter("channelID"));
*
* if (type.equal("latestDiaries")){
* RSSGenerator generator = new LatestDiariesRSS(feedType, entriesNum);
* generator.outputFeed();
* }else if(type.equal("latestAdvices")){
* RSSGenerator generator = new LatestAdvicesRSS(feedType, entriesNum);
* generator.outputFeed();
* }else if(type.equal("latestDiariesOfMyProcessGoal")){
* RSSGenerator generator = new LatestDiariesOfMyProcessGoalRSS(feedType, entriesNum, userName);
* generator.outputFeed();
* }else if(type.equal("latestMyDiariesOfMyProcessGoal")){
* RSSGenerator generator = new LatestMyDiariesOfMyProcessGoalRSS(feedType, entriesNum, userName);
* generator.outputFeed();
* }else if(type.equal("latestAdvicesOfMyDiaries")){
* RSSGenerator generator = new LatestAdvicesOfMyDiariesRSS(feedType, entriesNum, userName);
* generator.outputFeed();
* }else if(type.equal("latestDiariesOfGoal")){
* RSSGenerator generator = new LatestDiariesOfGoalRSS(feedType, entriesNum, channelID);
* generator.outputFeed();
* }else if(type.equal("latestAdvicesOfGoal")){
* RSSGenerator generator = new LatestAdvicesOfGoalRSS(feedType, entriesNum, channelID);
* generator.outputFeed();
* }else if(type.equal("latestGoals")){
* RSSGenerator generator = new LatestGoalsRSS(feedType, entriesNum);
* generator.outputFeed();
* }else if(type.equal("mostJoinedGoals")){
* RSSGenerator generator = new MostJoinedGoalsRSS(feedType, entriesNum);
* generator.outputFeed();
* }else {
* show "error type" message;
* }
* }//end of excute() method
*
*/
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
//the rss feed type,includes:
//latestDiariesOfMyProcessGoal, latestAdvicesOfMyDiaries,
//latestGoals, mostJoinedGoals, latestDiaries, latestAdvices,
//latestDiariesOfGoal, latestAdvicesOfGoal,etc..
String type = request.getParameter("type");
//feed type,includes:
//RSS 0.90, RSS 0.91 Netscape, RSS 0.91 Userland,
//RSS 0.92, RSS 0.93, RSS 0.94, RSS 1.0,
// RSS 2.0, Atom 0.3, Atom 1.0
String feedType = request.getParameter("feedType");
//entries number:
//user can specify how many entries he would like to see,
//the default entries number is 39.
int entriesNum = Integer.parseInt(request.getParameter("entriesNum"));
//user's name:
//for getting specified user's entries.
String userName = request.getParameter("userName");
//channel article's ID:
//it is only for subscribing a goal's sub-entries,goalID.
int channelID = 0;
String channelIDStr = request.getParameter("channelID");
if (channelIDStr != null && !channelIDStr.equals(""))
channelID = Integer.parseInt(channelIDStr);
try {
if (type.equals("latestDiaries")) {
RSSGenerator generator = new LatestDiariesRSS(feedType, entriesNum);
generator.outputFeed(response);
__log.info(
"get feed of latestDiaries:feedType="
+ feedType
+ " entriesNum="
+ entriesNum);
} else if (type.equals("latestAdvices")) {
RSSGenerator generator = new LatestAdvicesRSS(feedType, entriesNum);
generator.outputFeed(response);
__log.info(
"get feed of latestAdvices:feedType="
+ feedType
+ " entriesNum="
+ entriesNum);
} else if (type.equals("latestDiariesOfMyProcessGoal")) {
RSSGenerator generator =
new LatestDiariesOfMyProcessGoalRSS(feedType, entriesNum, userName);
generator.outputFeed(response);
__log.info(
"get feed of latestDiariesOfMyProcessGoal:feedType="
+ feedType
+ " entriesNum="
+ entriesNum
+ " userName="
+ userName);
} else if (type.equals("latestMyDiariesOfMyProcessGoal")) {
RSSGenerator generator =
new LatestMyDiariesOfMyProcessGoalRSS(feedType, entriesNum, userName);
generator.outputFeed(response);
__log.info(
"get feed of latestMyDiariesOfMyProcessGoal:feedType="
+ feedType
+ " entriesNum="
+ entriesNum
+ " userName="
+ userName);
} else if (type.equals("latestAdvicesOfMyDiaries")) {
RSSGenerator generator =
new LatestAdvicesOfMyDiariesRSS(feedType, entriesNum, userName);
generator.outputFeed(response);
__log.info(
"get feed of latestAdvicesOfMyDiaries:feedType="
+ feedType
+ " entriesNum="
+ entriesNum
+ " userName="
+ userName);
} else if (type.equals("latestDiariesOfGoal")) {
RSSGenerator generator =
new LatestDiariesOfGoalRSS(feedType, entriesNum, channelID);
generator.outputFeed(response);
__log.info(
"get feed of latestDiariesOfGoal:feedType="
+ feedType
+ " entriesNum="
+ entriesNum
+ " channelID="
+ channelID);
} else if (type.equals("latestAdvicesOfGoal")) {
RSSGenerator generator =
new LatestAdvicesOfGoalRSS(feedType, entriesNum, channelID);
generator.outputFeed(response);
__log.info(
"get feed of latestAdvicesOfGoal:feedType="
+ feedType
+ " entriesNum="
+ entriesNum
+ " channelID="
+ channelID);
} else if (type.equals("latestGoals")) {
RSSGenerator generator = new LatestGoalsRSS(feedType, entriesNum);
generator.outputFeed(response);
__log.info(
"get feed of LatestGoalsRSS:feedType="
+ feedType
+ " entriesNum="
+ entriesNum);
} else if (type.equals("mostJoinedGoals")) {
RSSGenerator generator = new MostJoinedGoalsRSS(feedType, entriesNum);
generator.outputFeed(response);
__log.info(
"get feed of mostJoinedGoals:feedType="
+ feedType
+ " entriesNum="
+ entriesNum);
} else {
return mapping.findForward("commonFailure");
}
} catch (IOException e1) {
e1.printStackTrace();
} catch (FeedException e2) {
e2.printStackTrace();
} catch (Exception e3) {
e3.printStackTrace();
}
return null;
}
}
2、
//$ Id: RSSGenerator.java,v1.4 2006/02/26 20:49:06 dashing_meng Exp $
//Copyright (c) 2004-2005 Http://www.learndiary.com. All Rights Reserved.
//Permission to use, copy, modify, and distribute this software and its
//documentation without fee, and without a written agreement is hereby
//granted, provided that the above copyright notice and this paragraph
//appear in all copies. This software program and documentation are
//copyrighted by http://www.learndiary.com. The software program and
//documentation are supplied "AS IS", without any accompanying services
//from The LearnDiary. The LearnDiary does not warrant that the operation
//of the program will be uninterrupted or error-free. The end-user
//understands that the program was developed for research purposes and is
//advised not to rely exclusively on the program for any reason.
//IN NO EVENT SHALL HTTP://WWW.LEARNDIARY.COM BE LIABLE TO ANY PARTY FOR
//DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
//INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
//DOCUMENTATION, EVEN IF HTTP://WWW.LEARNDIARY.COM HAS BEEN ADVISED OF THE
//POSSIBILITY OF SUCH DAMAGE. HTTP://WWW.LEARNDIARY.COM SPECIFICALLY
//DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
//WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
//SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND
//HTTP://WWW.LEARNDIARY.COM HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE,
//SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
package com.learndiary.website.util.rss;
import com.sun.syndication.feed.synd.SyndCategory;
import com.sun.syndication.feed.synd.SyndCategoryImpl;
import com.sun.syndication.feed.synd.SyndContent;
import com.sun.syndication.feed.synd.SyndContentImpl;
import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndEntryImpl;
import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.io.FeedException;
import com.sun.syndication.io.SyndFeedOutput;
import com.learndiary.website.Constants;
import com.learndiary.website.Consts;
import com.learndiary.website.model.ArticleInfo;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import org.apache.commons.logging.Log;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.learndiary.website.db.ArticleDB;
import com.learndiary.website.dao.TransContext;
import javax.servlet.http.HttpServletResponse;
/**
* the base abstract class for generating rss feed.
* @author http://www.learndiary.com,LearnDiary Develop Group
*/
public abstract class RSSGenerator {
protected static final DateFormat DATE_PARSER =
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/* {transient=false, volatile=false}*/
protected Log __log = null; //should it be added "static" modifier?
/* {transient=false, volatile=false}*/
protected static TransContext trans = null;
/* {transient=false, volatile=false}*/
protected static ArticleDB myDB = null;
/* {transient=false, volatile=false}*/
protected String feedType = "rss_2.0";
/* {transient=false, volatile=false}*/
protected int entriesNum = 39;
/* {transient=false, volatile=false}*/
protected final List entries = new ArrayList();
/* {transient=false, volatile=false}*/
protected SyndFeed feed = null;
/* {transient=false, volatile=false}*/
protected String catName = null;
/* {transient=false, volatile=false}*/
/**
* output the rss feed xml page
* pseudo code:
* {
* res.setContentType("application/xml; charset=UTF-8");
* SyndFeedOutput output = new SyndFeedOutput();
* output.output(feed,res.getWriter());
* }
* @param res the HttpServletResponse come from the excute() method of struts Action
*/
public void outputFeed(HttpServletResponse res)
throws IOException, FeedException, Exception {
try {
this.setFeed();
} catch (Exception e1) {
e1.printStackTrace();
}
res.setContentType("application/xml; charset=UTF-8");
SyndFeedOutput output = new SyndFeedOutput();
PrintWriter out = res.getWriter();
try {
output.output(feed, out);
} catch (IOException e) {
e.printStackTrace();
} catch (FeedException e) {
e.printStackTrace();
}
}
/**
* set rss feed
*/
abstract protected void setFeed() throws Exception;
/**
* set articles into the entries list of the rss feed
* {
* List artList=(ArrayList)myDB.getCPageList(0, entriesNum, "article", condition, Consts.ART_WRITE, Consts.DIR_DESC, Consts.HTML_FLAG);
* Iterator it=artList.listIterator();
* while (it.hasNext()) {
* ArticleInfo anArt = (ArticleInfo)it.next();
* entries.addEntry(anArt);
* }
* }
* @param condition "WHERE" clause in the sql statement,for example:"WHERE parentID=1 AND typeID=2"
*/
protected void setEntries(String condition,int orderType,int direction,int htmlFlag) throws Exception {
List artList = new ArrayList();
__log.debug("setEntries() in RSSGenerator:entriesNum="+entriesNum+" condition is:"+condition);
try {
artList =
(ArrayList) myDB.getCPageList(
0,
entriesNum,
"article",
condition,
orderType,
direction,
htmlFlag);
} catch (Exception e) {
e.printStackTrace();
}
__log.debug("artList is:"+artList);
if (artList == null)
return;
Iterator it = artList.listIterator();
while (it.hasNext()) {
ArticleInfo anArt = (ArticleInfo) it.next();
this.addEntry(anArt);
}
}
/**
* add an articleInfo into rss entries list
* pseudo code:
* {
* SyndEntry entry = new SyndEntryImpl();
* entry.setAuthor(anArt.getUserName());
* entry.setTitle(title);
* entry.setLink(link);
* entry.setPublishedDate(DATE_PARSER.parse(date));
* SyndContent description = new SyndContentImpl();
* description.setType("text/plain");
* description.setValue(blogContent);
* entry.setDescription(description);
* List categories = new ArrayList();
* SyndCategory category = new SyndCategoryImpl();
* category.setName(catName);
* categories.add(category);
* entry.setCategories(categories);
* entries.add(entry);
* }
* @param anArt an article's information
*/
private void addEntry(ArticleInfo anArt) throws Exception, ParseException {
int artType = anArt.getTypeID();
int artID = anArt.getArticleID();
int parentID = anArt.getParentID();
String parentName = anArt.getParentArticleName();
String parentParentName = null;
int parentType = 0;
try {
parentType = myDB.getArtTypeByID(parentID);
if (parentType == Consts.DIARY_TYPE)
parentParentName = myDB.getArtNameByID(myDB.getParentIDByID(parentID));
} catch (Exception e1) {
e1.printStackTrace();
}
String artName = anArt.getArticleName();
String artAuthor = anArt.getUserName();
String artContent = anArt.getArticleText();
String artResource = anArt.getArticleResource();
String writeDate = anArt.getWriteDate();
SyndEntry entry = new SyndEntryImpl();
entry.setAuthor(artAuthor);
__log.debug("set entry's author is:" + artAuthor);
entry.setTitle(artName);
__log.debug("set entry's title is:" + artName);
//get article's link and rss description head information;
String link = null, headInfo = null;
if (artType == Consts.GOAL_TYPE) {
link =
Constants.APPLICATION_PATH.concat(
"/disGoalContentAction.do?goalID=" + artID);
headInfo =
"\""
+ artAuthor
+ "\" 在:"
+ writeDate
+ " 首先创建了目标:\""
+ artName
+ "\"<p>";
} else if (artType == Consts.DIARY_TYPE) {
link =
Constants.APPLICATION_PATH.concat(
"/disDiaryContentAction.do?goalID" + artID);
headInfo =
"\""
+ artAuthor
+ "\" 于:"
+ writeDate
+ " 在目标:\""
+ parentName
+ "\"下添加了日记:\""
+ artName
+ "\"<p>";
} else if (
artType == Consts.ADVICE_TYPE && parentType == Consts.GOAL_TYPE) {
link =
Constants.APPLICATION_PATH.concat(
"/disGoalContentAction.do?goalID" + parentID);
headInfo =
"\""
+ artAuthor
+ "\" 于:"
+ writeDate
+ " 在目标:\""
+ parentName
+ "\"下添加了评论:\""
+ artName
+ "\"<p>";
} else {
link =
Constants.APPLICATION_PATH.concat(
"/disDiaryContentAction.do?goalID" + parentID);
headInfo =
"\""
+ artAuthor
+ "\" 于:"
+ writeDate
+ " 在目标:\""
+ parentParentName
+ "\"的日记:\""
+ parentName
+ "\"下添加了评论:\""
+ artName
+ "\"<p>";
}
entry.setLink(link);
__log.debug("set entry's link is:" + link);
try {
entry.setPublishedDate(DATE_PARSER.parse(writeDate));
__log.debug("set entry's publishedDate is:" + writeDate);
} catch (ParseException e) {
e.printStackTrace();
}
SyndContent description = new SyndContentImpl();
description.setType("text/plain");
String value =
headInfo.concat("文章内容:<br>").concat(artContent).concat(
"<p>相关资源:<br>" + artResource);
description.setValue(value);
__log.debug("set description's value is:" + value);
entry.setDescription(description);
List categories = new ArrayList();
SyndCategory category = new SyndCategoryImpl();
category.setName(catName);
__log.debug("set category's name is:" + catName);
categories.add(category);
entry.setCategories(categories);
entries.add(entry);
__log.debug(
"add an entry into entriesList.\n*********************************");
}
}
3、
//$ Id: LatestGoalsRSS.java,v 1.0 2006/02/26 20:49:06 dashing_meng Exp $
//Copyright (c) 2004-2005 Http://www.learndiary.com. All Rights Reserved.
//Permission to use, copy, modify, and distribute this software and its
//documentation without fee, and without a written agreement is hereby
//granted, provided that the above copyright notice and this paragraph
//appear in all copies. This software program and documentation are
//copyrighted by http://www.learndiary.com. The software program and
//documentation are supplied "AS IS", without any accompanying services
//from The LearnDiary. The LearnDiary does not warrant that the operation
//of the program will be uninterrupted or error-free. The end-user
//understands that the program was developed for research purposes and is
//advised not to rely exclusively on the program for any reason.
//IN NO EVENT SHALL HTTP://WWW.LEARNDIARY.COM BE LIABLE TO ANY PARTY FOR
//DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
//INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
//DOCUMENTATION, EVEN IF HTTP://WWW.LEARNDIARY.COM HAS BEEN ADVISED OF THE
//POSSIBILITY OF SUCH DAMAGE. HTTP://WWW.LEARNDIARY.COM SPECIFICALLY
//DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
//WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
//SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND
//HTTP://WWW.LEARNDIARY.COM HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE,
//SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
package com.learndiary.website.util.rss;
import org.apache.commons.logging.LogFactory;
import com.learndiary.website.Constants;
import com.learndiary.website.Consts;
import com.learndiary.website.dao.TransContext;
import com.learndiary.website.db.ArticleDB;
import com.sun.syndication.feed.synd.SyndFeedImpl;
/**
* for generating latest goals' rss feed.
* @author http://www.learndiary.com,LearnDiary Develop Group
*/
public class LatestGoalsRSS extends RSSGenerator {
public LatestGoalsRSS(String feedType, int entriesNum) {
this.__log = LogFactory.getFactory().getInstance(this.getClass());
try {
RSSGenerator.trans = new TransContext();
RSSGenerator.myDB = new ArticleDB(trans);
} catch (Exception e) {
e.printStackTrace();
}
this.feedType = feedType;
this.entriesNum = entriesNum;
this.catName = "最新创建的" + entriesNum + "个目标";
}
protected void setFeed() throws Exception {
try {
this.setEntries("WHERE typeID=1",Consts.ART_WRITE,Consts.DIR_DESC,Consts.HTML_FLAG);
} catch (Exception e) {
e.printStackTrace();
}
feed = new SyndFeedImpl();
feed.setFeedType(feedType);
feed.setTitle("最新创建的" + entriesNum + "个目标");
feed.setLink(Constants.APPLICATION_PATH.concat("/indexAction.do"));
feed.setDescription("学习日记里按时间排序的最新创建的" + entriesNum + "个目标。");
feed.setCopyright(
"除原作者特别声明外,本站所有帖子以<a rel=\"license\" href=\"http://creativecommons.org/licenses/by/2.0/\" target=\"creativecommons\">Creative Commons License</a>方式授权.");
feed.setEntries(entries);
}
}
从容应对危机,先不要着急
我这个人一向有一个毛病,在遇到事情时总是先着急一番。现在想来,什么事情应该都有应对之策,所以,在危机出现时,应该先想它的应对的方法,而不是先着急。只要心里先有了应对之策,有了底,着急这一步自然基本上就免了。危机也就不会演变成为一个事件了。
(转帖)浙江安徽各确诊1例人感染高致病性禽流感病例
(转自:http://news.qq.com/a/20060225/001152.htm)
浙江安徽各确诊1例人感染高致病性禽流感病例http://news.QQ.com 2006年02月25日22:11 中国新闻网
中新网2月25日电 卫生部今天通报,浙江省、安徽省分别确诊一例人感染高致病性禽流感病例。
患者一,有某,女,9岁,学生,浙江省安吉县人。2月10日发病,临床有发热、肺炎表现。经调查,患者发病前两次到过外地亲戚家(安徽省广德县),其亲戚家在此期间曾出现病死鸡现象,患者的感染来源正在进一步调查中。浙江省疾病预防控制中心对患者标本进行检测,并经中国疾病预防控制中心复核检测,禽流感病毒(A/H5N1)核酸均为阳性。目前,患者病情危重,正在积极救治。
患者二,王某某,女,26岁,农民,安徽省颍上县人。患者2月11日发病,临床有发热、肺炎表现。经调查,患者发病前有病死禽接触史。农业部门从当地病死鸡病料中分离到H5N1高致病性禽流感病毒。安徽省疾病预防控制中心对患者标本进行检测,并经中国疾病预防控制中心复核检测,禽流感病毒(A/H5N1)核酸均为阳性。目前,患者病情危重,正在积极救治。
卫生部专家组根据世界卫生组织人感染高致病性禽流感确诊病例定义和中国诊断标准,判定两名患者均为人感染高致病性禽流感病例。
两名患者发病后,浙江、安徽两省各级政府高度重视,卫生部门采取了相应的防控措施,并对患者密切接触者进行严密的医学观察,未发现异常临床表现。
两名患者的有关情况,卫生部已向世界卫生组织、港澳台地区和部分国家通报。
一个非常成功使用目标分享的语言学习网站http://bulo.hjengl
http://bulo.hjenglish.com/goal.htm
我估计这个网站是模仿的www.43things.com的模式。但是,他们把这种模式成功的应用到他们网站的语言学习领域。这个网站的总体运作的模式值得深入研究。
因为,还需要这种交流形式的网站在未来有可能成为学习日记系统的潜在用户,研究他们的需求是非常有意义的。
java中的protected提供package访问权限
也就是,从它们的私有性来说,依次是:private,package,protected(也提供给包以外的继承类访问),public
摘自:Thinking in Java, 3rd ed. Revision 4.0 6: Reusing Classes protected
It says “This is private as far as the class user is concerned, but available to anyone who inherits from this class or anyone else in the same package.” (In Java, protected also provides package access.)
另外,因为abstract方法必须被它的继承类实现才有意义,所以它至少要提供package访问,按道理来说,应该提供protected访问,因为这样可以供在包外的继承者来实现它。