2006年10月17日星期二

Web2.0网站需要解决的问题

  提到Web2.0,我们需要先说一说Web1.0。

  Web1.0是门户网站的天下,其特点就是大型网站,编辑众多,大量的职业编辑可以保证网站每天更新成百上千条记录,更新快,内容也不错,读者也就多,访问量自然就很大。

  这种模式也有一些问题,例如成本较高(网站编辑的工资、管理层运作成本等等),盈利模式较为单一(网络广告收入等等),因此需要搞一些“短信”、“彩铃”、“网络游戏”之类的“副业”,这些副业往往盈利能力非常强(虽然大多使用流氓手段),因此,网站也乐于将其流量转向这类内容。

  Web2.0是近年来流行的一个概念,优势是用户提供内容,降低了编辑的人力资源成本,但是这也会带来一个严重的问题,用户发布的内容,无论从质量还是数量上讲,都无法和职业编辑发布的内容相比,这会导致网站的整体质量难以和Web1.0相抗衡,如何提高用户提交信息的质量,是建立Web2.0网站需要解决的一个问题。

  对于提交质量的问题,有些人采用Digg的方法,由其他用户来评分,好的内容就会得分高,不好的内容得分就低,但是如何保证评分的用户的准确度呢?比如通过人工或程序的方法恶意评分,这些都是较难控制的。评分还需要不断激励用户来评分,否则很难有用户能坚持长期为某个网站评分。

  另一个问题是,用户凭什么为你提交高质量的内容?网站编辑提交高质量的内容,因为公司会给他发工资奖金,普通的上网用户凭什么给Web2.0网站提交高质量内容?有人给发工资吗?显然没有。要求用户长期地为网站提交好内容,显然是非常困难的事情。因此建立Web2.0网站还要解决如何激励用户提交高质量内容的问题。

  对于激励用户的问题,我觉得比较好的方法是,使用某些方法,将用户提交的信息和用户自己的利益结合在一起,用户提交的信息越好,用户个人得到的利益就越高。比如有一些Digg网站将用户提交的信息附加用户自己的Adsense广告,这就是一个很好的思路,用户的内容访问量越大,其Adsense收入也就越大,这是一个激励用户的很好思路。

  还有一个问题是Spam。用户可以提交内容了,看似降低了人力成本,但是垃圾广告信息也可以来提交了,如果不处理的话,Web2.0整体内容质量会极速下降,但是越大的网站,垃圾广告信息也越多,处理这些广告的人力成本也会越来越大,这一点在Web1.0上就不存在,网站编辑是不会发送垃圾广告信息到网站上的。

  解决垃圾广告的这个问题很复杂,很难有全面的解决方法,目前只能采取一些程序的方法自动删除某些垃圾广告,以减少人力删除的成本,比如WordPress的Akismet插件可以通过中心服务器数据库自动捕获和拦截垃圾信息,我以前也写过一个Z-Blog反垃圾留言过滤插件,都可以通过程序来阻止垃圾信息,但其也面临准确度和误判等问题。

  这里是我想到的关于现在的Web2.0面临的问题和解决方法,如果你有什么其他问题以及更好的解决方法,请也留言告诉我。

2006年10月15日星期日

使用Google进行时间管理

  本文主要讲的是工作方法的一个重要内容—“时间管理”,并且介绍了一个使用Google个性化主页来进行时间管理的简易方法。前一阵我们公司的相关时间管理的培训给了我很大启发,促使我将这个好观念介绍给更多的人,同时结合我自己使用的Google工具来实现时间管理的方法,如果你想改善自己的工作效率,那么请继续往下看。

  时间管理的理论知识我就不介绍了,市场上关于这方面的书非常多,相关的培训也很多。简而言之,时间管理是就是如何更有效地安排自己的工作计划,掌握重点,合理有效地利用工作时间,其本质是管理个人,是自我的一种管理。时间管理的方法是通过良好的计划来完成的。

  时间“规划”

  提高工作效率最关键的部分是规划。规划你自己的工作计划和过程,充分利用有限的时间,这是高效完成自己工作的有效方法。

  时间规划一般分为长期规划和短期规划,一般可以在年初制定本年计划,月初制定月计划,周一制定周计划。每天的工作计划一般也可以预先制定,但是由于工作内容的复杂性以及临时随机任务,每天的计划会非常难以管理。

  时间规划的难点是一天时间的规划和分类,一天一共24小时,除了上班时间外就是个人业余时间,上班时间的工作一般是一些日常工作或者临时任务,而业余时间则是思维期,一些事情可以吃饭睡觉都在想,这些事情一般不是紧急事情,往往思考累计到一定阶段就可以水到渠成,轻松完成。下面我们主要讲讲工作时间的事务细分。

  时间“四象限”法

  时间“四象限”法是目前很时髦的一种时间管理理论,我参加的培训主要讲的就是这方面的内容。“四象限”法是美国的管理学家科维提出的一个时间管理的理论,把工作按照重要和紧急两个不同的程度进行了划分,基本上可以分为四个“象限”:既紧急又重要(如客户投诉、即将到期的任务、财务危机等)、重要但不紧急(如建立人际关系、人员培训、制订防范措施等)、紧急但不重要(如电话铃声、不速之客、部门会议等)、既不紧急也不重要(如上网、闲谈、邮件、写博客等)。

  重要紧急的事马上做,例如处理客户投诉、处理服务器故障等突发性问题,尽量以最短最快的时间内完成这些事情。

  其次是做重要而不紧急的事,这一类的事情影响深远,例如学习新知识、新技能等,这类事情的效益是中长期的,科维提出的时间管理理论的的重点是把主要的精力和时间集中地放在处理重要但不紧急的工作上

  紧急但不重要的事,要学会说“”。一个人的时间和精力是有限的,对于自己不重要的事情,能不做就不做,想办法将事情推脱给其它部门,拒绝或推脱工作要讲究技巧,不要直截了当,要委婉,用让上级觉得确实是合理的理由来拒绝这个新增派的任务。一个人只有学会说“不”,他才会得到真正的自由。当然这并不等于推卸责任,如果确实需要自己来完成,那么就使用最短的时间完成这些工作。

  对于不重要也不紧急的事,尽量不去做。如果确实需要做,那么要严格限定时间,比如写博客,限定一个小时,时间一到就立刻停止写作,千万不要被无聊的人和无关重要的事缠住。

  因此,只要我们把精力主要放在重要但不紧急的事务处理上,合理安排时间,我们就能做到自己的长远规划,工作效率就会大幅提升,一段时间过后,等待你的就会是升职和加薪。

  利用“Google个性化主页”进行时间管理

  时间管理需要一个简单而有效的工具来实现,通过我对于Google在工作上的一些应用后发现,Google的个性化主页就可以完成时间管理。

  我们需要的时间管理工具必须是基于网络的服务,因为我们上班和家庭使用的不是一台电脑,但我们需要看到同一个服务界面,通过Google帐户登录Google的个性化主页就可以实现这个功能。

  首先使用一个Google帐号登录个性化主页,将页面上默认的内容全部删除,然后点击“为本页添加更多内容”,搜索添加“天气”,“便条纸”,“书签”,“待办事项”,然后把地址栏的zh-CN修改为en后找“Google Calendar”添加。这里最重要的一项是“待办事项”,请添加3个待办事项,分别命名为“重要事务”、“不重要事务”和“业余思考”,其中前两个是工作时间处理的事务,在工作时间,每当接到一个新任务,都要按照“四象限”法将其分为重要且紧急,重要不紧急,不重要且紧急,不重要不紧急,添加一个新项目后,将其级别调整为“高”则代表“紧急”,调整为“低”则代表“不紧急”,这时候我们看到的“Google个性化主页”应该是如下图的界面,这就是我们的网络工作平台。

使用Google进行时间管理

  左边的“Google Calendar”可以用来写年计划、月计划、周计划等,中间的部分是当天的日工作计划,右边是一些杂项栏目,查看天气情况用来安排出行,便条纸可以用来记录“临时事情”,书签用来记录临时看到的网址。

  在中间的当天工作计划中,优先处理上面的重要事务,其次是下面的不重要事务,要善于对“不重要事务”说“不”。

  这个工作平台是网络平台,在公司和家中都可以看到同一个界面,是一个简单有效的时间管理工具。当然我们应该清楚,Google只是一个工具,不要指望Google能主动改变你的工作效率,关键在于个人,个人的观念能否转变,计划能否坚持。合理规划自己的工作,充分合理地利用每个可利用的时间,实现高效地工作就不是一件难事。

  最后,本文介绍的Google时间管理工具是一个较为简单的工具,如果你有什么更好更高效的工具,欢迎介绍给我们。

  参考文献:如何提高你的工作效率 

2006年10月14日星期六

将Feed和del.icio.us结合在一起

  这又是一个Z-Blog的插件代码。

  这个代码是在上次介绍的RSS优化插件Better Feed For Z-Blog的基础上,增加的一个美味书签的插件。在每一个文章后面,显示个人在美味书签上收录的相关文章。

  使用这个插件前,需要对Blog和del.icio.us的Tag进行一些同步或者修改,使得两者的Tag名称基本相同,这样,根据名称可以获取到文章在于del.icio.us上的同Tag文章,使得Feed的显示的内容量更多,而且都是相关的内容。

  同步完Tag之后,在RSS优化插件的后面加入以下代码,即可得到strDeliciousTag为美味书签的相关文章列表。

    Dim strDeliciousTag
    strDeliciousTag = GetDeliciousTag (Trim(strTagName))
    If strDeliciousTag<>"" then
     strDeliciousTag="<br/><br/><a href='http://del.icio.us/williamlong/" + Trim(strTagName) + "'>相关网摘</a>:" + strDeliciousTag
    End If

    Function GetDeliciousTag(strTag)
        Dim Retrieval
        Set Retrieval = Server.CreateObject("Microsoft.XMLHTTP")
        With Retrieval
        .Open "GET", "http://del.icio.us/html/williamlong/" + strTag + "?count=5&tags=no&rssbutton=no", False, "", ""
        .Send
        GetDeliciousTag = .ResponseText
        End With
        Set Retrieval = Nothing
    End Function

2006年10月13日星期五

纽约小飞机撞楼事故的Google Earth地标文件

  据美国《侨报》报道,一架单引擎私人小飞机于当地时间11日下午撞上纽约市曼哈顿上东城72街一幢42层楼的高级公寓楼,造成两人死亡,至少15人受伤。这家私人小飞机是纽约洋基棒球队投手赖德尔(Cory Lidle)的,他和他的飞行教练斯坦格遇难。

纽约小飞机撞楼事故

  Google Earth Blog今天也发布了一个纽约撞机KMZ地标文件,在Google Earth中打开这个地标文件,可以很清晰地看见相关的纽约市曼哈顿的公寓楼,据其介绍,因为该地点没有建筑物的“3D Buildings”图层,因此我们对这个地区的鸟瞰图可能会有一些变形。

纽约小飞机撞楼

  Google Earth Blog给出的该地点的坐标是:40°45'56.30"N  73°57'7.81"W。

  前些天Google收购了YouTube,我现在想,以后有没有可能突发事件刚发生,Google Earth上就能出现类似这次的撞机的视频,这种媒体传播模式是否会发生巨大变化。

2006年10月12日星期四

Z-Blog的RSS优化插件Better Feed

  我开发的这个Z-Blog的Better Feed插件的主要功能是扩展现有Z-Blog生成的Feed的内容。

  开发这个插件的起因很偶然,因为前几天我在网上看到Wordpress的Better Feed插件,非常羡慕这个功能(Wordpress的好用插件可真多啊),于是手开始发痒,也做一个类似的插件,应用到我目前使用的Z-Blog系统上。

  目前主要做的功能是在Feed上增加“相关文章”功能。由于我的Feed是使用全文RSS输出,因此损失了不少Web流量,不过,如果在Feed的功能上进行一些扩展和优化,不但可以有利于读者更全面了解文章内容,还可以弥补损失的流量,做到了双赢。

  首先的功能是根据文章的内容,在Feed底部增加一个“相关文章”的功能,这样有兴趣的读者可以很方便地阅读相关内容的文章。

  其次的功能是在Feed底部增加“发表评论”的链接,这样,如果读者看到这篇文章,并且想要发表自己的意见的时候,可以点这个链接进去留言。(为了方便FeedBurner统计点击数,这个链接我暂时没加,有兴趣的可以自己添加一下)

  再次,做为预留功能,我还可以在Feed里面增加广告功能,显示和内容相关的匹配文字广告。

  因此我相信,实现了这些功能之后,做为全文RSS输出的不少缺点就都解决了,这样,很多人就更愿意使用全文RSS输出,方便读者,也不会对自己造成太大冲击。  

  具体的修改方法是,对于Z-Blog 1.6,打开c_system_event.asp文件,找到Function ExportRSS()函数,如果是全文RSS,就将objArticle.HtmlContent替换为objArticle.HtmlContent+getRelateList(objArticle.ID,objArticle.Tag),如果是摘要输出,则替换objArticle.HtmlIntro。最后,在c_system_event.asp文件尾部加入以下代码即可。

'*********************************************************
' 目的:相关文章的生成,用于优化Feed
'*********************************************************
Function getRelateList(intID,strTag)

If (intID=0) Then Exit Function
If strTag<>"" Then

 Dim strCC_Count,strCC_ID,strCC_Name,strCC_Url,strCC_PostTime,strCC_Title
 Dim strCC
 Dim i
 Dim j
 Dim objRS
 Dim strSQL
 Dim strOutput

 strOutput=""
 Set objRS=Server.CreateObject("ADODB.Recordset")

 strSQL="SELECT top 10  [log_ID],[log_Tag],[log_CateID],[log_Title],[log_Intro],[log_Level],[log_AuthorID],[log_PostTime],[log_Url] FROM [blog_Article] WHERE ([log_Level]>2) AND [log_ID]<>"& intID &" "

 Dim aryTAGs
 If InStr(strTag,"}{") > 0 Then
  aryTAGs = Split(strTag,"}{")
 Else
  ReDim aryTAGs(0)
  aryTAGs(0) = strTag
 End If
 strSQL = strSQL & " AND ("
 For j = 0 To UBound(aryTAGs)
  If Not (IsNull(aryTAGs(j)) Or IsEmpty(aryTAGs(j)) Or aryTAGs(j) = "" Or Len(aryTAGs(j)) < 1) Then
   aryTAGs(j) = Replace(Replace(aryTAGs(j),"}",""),"{","")
   If IsNumeric(aryTAGs(j)) Then
    If j > 0 Then strSQL = strSQL & " OR "
    strSQL = strSQL & "([log_Tag] Like '%{"&aryTAGs(j)&"}%')"
   End If
  End If
 Next
 strSQL = strSQL & ")"
 strSQL = strSQL + " ORDER BY [log_PostTime] DESC "

 Set objRS=Server.CreateObject("ADODB.Recordset")
 objRS.CursorType = adOpenKeyset
 objRS.LockType = adLockReadOnly
 objRS.ActiveConnection=objConn
 objRS.Source=strSQL
 objRS.Open()
 If (not objRS.bof) And (not objRS.eof) Then

   For i=1 To 5 '相关文章数目,可自行设定

    strCC_Count=strCC_Count+1
    strCC_ID=objRS("log_ID")
    strCC_Url=objRS("log_Url")
    strCC_PostTime=objRS("log_PostTime")
    strCC_Title=objRS("log_Title")

    Application.Lock
    strCC=Application(ZC_BLOG_CLSID & "TEMPLATE_ARTICLE_Mutuality")
    Application.UnLock

    If IsNull(strCC_Url) Or IsEmpty(strCC_Url) Or strCC_Url="" Then
    strCC_Url=strCC_ID
    end if

    strCC=Replace(strCC,"<#article/mutuality/id#>",strCC_ID)
    strCC=Replace(strCC,"<#article/mutuality/url#>",ZC_BLOG_HOST & ZC_STATIC_DIRECTORY & "/" & CStr(strCC_Url))
    strCC=Replace(strCC,"<#article/mutuality/posttime#>",strCC_PostTime)
    strCC=Replace(strCC,"<#article/mutuality/name#>",strCC_Title)

    strOutput=strOutput & strCC

  objRS.MoveNext
  If objRS.eof Then Exit For
   Next

 End if

 objRS.Close()
 Set objRS=Nothing

End If

strOutput=Replace(strOutput,vbCrlf,"")
getRelateList="<br/>----<br/><br/>相关文章:<ul>" + strOutput + "</ul>  "

End Function

Z-Blog大访问量异常的解决方法

  Z-Blog是一个很好的单用户Blog系统,我不止一次这么说了,特别是当访问量很大的情况下,Z-Blog的表现也是可圈可点的,唯一的问题可能还是和数据库有关。

  Z-Blog之所以可以应付大访问量的负载,主要是因为其缓存(Cache)技术,在重建页面的时候,将大量数据以缓存文件的方式放在Include目录下,这样对于访客的访问就基本可以不连接数据库,而真正可能出问题的瓶颈,显然就是数据库。

  Z-Blog是基于ASP+ACCESS的,ACCESS数据库存在的问题是非常严重的,当外部连接数增大的时候,ACCESS数据库的处理能力飞快的下降,数百个同时在线连接就可以让ACCESS数据库处于死锁的状态,从而导致网站崩溃。因此,如果你的BLog日访问量有几万IP,那么你使用Z-Blog必须要面对这个数据库性能问题。

  目前Z-Blog 1.5存在的性能问题,就是对于数据库访问的问题(1.6版本已经进行了部分修改)。单个页面中,页面计数器存在对于数据库的直接访问,并且是Update方法的访问,这个访问是会带来麻烦的,由于这个计数器的存在,当在线连接数猛增的时候,Z-Blog的文章页面将出现类似死锁的界面,因为数据库会死掉。同时还会发生的事情是,所有评论留言都会死锁,因为那也是访问数据库。进而所有访问数据库的功能都会死锁。

  当然,这个问题可以使用换SQL Server来解决,不过需要修改Z-Blog的相关代码,而且如果是企业用户,需要购买价格不菲的SQL Server。ACCESS无法解决这个问题,因为其本身有不可调和的内部问题。

  如果不使用换数据库的方法,就只有在代码上下功夫了。根据我的观察,对于数据库的直接访问应该就只有计数器这个部分,我目前想到一个思路,就是将计数器的内容也当作文件写入Cache,系统读计数器,全部从Cache中读取,当进行索引重建的时候,再将Cache中的数据写入ACCESS数据库中,这样就可以做到大部分访问都脱离数据库,当在线连接数很大的时候,性能问题也有可能得到一定的解决。

  当然,这样的功能需要写不少程序代码,如果不想写代码,而又遇到异常的大访问量,那么修改Z-Blog模板删除页面计数器功能,也可以临时解决一些问题,代价是文章无法统计点击数了。

2006年10月11日星期三

朝鲜核试验Google Earth坐标

  昨天,刚刚宣布要进行核试验的北朝鲜,不顾国际社会的谴责,在接近中朝边境的地区进行了一次地下核试验。

  中国这次真的急了,以建国以来少有的对朝鲜最强硬的措辞,严厉谴责北朝鲜“悍然”进行核试炸。

  这次核爆炸的地点实在是太敏感了,中国自己都是一直在人烟稀少的新疆沙漠中进行核试验,而东北是中国重要的重工业区,人口密集,北朝鲜在这么重要的地区附近搞核爆炸,中国能不急吗?万一出现核污染,中国东北不就完了吗。

  据外电报道,北朝鲜核试验的地点是咸镜北道花台360米高山地下坑道内,其具体坐标地址是41°16'40.29"N 129°05'06.06"E,从Google地图上可以看到这是一片山地,山上有一些公路和建筑物。使用Google Earth测量工具,测量出该核爆炸地点距中国东北边境仅70公里,虽然是地下核爆炸,但是对于地下水的污染依旧可能会影响到近在咫尺的东北地区。

北朝鲜地下核试验地点

  北朝鲜地下核试验地点(图) 41°16'40.29"N 129°05'06.06"E

  当然我们知道,Google Earth的地图是1、2年前的,而且对于地下核试验,卫星地图也无法知道地下具体是什么情况。

  虽然使用Google Earth看不了北朝鲜地下核试验,不过可以看到其他一些有趣的军事设施,下面是使用Google Earth看到的一些北朝鲜的军事目标的截图。

北朝鲜泰川空军基地里的飞机

  北朝鲜泰川空军基地里的飞机(图) 39°54'16.30"N 125°29'20.96"E

北朝鲜泰川200兆瓦核反应堆

  北朝鲜泰川200兆瓦核反应堆(图) 39°55'40.08"N 125°34'9.29"E

北朝鲜宁边五兆瓦核反应堆

  北朝鲜宁边五兆瓦核反应堆(图) 39°47'45.21"N 125°45'20.27"E

北朝鲜宁边五十兆瓦的核电站

  北朝鲜宁边五十兆瓦的核电站(图) 39°47'19.86"N 125°45'40.63"E

  安装Google Earth软件的,可以点这里下载我专门制作的一个北朝鲜核试验的KML地标文件,包括北朝鲜核试验的地点、北朝鲜泰川200兆瓦核反应堆、北朝鲜宁边五兆瓦核反应堆、北朝鲜宁边五十兆瓦的核电站、北朝鲜琴湖1000兆瓦的轻水核反应堆。