2009年6月30日星期二

IIS下PHP的ISAPI和FastCGI比较

 

IIS下PHP的ISAPI和FastCGI比较

月光博客

  在Windows IIS 6.0下配置PHP,通常有CGI、ISAPI和FastCGI三种配置方式,这三种模式都可以在IIS 6.0下成功运行,下面我就讲一下这三种方式配置的区别和性能上的差异。

  1、CGI(通用网关接口/Common Gateway Interface)一般是可执行程序,例如EXE文件,和WEB服务器各自占据着不同的进程,而且一般一个CGI程序只能处理一个用户请求。这样,当用户请求数量非常多时,会大量占用系统的资源,如内存、CPU时间等,造成效能低下。

  2、ISAPI(Internet Server Application Program Interface)是微软提供的一套面向WEB服务的API接口,它能实现CGI提供的全部功能,并在此基础上进行了扩展,如提供了过滤器应用程序接口。ISAPI应用大多数以DLL动态库的形式使用,可以在被用户请求后执行,,在处理完一个用户请求后不会马上消失,而是继续驻留在内存中等待处理别的用户输入。此外,ISAPI的DLL应用程序和WEB服务器处于同一个进程中,效率要显著高于CGI。

  在Windows Server 2003的IIS6下配置ISAPI方式的PHP,配置方法是,在IIS的"WEB服务扩展"中,添加一个新的WEB服务扩展,程序后缀为PHP,ISAPI程序为php5isapi.dll,然后再"环境变量"-"系统变量"中增加变量名PHPRC,数值为php.ini的路径,在Internet信息服务管理器中,选择网站或应用程序的根目录,打开目录属性页(右键选择"属性"),再选择"主目录"。点击"配置"按钮,选择"映射"Tab页。点击"添加...",在"可执行文件"设为: c:\php\php5isapi.dll,扩展名设为.php,选择"确认文件是否存在",然后"确定"保存设置。重启服务器即可完成PHP的配置。

  3、FastCGI是可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。传统的CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性等。

  FastCGI已经集成于IIS7,也支持IIS6,在IIS6中的安装方法可参见微软的官方文档,我这里简单翻译一下。

  先点这里下载一个32位的FastCGI extension for IIS,然后将其安装,安装后的文件应该放到system32\inetsrv目录下。

  之后打开system32\inetsrv目录,执行下面的语句,其中c:\php为你的PHP目录,可以修改为其他数值。

  cscript fcgiconfig.js -add -section:"PHP" -extension:php -path:"c:\php\php-cgi.exe"

  在Internet信息服务管理器中,选择网站或应用程序的根目录,打开目录属性页(右键选择"属性"),再选择"主目录"。点击"配置"按钮,选择"映射"Tab页。点击"添加...",在"可执行文件"设为: c:\windows\system32\inetsrv\fcgiext.dll,扩展名设为.php,选择"确认文件是否存在",然后"确定"保存设置。

  修改php.ini文件,增加如下语句:

  fastcgi.impersonate = 1
  cgi.fix_pathinfo = 1
  cgi.force_redirect = 0

  之后打开system32\inetsrv目录,执行以下语句:

  cscript fcgiconfig.js -set -section:"PHP" -InstanceMaxRequests:10000
  cscript fcgiconfig.js -set -section:"PHP" -EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000

  最后,配置c:\php目录的安全性,使得IIS_WPG组对于这个目录有读取和执行的权限。

  这时候,基于FastCGI的PHP就成功配置到IIS6上了。

  不过根据我自己的测试,FastCGI的性能比ISAPI的好像高不了多少,不知道Windows Server 2008下的IIS7是不是会好一些。这里是微软提供的基于内置FastCGI的IIS7安装PHP的方法。

这篇文章来自:

月光博客

2009年6月28日星期日

Google Trends和Google Insights

 

Google Trends和Google Insights

月光博客

  Google Trends(谷歌趋势)发布过中文版,是Google推出的一款基于搜索日志分析的应用产品,通过这个工具可以知道某一搜索关键词在Google被搜索的频率和相关统计数据。Google Insights是Google推出的一个新服务,目前只有英文版,功能比Google Trends多一些,相当于Google Trends的升级版,主要用于市场分析等商业用途。

  Google Insights和Google Trends的区别:

  Google官方解释,Google Insights和Google Trends使用相同的数据来源,Google Trends主要面向那些研究人员或广告商的那类需要更多更高级功能的用户。

  因此我们知道,Google Trends和Google Insights由于使用同一数据来源,因此统计的结果理论上应该是相同的。

  继续昨天讨论的问题,对于"儿子"这个关键字的统计,Google Trends搜索"儿子"和Google Insights搜索"儿子"的统计的结果的确完全一致,统计曲线吻合,两者均将6月6日和6月19日做为两个峰值。

搜索"儿子"

Google Trends搜索"儿子"

搜索"儿子"

Google Insights搜索"儿子"

  对于其他关键字的搜索,两者的统计曲线也是完全吻合的,大家可以搜索一下自己所想得到的热门关键字来看看,例如"百度"、"QQ"等。

  但是,对于"儿子与情人"、"儿子母亲"等等类似的关键字,两者的统计却不尽相同。

  在Google Trends上看,之前搜索量很低,6月18号开始出现大量搜索,之后呈现不规则的曲线下降,后来还有反弹。

搜索"儿子与情人"

  而Google Insights显示从11号开始出现"线性"增长趋势,到了17号达到顶峰,之后出现"线性"下降趋势,也就是说该关键词的搜索量按照固定比例增加,第一天10个,第二天20个,第三天30个,这种搜索现象非常奇特。

 

搜索"儿子与情人"

  我觉得,Google Insights对于"儿子与情人"等关键字的统计数据有很多不合理的地方。

  首先是搜索顶点,6月18号央视新闻之后,该关键词的搜索量不升反降,和Google Trends相矛盾,也不符合常识,因为6月18号之后肯定会有大量网民对其进行搜索验证的,从而带动这个关键词搜索量上升。

  其次是搜索曲线,对于"儿子与情人"等等关键字,Google Trends显示的是一条曲线,先暴增,然后下降,然后再增,较为符合常识,而Google Insights显示的是一条线性增长和下降的直线,也就是说,每天增加的搜索量按比例呈有规则的增长,并且按比例下降,特别是18号之后也没有任何波动,依旧呈现"线性"下降趋势,这显然不符合常识。

  因此可以看出,Google Insights对于上述几个关键词的统计结果有很多不合常识的地方,和实际情况以及Google Trends的数据有很多矛盾之处,相对来说Google Trends的统计数据更具准确性,更值得参考,做分析和判断应该以Google Trends的数据为准。

这篇文章来自:

月光博客

2009年6月25日星期四

国内外DNS服务器地址列表

 

国内外DNS服务器地址列表

月光博客

  DNS(Domain Name System)是域名解析服务器的意思,它在互联网的作用是把域名转换成为网络可以识别的IP地址。目前国内电信运营商通过使用DNS劫持的方法,干扰用户正常上网,使得用户无法访问Google、Gmail、Google AdSense、Google Maps等常用服务,昨天我介绍了使用OpenDNS的方法解决这个问题,由于OpenDNS的服务器在美国,如果使用的人多了有可能会速度变慢,因此今天我介绍一些其他国外的DNS服务器地址,供大家选择。

  通常来说,香港、韩国、日本等国的DNS服务器速度会比较快,大家可以多用几个试试,尽量选择一个自己访问最快的DNS服务器,中国的电信运营商都是流氓,DNS服务器,早换早轻松。

  港澳台DNS服务器地址

  香港:
  205.252.144.228
  208.151.69.65
  202.181.202.140
  202.181.224.2

  澳门:
  202.175.3.8
  202.175.3.3

  台湾:
  168.95.192.1
  168.95.1.1

  国外DNS服务器地址

  美国:
  208.67.222.222
  208.67.220.220
  165.87.13.129
  165.87.201.244
  205.171.3.65
  205.171.2.65
  198.41.0.4
  198.41.0.4
  198.32.64.12
  192.33.4.12
  192.203.230.10
  192.5.5.241
  192.112.36.4
  192.36.148.17
  192.58.128.30
  192.9.9.3
  193.0.14.129
  128.9.0.107
  128.8.10.90
  66.33.206.206.
  208.96.10.221
  66.33.216.216
  205.171.3.65
  205.171.2.65
  165.87.13.129
  165.87.201.244

  加拿大:
  209.166.160.36
  209.166.160.132

  英国:
  193.0.14.129

  日本
  202.12.27.33
  202.216.228.18

  韩国:
  164.124.101.31
  203.248.240.31
  168.126.63.60
  168.126.63.61

  新西兰:
  202.27.184.3

  泰国:
  209.166.160.132
  202.44.8.34
  202.44.8.2

  印度:
  202.138.103.100
  202.138.96.2

  国内各省市DNS服务器地址

  北京:
  202.96.199.133
  202.96.0.133
  202.106.0.20
  202.106.148.1
  202.97.16.195
  202.138.96.2

  深圳:
  202.96.134.133
  202.96.154.15

  广州:
  61.144.56.100
  61.144.56.101

  广东:
  202.96.128.86
  202.96.128.143

  上海:
  202.96.199.132
  202.96.199.133
  202.96.209.5
  202.96.209.133

  天津:
  202.99.96.68
  202.99.104.68

  广西:
  202.96.128.68
  202.103.224.68
  202.103.225.68

  河南:
  202.102.227.68
  202.102.245.12
  202.102.224.68

  河北:
  202.99.160.68

  福建:
  202.101.98.54
  202.101.98.55

  厦门:
  202.101.103.55
  202.101.103.54

  湖南:
  202.103.0.68
  202.103.96.68
  202.103.96.112

  湖北:
  202.103.0.68
  202.103.0.117
  202.103.24.68

  江苏:
  202.102.15.162
  202.102.29.3
  202.102.13.141
  202.102.24.35

  浙江:
  202.96.102.3
  202.96.96.68
  202.96.104.18

  陕西:
  202.100.13.11
  202.100.4.16
  202.100.4.15
  202.100.0.68

  山东:
  202.102.154.3
  202.102.152.3
  202.102.128.68
  202.102.134.68

  山西:
  202.99.192.68
  202.99.198.6

  四川:
  202.98.96.68
  61.139.2.69

  重庆:
  61.128.128.68

  成都:
  202.98.96.68
  202.98.96.69

  辽宁:
  202.98.0.68
  202.96.75.68
  202.96.75.64
  202.96.69.38
  202.96.86.18
  202.96.86.24

  安徽:
  202.102.192.68
  202.102.199.68
  10.89.64.5

  吉林:
  202.98.5.68
  202.98.14.18
  202.98.14.19

  江西:
  202.101.224.68
  202.109.129.2
  202.101.240.36

  新疆:
  61.128.97.74
  61.128.97.73

  贵州:
  202.98.192.68
  10.157.2.15

  云南:
  202.98.96.68
  202.98.160.68

  黑龙江:
  202.97.229.133
  202.97.224.68
  219.150.32.132

  海南:
  202.100.192.68
  202.100.199.8

  宁夏:
  202.100.0.68
  202.100.96.68

  甘肃:
  202.100.72.13

  内蒙古:
  202.99.224.68

  青海:
  202.100.128.68

  全球路由DNS服务器

  全球只有13台路由DNS服务器(Route Server),在13台路由服务器中,名字分别为"A"至"M",其中10台设置在美国,另外各有一台设置于英国、瑞典和日本。下表是这些机器的管理单位、设置地点及最新的IP地址。

  名称  管理单位及设置地点    IP地址
  A INTERNIC.NET(美国,弗吉尼亚州) 198.41.0.4
  B 美国信息科学研究所(美国,加利弗尼亚州) 128.9.0.107
  C PSINet公司(美国,弗吉尼亚州) 192.33.4.12
  D 马里兰大学(美国马里兰州) 128.8.10.90
  E 美国航空航天管理局[NASA](美国加利弗尼亚州) 192.203.230.10
  F 因特网软件联盟(美国加利弗尼亚州) 192.5.5.241
  G 美国国防部网络信息中心(美国弗吉尼亚州) 192.112.36.4
  H 美国陆军研究所(美国马里兰州) 128.63.2.53
  I Autonomica公司(瑞典,斯德哥尔摩) 192.36.148.17
  J VeriSign公司(美国,弗吉尼亚州) 192.58.128.30
  K RIPE NCC(英国,伦敦) 193.0.14.129
  L IANA (美国,弗吉尼亚州) 198.32.64.12

这篇文章来自:

月光博客

2009年6月24日星期三

Google国际域名遭到域名劫持

 

Google国际域名遭到域名劫持

月光博客

  今天晚上,包括Google.com在内的绝大多数Google国际网站,例如Gmail、Google Reader、Google Docs等,均出现无法访问的情况。

  根据我的分析,这次封锁Google的方式并不新鲜,是采用域名劫持(DNS劫持)的方法,通过技术手段,将Google的各类境外域名解析到一个错误的地址,使得Google.com无法访问。

  经过我的测试,使用中国大陆境内的DNS服务器,例如202.96.134.133是无法正确解析出Google的IP地址,而使用境外的OpenDNS进行域名解析,就可以正确解析出Google的IP地址。如下图所示。

Google域名遭到域名劫持

  解决的方法是使用境外的域名解析服务器(DNS服务器),例如OpenDNS的服务,设置方法是,在"设置"-"网络连接"中找到宽带上网的连接,打开网络连接属性,选择Interner协议(TCP/IP)的属性页里,不要选择自动获取DNS,而要选择"使用下面的DNS服务器地址",首选DNS服务器和备用DNS服务器分别设置为208.67.222.222和208.67.220.220,如下图所示,完成后重新连接上网,就可以摆脱服务商对我们的DNS劫持。

网络连接属性

网络连接属性

  最后,我强烈谴责这种对于Google网站进行域名劫持的无耻行为。

  名词解释(来源于维基百科):

  DNS是域名系统 (Domain Name Server) 的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务。在Internet上域名与IP地址之间是一对一(或者一对多)的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。

  域名解析的基本原理是把域名翻译成IP地址,以便计算机能够进一步通信,传递网址和内容等。

  域名劫持就是在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则直接返回假的IP地址或者什么也不做使得请求失去响应,其效果就是对特定的网址不能访问或访问的是假网址。

 

这篇文章来自:

月光博客

解决中文Google的跳转问题

 

解决中文Google的跳转问题

月光博客

  从两年前开始,中国用户在使用Google搜索中,会自动从google.com跳转到google.cn,Google官方对此的解释是,google.com跳转到google.cn是为了对中国用户提供更具有针对性的搜索服务,很多新开发的中文google服务只有在google.cn上才会体现。

  不过,由于种种原因(特别是最近发生的一系列针对google.cn的事件),用户可能并不想使用google.cn,而希望使用google.com,因为Google的跳转是根据浏览器设置的语言来跳转的,因此修改浏览器默认语言就可以禁止google.com跳转到google.cn.

  对于IE用户来说,在工具—Internet选项—常规—语言中,添加英语(美国),并将其移动到最上面,使其成为默认语言,这样就可以把IE设置成使用英语做默认语言。

  设置好后,在IE中打开www.google.com,就不会自动跳转到www.google.cn,搜索时也是一样。

  IE设置的界面如下图所示。

IE设置

  对于Firefox用户来说,在工具—选项—内容—语言选择中设置,设置方法和IE相同。设置界面如下图所示。

Firefox设置

  对于Google Chrome用户来说,在选项—中级用户选项—更改字体和语言设置—语言中修改,设置方法和IE相同。设置界面如下图所示。

Chrome设置

 

 

这篇文章来自:

月光博客

2009年6月23日星期二

转发:中文分词和TF-IDF

 

中文分词和TF-IDF

月光博客

  中文分词(Chinese Word Segmentation)指的是将一个汉字序列切分成一个一个单独的词。中文分词是文本挖掘的基础,对于输入的一段中文,成功的进行中文分词,可以达到电脑自动识别语句含义的效果。

  TF-IDF(term frequency–inverse document frequency)是一种用于信息搜索和信息挖掘的常用加权技术。在搜索、文献分类和其他相关领域有广泛的应用。

  TF-IDF的主要思想是,如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TF词频(Term Frequency)指的是某一个给定的词语在该文件中出现的次数。IDF反文档频率(Inverse Document Frequency)的主要思想是:如果包含词条的文档越少,IDF越大,则说明词条具有很好的类别区分能力。

  使用TF*IDF可以计算某个关键字在某篇文章里面的重要性,因而识别这篇文章的主要含义,实现计算机读懂文章的功能。

  常见中文分词开源项目:

  SCWS

  Hightman开发的一套基于词频词典的机械中文分词引擎,它能将一整段的汉字基本正确的切分成词。采用的是采集的词频词典,并辅以一定的专有名称,人名,地名,数字年代等规则识别来达到基本分词,经小范围测试大概准确率在 90% ~ 95% 之间,已能基本满足一些小型搜索引擎、关键字提取等场合运用。45Kb左右的文本切词时间是0.026秒, 换算完毕大概是 1.5MB文本/秒。支持PHP4he PHP 5。

  ICTCLAS:  

  这可是最早的中文开源分词项目之一,ICTCLAS在国内973专家组组织的评测中活动获得了第一名,在第一届国际中文处理研究机构SigHan组织的评测中都获得了多项第一名。ICTCLAS3.0分词速度单机996KB/s,分词精度98.45%,API不超过200KB,各种词典数据压缩后不到3M.ICTCLAS全部采用C/C++编写,支持Linux、FreeBSD及Windows系列操作系统,支持C/C++、C#、Delphi、Java等主流的开发语言。

  庖丁解牛分词

  Java 提供lucence 接口,仅支持Java语言。

  CC-CEDICT

  一个中文词典开源项目,提供一份以汉语拼音为中文辅助的汉英辞典,截至2009年2月8日,已收录82712个单词。其词典可以用于中文分词使用,而且不存在版权问题。Chrome中文版就是使用的这个词典进行中文分词的。

  基于VB/ASP的中文分词

  上面的开源项目没有给予VB和ASP的,这里提供一个简单的VB/ASP类,加上词典之后就可以进行分词了,注意这个类只供演示,其分词速度极慢不适合实际应用。

  类名为:WordSplit

Private rootTable As String

Private Function GetCount(ByVal s As String) As Long
    GetCount = InStr(1, rootTable, s)
End Function

Public Function WordCount(ByVal strString As String, ByVal strGetWord As String) As Long
    Dim k
    k = Split(strString, strGetWord)
    WordCount = UBound(k)
End Function


' 分析输入的字符串,将其切割成一个个的词语。
' <param name="s">待切割的字符串</param>
' <returns>所切割得到的中文词语数组</returns>

Public Function ParseChinese(ByVal s As String, ByVal separator As String) As String
    Dim lngLength As Long
    Dim strTemp As String
    Dim ArrayList As String
    Dim i, j

    ArrayList = ""
    lngLength = Len(s)
    i = 1
    While i < lngLength
        strTemp = Mid(s, i, 1)
        If GetCount(strTemp) > 1 Then
            j = 2
            While i + j < lngLength + 1 And GetCount(Mid(s, i, j)) > 0
                j = j + 1
            Wend
            strTemp = Mid(s, i, j - 1)
            i = i + j - 2
        End If
        i = i + 1
        'WordAdd (temp)
        ArrayList = ArrayList + strTemp + separator
    Wend
    ParseChinese = ArrayList

End Function

Private Sub Class_Initialize()
    Dim fso, templetfile, txtfile
    templetfile = App.Path + "\ChineseDictionary.txt"
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set txtfile = fso.OpenTextFile(templetfile, 1)
    rootTable = txtfile.ReadAll
    txtfile.Close
End Sub

  调用示例:

    strInput = "中文分词指的是将一个汉字序列切分成一个一个单独的词。中文分词是文本挖掘的基础,对于输入的一段中文,成功的进行中文分词,可以达到电脑自动识别语句含义的效果。"
    Dim strWordSplit As New WordSplit
    strSubject = strWordSplit.ParseChinese(strInput, "|")
    arrSubject = Split(strSubject, "|")
 

这篇文章来自:

月光博客

SixApart发布了MovableType4.261

 

SixApart发布了MovableType4.261

SEO 网站优化推广


很显然,之前的4.26有很明显的瑕疵,所以这次的4.261发布的如此之快。

* The Schema Version is now updated to 4.00071, which was omitted in 4.26. This change will only affect users who have already upgraded to Movable Type 4.26, not those on 4.25 and below. The schema change adds indexes to several tables.

* A typo in a 4.26 commit where a user clicks the Cancel button on the Display Options flyout did not necessarily cancel the user's actions; the 4.261 fix corrects this behavior.

* Fixed the Schwartz error exposed as a result of a previous 4.26 commit: 'Can't call method
"registry" on an undefined value at lib/MT/Component.pm line 558 during global destruction'.

vi
当然,作为MovableType的Fans,本Blog已经升级到最新的4.261版。

对了,为了减少http请求,对于订阅的按钮,做了些改动,增加了若干订阅按钮。

具体而言,就是使用了CSS sprites技术,把若干小图片整合到一张图片上,然后用CSS控制其显示,这种做法可以减少http请求,比如10张图片,合并到一张图片,就减少了九次http请求。节省了页面载入时间,用户感觉速度快了。

这篇文章来自:

SEO 网站优化推广

2009年6月20日星期六

谷歌中国被停止境外网页搜索和搜索建议功能

 

谷歌中国被停止境外网页搜索和搜索建议功能

月光博客

  据新华网报道,中央电视台在昨晚的《新闻联播》及《焦点访谈》节目中指责"谷歌中国"网站存在大量淫秽色情和低俗信息内容,同时互联网举报中心对谷歌中国网站进行强烈谴责,要求其彻底清理色情信息,并建议相关执法部门依法处罚。之后,国家有关部门召见"谷歌中国"网站负责人,对"谷歌中国"网站大量传播淫秽色情内容进行执法谈话,宣布对"谷歌中国"网站的处罚措施,暂停该网站境外网页搜索业务和联想词搜索业务,并责令其立即进行整改,彻底清理淫秽色情和低俗内容。

  现在登录Google.cn,其"搜索建议"功能果然已经无法使用了,对于境外网站的搜索是否关闭目前尚不得而知,据我所知,很多国内的网站主为了避免备案,都购买和使用了国外的虚拟主机,如果Google.cn关闭境外网页搜索功能,则大量国外中文网站将失去来自Google的流量,可谓损失重大。对于Google自身来说,这也将极大冲击Google的用户搜索体验,使得原本使用Google.cn的用户转而使用Google.com或其他搜索引擎,但愿现在Google.com不会自动转向Google.cn了。

  昨天的"焦点访谈"栏目也"火"了另一个人,就是那个被采访的"大学生"高也,此人在节目中声色俱厉地对谷歌中国进行了谴责,还举个他同学的例子做为证据,可惜经过网友的人肉搜索,原来此人不仅不是大学生,而且还是焦点访谈栏目组的实习人员。小高同学目前正在承受网民暴风骤雨般的攻击,已经被迫关闭自己的新浪博客和校内等网络地址,打算隐居了,这对他的人生经历也算是一个教训,早知今日,何必当初呢。

  "谨言慎行"是一种做人的美德,就想那个曾经说过"很黄很暴力"的小女孩一样,睁着眼睛说瞎话并不是一件困难的事情,重要的是,说话要负责任,特别是一个人在国家电视台这样的垄断媒体上说话,说话者的权力会被无限放大,这时候,说话人不仅仅是表达自己的声音,而且是影响电视机前的大众,这就是权力。如果你不珍惜自己的话语权,用幼稚的谎话去愚弄和欺骗大众,那么最终会被这个社会无情地惩罚。

这篇文章来自:

月光博客

2009年6月18日星期四

安全迁移网站的技巧

 

安全迁移网站的技巧

月光博客

  在不同的主机上迁移同一个网站,需要一定的技巧,今天我就介绍一些同一域名下将网站从一个主机迁移到另一个主机的技巧,以避免网站因为迁移而造成不必要的损失。

  1、迁移准备

  先将原始网站的评论等更新功能关闭,接着把原始网站的文件、数据库等信息进行备份,然后下载到本地,然后将网站内容完全上传部署到另一个主机上,通过修改hosts的方法,将网站的域名指向新的IP地址,手动验证网站可以正常访问。

  2、迁移操作

  接着,选择一个访问量少的时段,例如凌晨时刻,通过修改域名DNS(Domain Name Server)的A记录实现网站的迁移,注意不要通过删除A记录然后增加一个新的A记录来实现,那样会造成短时间的网站无法访问。

  3、迁移过程

  将原有网站内容保存至少半个月的时间(但不一定需要更新),保证搜索引擎使用原来的IP地址仍然可以访问到内容,如果无法做到这一点,那也要将原始网站的完全关闭,使原有IP无法访问,切不可保持原始网站开放,访问时候却得到404错误的情况发生。

  3、迁移结束

  半个月后,可以彻底关闭原有网站的WEB服务,此时,搜索引擎大多已经可以正常访问新的网站地址了,网站迁移结束。

这篇文章来自:

月光博客

转发:MovableType也用上memcached加速

 

MovableType也用上memcached加速

SEO 网站优化推广


MovableType是原生支持Memcached的,Memcached作为一个缓存架构,可以减少数据库负荷,也能让程序运行的更快更可靠。

Memcached的安装,之前已经介绍过了,这里还有一个SixApart出的安装说明

要让MovableType也能用上memcached加速,只需要在mt-config.cgi配置文件中手工添加一句。

MemcachedServers 127.0.0.1:11211

这里的127.0.0.1是memcached所在的服务器IP,11211是其端口。
如果有多个Memcached服务器,那么可以一起使用,在配置文件中,写入多个服务器的参数,比如像下面这样:
MemcachedServers 127.0.0.1:11211
MemcachedServers 127.0.0.2:11211
MemcachedServers 127.0.0.3:11211

修改完配置文件后,你可以登录MovableType后台,在system overview》tools下,看system information页面,在最前的一段,如果有像下面这样,那就说明memcached已经生效,MovableType已经工作在Memcached上了。

mt-memcached.png

从重建全部页面来看,服务器负荷增加并不大,速度也较之前的快。

这篇文章来自:

SEO 网站优化推广

Google PageRank的新改变

 

Google PageRank的新改变

SEO 网站优化推广


今天拜读了Matt Cutts的PageRank sculpting一文,了解到Google PageRank的确有改变了,同时也证实了一些我之前的猜测。

1)Google PageRank的确在传递过程中有衰减因子的作用,估计有时间因素,还有比例关系等等。

2)重要的是nofollow属性的改变。
Google再次重申nofollow的确不传递pagerank,也不传递锚文本。但在过去某些系统漏洞的情况下,锚文本还是有传递的个案。

更为重要的,我认为最重要Matt在文章中传递出的信息,就是PageRank会有丢失的现象。

So what happens when you have a page with "ten PageRank points" and ten outgoing links, and five of those links are nofollowed? Let's leave aside the decay factor to focus on the core part of the question. Originally, the five links without nofollow would have flowed two points of PageRank each (in essence, the nofollowed links didn't count toward the denominator when dividing PageRank by the outdegree of the page). More than a year ago, Google changed how the PageRank flows so that the five links without nofollow would flow one point of PageRank each.
这个例子说明,当一个页面的PR权重为10点,该页面有10个指向其它网站的链接,其中5个是有nofollow的链接,过去的算法是五个没有nofollow的链接,每个会传递出2点的PR权重,也就是均分到这5个链接。而在一年前,Google改变了他们的做法,5个没有nofollow的链接每个也只有1点权重被传递出去。那么原来的10点只传递出5点,消失的就是另外5点权重,这样的结果也就表明,在网站内部链接使用nofollow,并不能节约pagerank,也不可能把PageRank权重按照自己的设计,以nofollow做为导向的工具,这没用,只有反效果,结果就是丢失PR权重。

按照Matt的建议,基本上不用把nofollow放在一个重要的地方,就让链接在网站中自由流动就好,只要网站的架构是易于导航的,那就没有什么问题。如果一定要说nofollow放在哪里好,那就是注册页面之类的页面。

这篇文章来自:

SEO 网站优化推广

2009年6月17日星期三

利用U盘进行软件加密的方法

 

利用U盘进行软件加密的方法

月光博客

  一般的U盘不具备加密的功能,虽然U盘和加密狗外形有一些相似,但是内部完全不一样的,U盘只是一个存储器芯片和简单的附属电路,而现在的智能卡加密狗都具有一个单独的CPU或者加密芯片,可以执行相当复杂的加密算法。

  有的软件开发商有这样一种需求,就是使用U盘发布软件的同时,想要节约成本,防止U盘中的软件被复制,但又不想再购买昂贵的加密狗,因此想要把软件绑定在U盘上执行,当U盘拔下来的时候,软件就不能正常运行,和我先前介绍的绑定硬件指纹相似,使用绑定U盘的方式加密软件。

  在对软件安全不是特别在意的情况下,可以在软件中采用绑定U盘内部ID的方式来实现这种加密,先使用程序将U盘的ID读出来,然后根据这个ID生成License文件,当解密者将U盘内的文件复制到其他电脑的时候,软件执行过程中读取U盘ID失败,因此就无法校验License。

  通常情况下两个U盘的ID是不相同的,因此即使将软件复制到另外一个U盘,软件执行的时候,根据U盘ID验证License,也会出现不匹配的现象,这样就实现了软件绑定U盘的加密方式。

  需要指出的是,这种U盘加密并不算安全,大多数U盘厂商有内部量产工具,可以修改U盘的内部ID号码,这就存在了复制U盘的可能性,但对于普通用户来说,通常没有修改U盘内部ID的能力,因此也具有一定的加密性。

  这个加密方法中,读取U盘ID号的函数的VB源代码如下所示:

    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * From Win32_USBHub")
    For Each objItem In colItems
        a = objItem.DeviceID
        If InStr(a, "VID") Then b = Split(a, "\")
        USB_ID = b(UBound(b))
    Next
 

这篇文章来自:

月光博客

2009年6月16日星期二

同时更新Twitter、饭否、嘀咕和做啥

 

同时更新Twitter、饭否、嘀咕和做啥

月光博客

  开发了一个程序,可以一次同时更新Twitter、饭否、嘀咕和做啥这四个微博客,使用条件是这四个系统都使用相同的用户名和密码。

  程序的地址在这里:http://www.williamlong.info/twitter/

  源程序代码如下:

<%@ CODEPAGE=65001 %>

<%
If Request("submit")<>"" Then

 Dim xmlhttp
 Set xmlhttp = Server.CreateObject("Microsoft.XMLHTTP")

 Response.Cookies("save_username")=Request("username")
 Response.Cookies("save_username").Expires=Date+365
 Response.Cookies("save_password")=Request("password")
 Response.Cookies("save_password").Expires=Date+365
 username = Request("username")
 password = Request("password")

 post_status = "status=" + server.URLencode(Request("updateStatus"))

 If Request("twitter") = 1 Then
  xmlhttp.Open "POST", "http://" & username & ":" & password & "@twitter.com/statuses/update.xml", False
  xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
  xmlhttp.setRequestHeader "Content-Length", Len(post_status)
  xmlhttp.Send (post_status)
  Response.Write "twitter OK." 'xmlhttp.responseText
 End If
 
 If Request("fanfou") = 1 Then
  xmlhttp.Open "POST", "http://" & username & ":" & password & "@api.fanfou.com/statuses/update.xml", False
  xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
  xmlhttp.setRequestHeader "Content-Length", Len(post_status)
  xmlhttp.Send (post_status)
  Response.Write "fanfou OK." 'xmlhttp.responseText
 End If

 If Request("digu") = 1 Then
  post_status = "content=" + server.URLencode(Request("updateStatus"))
  xmlhttp.Open "POST", "http://" & username & ":" & password & "@api.digu.com/statuses/update.xml", False
  xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
  xmlhttp.setRequestHeader "Content-Length", Len(post_status)
  xmlhttp.Send (post_status)
  Response.Write "digu OK." 'xmlhttp.responseText
 End If

 If Request("zuosa") = 1 Then
  xmlhttp.Open "POST", "http://" & username & ":" & password & "@api.zuosa.com/statuses/update.xml", False
  xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
  xmlhttp.setRequestHeader "Content-Length", Len(post_status)
  xmlhttp.Send (post_status)
  Response.Write "zuosa OK." 'xmlhttp.responseText
 End If

 Set xmlhttp = Nothing
 response.end
Else

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" lang="zh-CN">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 <meta http-equiv="Content-Language" content="zh-CN" />
 <title>更新状态</title>
<script language="javascript"> 
function countChar(textareaName,spanName)

 document.getElementById(spanName).innerHTML = 140 - document.getElementById(textareaName).value.length;

</script>
</head>
<body>
 <form method="post" action="<%= Request.ServerVariables("URL")%>">
  <p>
   <textarea tabindex="1" id="updateStatus"  name="updateStatus" rows="6" cols="40" onkeydown='countChar("updateStatus","counter");' onkeyup='countChar("updateStatus","counter");'></textarea>
  </p>
  <p>
   <label><input tabindex="2" type="submit" id="submit" name="submit" value="  发     布  " /></label>    可以输入 <span id="counter">140</span> 字
  </p>
  <p>
   <label>用户名:</label>
   <input tabindex="3" type="text" name="username" id="username" value="<%= Request.Cookies("save_username")%>" />
  </p>
  <p>
   <label>密 码:</label>
   <input tabindex="4" type="password" name="password" id="password" value="<%= Request.Cookies("save_password")%>" />
  </p>
  <p>
   <label><input type="checkbox" id="twitter" name="twitter" value="1" checked="checked"> Twitter </label><label><input type="checkbox" id="fanfou" name="fanfou" value="1" checked="checked"> 饭否 </label><label><input type="checkbox" id="digu" name="digu" value="1" checked="checked"> 嘀咕 </label><label><input type="checkbox" id="zuosa" name="zuosa" value="1" checked="checked"> 做啥</label>
  </p>
 </form>
</body>
</html>

<%
End if
%>
 

这篇文章来自:

月光博客

2009年6月15日星期一

转发:在JavaScript中实现统计文本框Textarea字数

 

在JavaScript中实现统计文本框Textarea字数

月光博客

  现在流行的Twitter等微博客网站,有一个很好的用户体验,就是在文本框中输入文字的时候,会自动统计输入的字符,并显示用户还能输入的字符,在限制了140个字的微博客中,这样的小提示可以很好的增强用户体验。

  如果实现这种技术呢,我进行了一些研究,发现实现其实挺简单,几行代码就能完成输入字符统计功能,经过实际测试,其对文字的统计与Twitter等微博客的完全相同。

  以下是相关的JavaScript代码:

<script language="javascript"> 
function countChar(textareaName,spanName)

 document.getElementById(spanName).innerHTML = 140 - document.getElementById(textareaName).value.length;

</script> 
可以输入<span id="counter">140</span>字<br/>
<textarea id="status"  name="status" rows="6" cols="40" onkeydown='countChar("status","counter");' onkeyup='countChar("status","counter");'></textarea>

这篇文章来自:

月光博客

2009年6月14日星期日

从技术层面分析“绿坝-花季护航”存在的问题

 

从技术层面分析"绿坝-花季护航"存在的问题

月光博客

  工信部日前下发《关于计算机预装绿色上网过滤软件的通知》,要求在7月1日之后在我国所有销售的个人电脑预装该软件,这个消息在网络上引起了轩然大波,网友纷纷质疑:软件是否会被强制使用?网友的隐私能否得到有效保护?软件一年的注册费用真的值4170万吗?我先前曾经对此做过一些简单的评论,今天我将从技术层面对"绿坝-花季护航"可能存在的问题再进行一些探讨。

  软件产品的质量是否合格

  从技术上将,"绿坝-花季护航"对于文字信息的审查是通过巨大的关键字库进行过滤分析的,将需要审查的文字进行分词处理,然后进行关键词对比过滤,有可能使用了TF-IDF对词频进行分析以确定文章的主要内容,进行语义分析,同时"绿坝"具有在线更新数据库功能,可以定时同步最新的关键词列表。根据已经公布的一些关键词以及网友实际测试效果来看,在很大程度上会存在"误判"的可能性,有可能会将用户浏览的正常网页或者文档误判为"有害信息"。

  对于色情图片的检测可能使用了一些开源产品,通过肤色分割模型对色情图片进行检测,设置不同的阀值会出现不同的误差率。在很多情况下会错误的将带有大量肤色的图片判断为色情图片,同时,对于黑人的色情图片却无法识别。

  总的来说,该软件在语义分析上的判断准确性,比起百度和Google的语义识别还有很大的差距。

  软件产品的价格

  工信部以每年4170万元的价格购买了"绿坝-花季护航"一年的使用许可,预计的安装量大概是一千万左右,在同类软件产品中,可谓"天价"。

  举个例子,在国家公布的中国软件行业百强之中第20位,开发企业管理软件的用友公司,一年的净利润也只有四亿多元,而且销售的大部分软件都是终身许可的。有使用期限的License通常价格极低甚至免费,做为软件行业的通用做法,一套商业软件通常会有三个月到半年左右的免费试用期,例如360安全卫士自带的NOD32杀毒软件就可以免费试用半年,在这个阶段,用户可以免费使用该软件的全部功能,超过期限后用户可自行决定是否购买该软件,这种方法可以有效避免用户退货的概率。对于装机量巨大的软件,例如腾讯QQ、迅雷等,全部都是免费使用的软件,开发商通过第三方增值服务(例如广告等)就可以获得巨大的收入。如果安装量在千万级别,相信有大量的软件厂商都会愿意免费提供政府使用。工信部在这个软件的招标过程的确令人感到疑惑。

  软件开发商的研发能力

  以中标的金惠和大正两家公司,其研发能力的确令人质疑,在国家公布的中国软件百强名单中根本找不到他们的名字,研发过程中也存在一些不规范的做法,例如未经授权使用国外开源技术等,在安全方面,很多安全公司(如奇虎江民)都发现"绿坝"存在高风险的安全漏洞,黑客可以利用这些漏洞传播病毒,中毒电脑存在严重泄密或被黑客远程控制的可能。

  我先前曾经提到过,这样一款小公司开发的软件很容易存在各种安全漏洞,在未经过广泛测试之前,贸然就安装到大量电脑客户端上,存在极大的安全隐患。一旦"绿坝-花季护航"的安全漏洞被黑客发现,那么所有安装这个软件的电脑都成为黑客的"肉鸡"(受别人远程控制的电脑),大量的"肉鸡"不但可能引发各种网络安全事故,还完全有可能重演先前"暴风影音断网"的灾难。没想到我的这些猜想这么快就被一一证实了。

  预装过滤软件的原因

  工信部原本是通过购买美国Cisco(思科公司)的入侵检测系统(IDS)和入侵防御系统(IPS)来监控和管理中国互联网,但这存在一些问题,Cisco的安全产品目前只能针对文字类型的数据包进行监控和分析,对于图像和视频显得无能为力,同时,Cisco做为一个美国公司,很难保证其产品中会不会留有后门,一旦出现战争等紧急情况,美国可以通过Cisco的产品完全控制中国的互联网通讯,这会使得中国在战争中处于极为不利的局面,而做为国产的华为中兴等公司,又不具备开发这种应对数亿网民的超大型产品的能力,因此,Cisco(思科公司)的产品不但不怕没有生意,还可以漫天要价。

  可能是出于这方面的考虑,工信部才决定通过在客户端电脑预装过滤软件的形式(分布式GFW),来打破Cisco一统天下的局面,这种分布式技术,将大量的计算分配到了客户端的电脑上,实现了单个节点所无法实现的巨大计算能力,并在一定程度上解决了图像智能识别等问题。如果客户端的过滤软件运行良好的话,可以大为减轻电信部署的IDS和IPS的负荷,如果负荷降的足够低的话,就完全可以使用华为的同类产品进行替代,以防止未来战争期间可能出现的变数。

  可惜的是,中标的企业拿出来的软件产品实在不争气,产品质量不过关,存在着大量安全隐患,如果大规模安装的话,可能会带来更多的问题,我建议,如果政府真的要想购买软件的话,中国软件百强中任何一家民营软件企业的研发能力都比这两家强,从那些公司招标的话,不难获得真正物美价廉的软件。

这篇文章来自:

月光博客

2009年6月13日星期六

Facebook正式推出个性化网址

 

Facebook正式推出个性化网址

月光博客

  今天中午十二点,全球最大社交网站Facebook正式推出个性化网址服务,所有六月十日之前注册的Facebook用户都可以在第一时间抢注属于自己的个性化网址。

  Facebook用户可以通过这项新服务为自己建立一个容易以及的个人网址,还可以象个人主页那样来使用他们的Facebook网页,而先前的Facebook用户网址是由一个数列构成的。Facebook的竞争对手MySpace早在2005年就推出了个性化网址服务。

  面对微博客Twitter的威胁,Facebook推出的个性化网址,不但可以提升Facebook的流量,还能帮助Facebook在与Twitter的竞争中再次获得优势。这也是Facebook针对搜索引擎进行优化的一个措施。

  在北京时间中午12:01分,Facebook的个性化网址功能准时开放,令人惊讶的是,短短三分钟Facebook就已经注册了200,000个用户名,15分钟内注册的用户高达500,000个。Facebook这么大型的社交网站,全球所有网民统计时刻登录抢注用户名,居然网页一点也不卡,速度还很快,Facebok的技术能力真的很强,Twitter要好好学学。

月光博客

2009年6月12日星期五

Twitter和饭否的好友管理工具

 

Twitter和饭否的好友管理工具

月光博客

  微博客做为社会化网络的重要组成部分,具有比传统即时通讯(IM)软件更多的优势,例如可以看到好友的好友,可以关注陌生人的信息,但这也带来另一个问题:信息过载。

  如果用户关注(Follow)的用户数非常多,那么将在短时间内接收到大量来自好友的"信息轰炸",这显然会给降低未必可的可用性。微博客和IM不同的是,你Follow的很多人可能你并不认识,为了能更加有效的使用微博客,获得更多有用的信息,对自己的好友进行合理管理势在必然。

  我个人觉得,对于好友的管理可以遵循以下几点:

  1、关注自己认识的朋友或者同事、亲人等。

  2、关注一些知名用户,通常知名用户的关注者都非常多,名气越大,Followers越多。

  3、合理取舍,特别是那些更新频率非常高的"话痨",如果其更新的内容没有太大价值,就删除掉。

  经过这样的好友管理,微博客的使用就会变得更为有效。

  然而可惜的是,目前流行的微博客,如Twitter和饭否等,都没有这样的好友管理工具,在好友界面中,只能看到好友的id和名称,无法看到其关注着数量和更新数量,因此,我通过研究Twitter和饭否的API,写了一个Twitter和饭否的好友管理工具,可以方便的实现上面的功能。

  此工具为开源工具,全部源代码只有20多行,对于Twitter用户来说,先输入用户名和页数,提交后即可看到显示的前100个好友,信息包含好友的id、姓名、关注者(Followers)数量、更新数量,如果要想删除一个好友,点后面的"del"按钮即可删除,点击后会转到Twitter的API服务器,需要输入用户的Twitter用户名和密码才能真正删除。

  由于Twitter对于API有每小时100次查询的限制,超过了这个次数就会封IP,因此这个工具我就不在线提供演示了,大家将下面的ASP代码复制到一个支持ASP的主机空间上运行即可。

Response.Write "<form action=" + Request.ServerVariables("URL") + " method='post'>Twitter Username:<input type='text' id='username' name='username' value='" + Request.Form("username") + "'> Page:<input type='text' id='page' name='page' value='" + Request.Form("page") + "' size='2'> (Page>=1) <input type='submit'> </form>"
if Request.Form("username")<>"" Then
Set xmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
xmlHttp.open "GET", "http://twitter.com/statuses/friends.xml?page=" + Request.Form("page") + "&screen_name=" + Request.Form("username"), false
xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
xmlHttp.send (null)
If (xmlHttp.Status = 200) Then set root = xmlHttp.responseXML.documentElement Else Response.End
for i=1 to root.childNodes.length
set node = root.childNodes.item(i)
if not node is Nothing then
set node2 = node.childNodes.item(1)
name = node2.nodeTypedValue
set node2 = node.childNodes.item(2)
id = node2.nodeTypedValue
set node2 = node.childNodes.item(8)
followers = node2.nodeTypedValue
set node2 = node.childNodes.item(21)
statuses = node2.nodeTypedValue
Response.Write "<form action='http://twitter.com/friendships/destroy.xml?screen_name=" + id + "' method='post' target='_blank'>"
Response.Write "id:" + id + " , name:" + name + " , followers:" + followers + " , updates:" + statuses
Response.Write " - <input type='submit' value='del'></form> <br/>"
end if
next
Set xmlHttp=Nothing
End if

  对于饭否来说,也是同样的道理,其代码和Twitter的非常类似,不过,由于饭否功能的限制,其API并不提供"更新数量"这个字段,因此列表中只显示用户的id、姓名和关注者数量,建议饭否能把"更新数量"这个字段加上去。饭否的好友管理代码如下所示,其安装和运行与Twitter的一样,在线演示点这里

Response.Write "<form action=" + Request.ServerVariables("URL") + " method='post'>Fanfou Username:<input type='text' id='username' name='username' value='" + Request.Form("username") + "'> Page:<input type='text' id='page' name='page' value='" + Request.Form("page") + "' size='2'> (Page>=1) <input type='submit'> </form>"
if Request.Form("username")<>"" Then
Set xmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
xmlHttp.open "GET", "http://api.fanfou.com/users/friends.xml?page=" + Request.Form("page") + "&id=" + Request.Form("username"), false
xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
xmlHttp.send (null)
If (xmlHttp.Status = 200) Then set root = xmlHttp.responseXML.documentElement Else Response.End
for i=1 to root.childNodes.length
set node = root.childNodes.item(i)
if not node is Nothing then
set node2= node.childNodes.item(0)
id = node2.nodeTypedValue
set node2= node.childNodes.item(1)
name = node2.nodeTypedValue
set node2= node.childNodes.item(9)
followers = node2.nodeTypedValue
Response.Write "<form action='http://api.fanfou.com/friendships/destroy/fanfou.xml?id=" + id + "' method='post' target='_blank'>"
Response.Write "id:" + id + " , name:" + name + " , followers:" + followers
Response.Write " - <input type='submit' value='del'></form> <br/>"
end if
next
Set xmlHttp=Nothing
End if

  如果大家对这个工具还有什么意见和疑问,可以加我的Twitter饭否来咨询。

  更新:另外增加了一个嘀咕的好友管理,在线演示点这里,代码如下所示。

Response.Write "<form action=" + Request.ServerVariables("URL") + " method='post'>Digu Username:<input type='text' id='username' name='username' value='" + Request.Form("username") + "'> Page:<input type='text' id='page' name='page' value='" + Request.Form("page") + "' size='2'> (Page>=1) <input type='submit'> </form>"
if Request.Form("username")<>"" Then
Set xmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
xmlHttp.open "GET", "http://api.digu.com/statuses/friends.xml?page=" + Request.Form("page") + "&friendUserId=" + Request.Form("username"), false
xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
xmlHttp.send (null)
If (xmlHttp.Status = 200) Then set root = xmlHttp.responseXML.documentElement Else Response.End
for i=1 to root.childNodes.length
set node = root.childNodes.item(i)
if not node is Nothing then
set node2 = node.childNodes.item(1)
id = node2.nodeTypedValue
set node2 = node.childNodes.item(2)
name = node2.nodeTypedValue
set node2 = node.childNodes.item(8)
followers = node2.nodeTypedValue
set node2 = node.childNodes.item(19)
statuses = node2.nodeTypedValue
Response.Write "id:" + id + " , name:" + name + " , followers:" + followers + " , updates:" + statuses
Response.Write " - <a href='http://api.digu.com/friendships/destroy.xml?userIdOrName=" + id + "' target='_blank'>del</a> </form> <br/>"
end if
next
Set xmlHttp=Nothing
End if

这篇文章来自:

月光博客

2009年6月11日星期四

基于JavaScript的REST客户端框架

 

基于JavaScript的REST客户端框架

月光博客

  现在REST是一个比较热门的概念,REST已经成为一个在Web上越来越常用的应用,基于REST的Web服务越来越多,包括Twitter在内的微博客都是用REST做为对外的API,先前我曾经介绍过"基于REST架构的Web Service设计",并给出了一些服务器端和客户端代码,随着JavaScript的广泛应用,我这里就给出一个轻量级的基于JavaScript的REST客户端框架。

  这个JavaScript客户端主要使用了XMLHttpRequest对象来实现通过HTTP对服务器操作GET、PUT、POST和DELETE以检索和修改资源。值得注意的是,由于安全方面的考虑,Javascript被限制了跨域访问的能力,因此在调用XMLHttpRequest的时候,应该注意跨域访问的问题,比如使用同一个域的动态文件做代理,或者其他方法避开跨域访问的问题。我这里给出的代码主要是根据我先前的那段代码修改过来的,其客户端JavaScript代码如下所示:

function httpGet(url, method, data) {
var xmlhttp;
xmlhttp = new XMLHttpRequest();
xmlhttp.open (method, url + "?" + data, false);
xmlhttp.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
xmlhttp.setRequestHeader ("Content-Length", data.length);
xmlhttp.send (null);
if (xmlhttp.Status = 200) return xmlhttp.responseText;
}

function httpPost(url, method, data) {
var xmlhttp;
xmlhttp = new XMLHttpRequest();
xmlhttp.open (method, url, false);
xmlhttp.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
xmlhttp.setRequestHeader ("Content-Length", data.length);
xmlhttp.send (data);
if (xmlhttp.Status = 200) return xmlhttp.responseText;
}

function httpPut(url, method, data) {
var xmlhttp;
xmlhttp = new XMLHttpRequest();
xmlhttp.open (method, url, false);
xmlhttp.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
xmlhttp.setRequestHeader ("Content-Length", data.length);
xmlhttp.send (data);
if (xmlhttp.Status = 200) return xmlhttp.responseText;
}

function httpDelete(url, method, data) {
var xmlhttp;
xmlhttp = new XMLHttpRequest();
xmlhttp.open (method, url + "?" + data, false);
xmlhttp.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
xmlhttp.setRequestHeader ("Content-Length", data.length);
xmlhttp.send (null);
if (xmlhttp.Status = 200) return xmlhttp.responseText;
}

function test() {
document.write (httpGet("http://localhost/rest/service.asp", "GET", "do=GET"));
document.write (httpGet("http://localhost/rest/service.asp", "POST", "do=POST"));
document.write (httpGet("http://localhost/rest/service.asp", "PUT", "do=PUT"));
document.write (httpGet("http://localhost/rest/service.asp", "DELETE", "do=DELETE"));
}

  我这里使用这个代码编写了一个简单的应用例子,就是管理Twitter好友的应用,大家点这里可以下载使用,因为跨域访问的问题,这段JavaScript只支持IE在本地使用。

这篇文章来自:

月光博客

Google发布Page Speed

 

Google发布Page Speed

SEO 网站优化推广


Google发布了一个可以分析网页速度的工具,Page Speed。
有具体的使用说明,不得不说,Google的帮助文档,是做的最好的。

这是一个工作在Firebug之下的插件,同Yahoo出品的YSlow一样。

在对某个页面做了分析之后,会根据重要程度,作出改进建议,虽然没有一个总分,但每个单项的分数还是有的。

最近一段时间都是在做优化,有基于服务器的优化,有基于程序的优化,也有数据库层面的优化,总之其目的就是为了提高网站页面相应和下载的速度。

不要小看这一点,这不光对用户是有益的,对于SEO也是有益的,因为真正的搜索引擎优化同用户体验是密切相关的。这也是为什么页面下载速度也是页面排名的一个因素,从ppc的角度来看,也是广告质量分的一个重要参数
既然这么重要,为什么不做好呢?对于网站排名和用户都好的事情,一定要做,而且要放到最重要的优先级。

这篇文章来自:

SEO 网站优化推广

2009年6月10日星期三

强制预装过滤软件“绿坝”的疑问

 

强制预装过滤软件"绿坝"的疑问

月光博客

  据工信部的《关于计算机预装绿色上网过滤软件的通知》文件的通知,在2009年7月1日以后,中国境内生产销售的计算机出厂前将预装一款名为"绿坝-花季护航"的绿色上网过滤软件,而进口计算机在中国销售前也将预装该软件,这款软件具备拦截色情内容、过滤不良网站、控制上网时间、查看上网记录等功能。

  对于这样一款大规模预装的软件,我有一些非常疑惑的问题,从"绿坝-花季护航"的功能介绍上来看,这是一款针对儿童的上网过滤软件,当浏览的含有不良信息的网站(例如色情网站)时,"绿坝-花季护航"可以自动关闭浏览器。但是,现在要求所有电脑都预装这个软件,如果用户家庭没有儿童呢?如果使用电脑的用户本身就是成年人呢?难道所有成人都要遵守儿童的标准,不能访问所谓的儿童不宜网站?

  我认为网上色情问题,对于未成年人和成年人,性质完全不一样。对于未成年人来说,保护青少年免受网络色情侵害是正确的;但是对于成年人来说,不应该和儿童采用同样的标准,必须在保护青少年身心健康与保护成年人言论自由之间找到平衡点,否则搞不好就变成限制成年人的言论和阅读自由的行为。

  对于成年人来说,在自己的电脑上看什么信息完全属于自己的私生活,只要不进行传播和复制,就属于个人的私事,有关部门不应该把管理之手伸到用户的私人空间,否则会引起大众的强烈不满,并且这本身也不符合法律规定。道德和法律本应该是严格区分的,道德是多元化的,在家浏览黄色网站,固然有悖很多人心中的道德规范,但这最多也属于个人道德的规范,并没有公共危害性,而如果某些国家部门通过这样的技术手段强行禁止成年人访问这些网站,并把这些当成自己所追求治理的理想社会秩序,这就让个人的合法权利受到这些公权力的损害,成为一种彻头彻尾的践踏私人生活空间的违法行为。

  同时,有关部门的审核标准也令人质疑,何为不良信息,审查这些不良信息的标准是什么,审查人是否有足够的知识来辨别何为不良信息,如果错误的将正常信息判断为不良信息,如何处理,如何保证合法网站的正当权益,这些都是很难控制和处理的事情。

  从另一方面将,"绿坝-花季护航"这个软件本身的安全性就存在很大的疑问,这样一款小公司开发的软件很容易存在各种安全漏洞,在未经过广泛测试之前,贸然就安装到大量电脑客户端上,存在极大的安全隐患。一旦"绿坝-花季护航"的安全漏洞被黑客发现,那么所有安装这个软件的电脑都成为黑客的"肉鸡"(受别人远程控制的电脑),大量的"肉鸡"不但可能引发各种网络安全事故,还完全有可能重演先前"暴风影音断网"的灾难,其未来发展不得不令人感到担忧。

这篇文章来自:

月光博客

XCache大幅减少内存耗用

 

XCache大幅减少内存耗用

SEO 网站优化推广


使用VPS的朋友,对于内存总是有些担心,怕超。我也有同样的烦恼,但昨天对本网站所在VPS上,设置了XCache,内存好用即刻就从平均360MB降到270MB。
因为我现在所用的是SWVPS,是400MB内存的一款,所以总是有点儿担心。

具体的设置倒是不麻烦,我来简单介绍一下好了。

首先在Lxadmin的后台,Web & Mail & DB下,PHP config,选择Enable Xcache。

然后以管理员帐号SSH上服务器,修改/etc/php.d/xcache.ini文件,主要是修改这几个选项,其它用默认值即可。
xcache.size = 64M
xcache.count = 4
给予64M的缓存,四核的CPU。

然后就是重启VPS,重启后,xcache就生效了,在HyperVM主界面可以看到明显的内存耗用下降。

对了如果安装了XCache的Admin管理界面,就需要在上面的ini文件中设置管理员帐号。
xcache.admin.pass ="密码"

在管理界面可以看到XCache的工作情况。并清理缓存。看看DEMO

除了内存可以节省之外,还有一个比较重要的改善,就是性能上的进步,网站的反应速度有大幅的提高,我没有进行定量的比较,但从定性上来说,是很明显的改进。可以参考phpBB的测试。从我主观的感受上来说,速度有50%以上的改进。

这篇文章来自:

SEO 网站优化推广

2009年6月6日星期六

百度搜索推广的广告产品

 

百度搜索推广的广告产品

月光博客

  今天,百度公司大客户部的人到我们公司,来介绍他们的百度搜索推广产品,这个产品我以前也研究过,这次则由百度的业务人员具体对这个产品进行了一番讲解,感觉了解的更深入了,以下是我对这个会议进行的一些笔记。

  1、百度搜索推广

  百度推广是一种按效果付费的网络推广方式,目前分为百度经典版和百度专业版(内部代号:凤巢)。

  百度经典版:搜索结果左侧广告,包括品牌、产品、行业相关的关键字,针对产品的目标用户。左侧广告会有"推广"字样。

左侧广告

  百度专业版:搜索结果右侧广告,覆盖产品人群的行为以及关注其他相关品牌的关键字,针对产品潜在用户。

右侧广告

  合理预算分配,提高ROI(投资回报率)

  例如,IBM对于经典版和专业版的预算比例是7:3,某保险公司投放的比例是54%和46%,该公司每月有50%的网上保险都是由百度带来,ROI大于2 .

  建议广告投放时间为,每天8点至18点,每周一至周五,月度重点投入为6月至12月。

  百度专业版(右侧广告)中,最顶部右侧为"火爆地带"栏目,中部为专业版,底部是其他相关。

  右词左跳:指的百度右侧专业版广告转到左侧第一位,并在广告上标记"赞助商链接",右词左跳的触发条件为:左侧广告无人购买,同时右侧广告具有较高点击率和广告质量度累计,即可实现右词左跳。

右词左跳

  右词左跳会带来点击率的大幅提升。

  2、百度网盟推广

  主要将广告投放在以百度联盟为主的内容网络上,广告价格为,文字广告2毛-4毛,图片广告4毛-6毛。

  网盟推广可以有网站定向(根据行业等定向)和地域定向(根据省市网络线路定向)。

  3、百度社区推广

  包含百度贴吧、百度知道、百度百科、百度空间等社区上的广告,通过cookies对于所有搜索或使用百度的用户进行分析,基于AISAS(Attention 注意、Interest 兴趣、Search 搜索、Action 行动、Share 分享)模式,从各个方面对于消费者投放那些他所关心和注意的广告产品。例如用户在百度中搜索了"汽车"等关键词,那么在他浏览百度贴吧的时候就会在帖子右侧出现一些汽车产品的广告。

这篇文章来自:

月光博客

2009年6月3日星期三

最新更新Twitter的方法和技巧

 

最新更新Twitter的方法和技巧

月光博客

  Twitter做为一个广受欢迎的微博客,从今天开始无法从中国大陆访问,同时无法访问的还有Flickr.com、Bing.com、Live.com、Hotmail.com,为了帮助大家能继续方便的更新Twitter,我这里介绍几个最新的更新Twitter的方法。

  更新hosts的方法

  更改hosts文件应该是较好的方法之一,使用和先前的方式几乎没啥区别,具体操作是,将168.143.162.100 twitter.com一行加入到C:\WINDOWS\system32\drivers\etc\hosts文件中,这时候https://twitter.com就可以正常访问了,注意是https。更新好这个hosts文件后,基本上所有的客户端软件包括twhirl、TweetDeck、TwitterFox都可正常用作,这个方法很适合通过客户端软件更新Twitter的用户。

  使用FriendFeed同步

  登录FriendFeed后绑定Twitter,然后在"Twitter发布偏好设置"中,选择"发布条目的位置:FriendFeed (在无'抄送'框时)",这样,在FriendFeed上手动发布一条信息时,会自动同步到Twitter,而且Twitter上用户的回复也能自动更新到FriendFeed,这个方法不好的地方在于同步的时候会自动带一个FF的链接。

  使用bit.ly更新

  登录bit.ly,然后再上面绑定自己的Twitter帐号,就可以在bit.ly上发布Twitter信息,使用bit.ly发布Twitter的好处在于,可以用bit.ly缩短发布信息的链接地址,还能在bit.ly里统计超级连接的点击次数。

  使用HelloTXT同步

  HelloTXT是一个很不错的同步微博客工具,在上面绑定Twitter后,可以直接从HelloTXT发布信息到Twitter,使用HelloTXT同步的另一个好处是,可以在一个界面上一次同步饭否、嘀咕、做啥、叽歪这几个主要的中文微博客,而同类服务Ping.FM就不支持这么多中文微博客的同步。另外,HelloTXT可以通过电子邮件、Gtalk、MSN来更新,这样就可以通过这些新的途径来更新Twitter了。

  使用Twitterfeed更新

  使用Twitterfeed绑定你的RSS,然后可以同步信息到Twitter,这从理论上看,使用任何一个支持RSS的服务(例如各类微博客、博客等),都可以自动更新到Twitter上了,不过Twitterfeed的缺点是至少有30分钟的延时。

  使用QQ更新

  在国内使用QQ的人还是不少的,通过一些特殊的技巧,也可以实现从QQ来更新Twitter,方法是,注册一个嘀咕帐号,然后在QQ上加入嘀咕的机器人,接着在嘀咕中的滴神里绑定HelloTXT的同步,最后登录HelloTXT中绑定Twitter,这样就实现了通过给QQ机器人发送的消息,自动同步信息到Twitter上。

  好了,以上这些就是在目前情况下能继续更新Twitter的方法,如果你还知道什么更好的方法,请留言告诉我。我的Twitter帐号是 http://twitter.com/williamlong

这篇文章来自:

月光博客

2009年6月2日星期二

Bing上线了

 

Bing上线了

SEO 网站优化推广


很高兴看到微软推出了新搜索,用Bing来代替了过去的Live。
我感到高兴并不是因为Bing是我的名字中的一个字,而是因为有了一个有潜力同Google竞争的产品,虽然Bing只是刚刚上线,但我已经看到它会是Google搜索的强力对手。

2009-06-01_095010.png

微软的Bing搜索引擎,用到了很多类似于Google搜索的技术,比如根据用户所在的地域,而返回相关搜索结果。
安全搜索的选项,以避免色情内容在搜索结果页面出现。
搜索建议的选项开关。

Bing Maps部分,就是之前的Virtual Earth,地图搜索部分,Bing Maps可以使用(鸟览)三维投影的方法,提供用户更真实的视觉效果。

2009-06-01_100141.png
这是我家附近的视图。

这篇文章来自:

SEO 网站优化推广

2009年6月1日星期一

Google Chrome复选框消失缺陷

 

Google Chrome复选框消失缺陷

月光博客

  最近几个月的时间,我在家里和公司都较多的使用Google Chrome浏览器,不少工作和学习都是在这个浏览器下使用的,在Chrome下用的多了,也有了一些自己的体验和看法,开始思考到底什么样的浏览器是最合适的,什么样的浏览器是最优秀的。

  Google Chrome的稳定性和速度给了我深刻的印象,我几乎没有碰到过Google Chrome崩溃的情况,速度在大多数情况下也很快,然而,在使用过程中,我也发现了Google Chrome的一些一直都没有解决的缺陷和问题。下面我就详细介绍一下我在使用过程中遇到的一些困惑,我测试使用的环境是Windows XP SP3系统和Google Chrome 2.0.172.28版本。

  复选框消失错误

  这是一个至今也没有彻底解决的问题,也是最令我迷惑的问题,而且这本来根本不应该成为问题。我在使用Google Chrome浏览网页的时候,经常会发现网页上的复选框(CheckBox)有时候会突然消失,如下图所示。

Google Chrome的复选框消失缺陷

  在同样环境下,启用IE或Firefox浏览网页,都不会出现复选框消失的问题。

  错误解决方案

  目前我还没有找到具体的解决方案,有人说在"我的电脑"-"属性"-"高级"-"性能"中,选择"在窗口和按钮上使用视觉样式"可以解决这个问题,但是我发现对于有些电脑来说这个设置还是无效。

Google Chrome的复选框消失缺陷

  通常出现复选框消失的情况,我会右击状态栏,点"属性",然后直接点确定,这时候通常复选框会出现,但不能保证复选框会一直出现。

  我估计这可能是Chrome引擎存在的问题,除了这个错误之外,Google Chrome的中文页面渲染,中文最小字体支持以及对于插件扩展的支持都存在种种问题,对于一个已经诞生了9个月浏览器来说,这大概是Google Chrome依然无法成为主流浏览器的原因之一了。

这篇文章来自:

月光博客

如何做好链接计划策略

 

如何做好链接计划策略

SEO 网站优化推广


做外部链接的方法很多,不同的方法对于不同的网站有不同的效果,而站长具体操作的不同也会有不同的效果。有些方法也有可能已经不再是那么的有效了。现在就让David Yin来回顾一下,当新网站上线后的8步做好链接的计划策略。

1)通用目录的提交
提交网站到通用目录往往是第一步,也是容易操作的,只要做好目录网站提交的策略,找到合适的目录网站,比如这26个英文目录列表中的一些就不错。当然如果你能提交到DMOZ更好,在这一步,我不建议新站长做付费提交。

2)提交到利基(Niche)目录
把网站提交到同你的网站定位一致的目录,比如你的网站是做服装的,那么提交到服饰网站目录去,这样获得的链接,有更好的内容一致性。

3)到社会化网站(SNS)建立帐号,以及各种介绍概要,虽然SNS网站有些会允许外链,并且没有no-follow,有些却是带有no-follow的链接,这都不要紧,主要增加网站的曝光率就好。

4)提交RSS feed到各Feed收录网站
这也是一个非常好的增加网站曝光率的方法,在Web 2.0的时代,这可以让你的网站内容中的链接,在Feed收录网站中给你带来有效的链接。

5)SERP的链接手法
这一步会比较耗费时间,也需要更多的耐心。首先用你的主要关键词,在Google做一下搜索,在返回的前50个网站,就是你的潜在链接对象。当然很多你是没有机会获得链接的,那么继续看看有哪些网站链接到这50个网站,这些网站你可能有较多的机会可以获得链接。
看,这就需要很多步骤,需要做很多的功课,才可以做好。但做的好的话,这些链接会给你很大的权重。

6) 做一个官方Blog
这已经被证明是很有效的方法,当然其权重也已经比过去小了许多。但目前看来我认为还是有些效果的。记得官方blog也要有一定数量的链接链接到自己的网站。
还要记得把这Blog的地址添加到SNS的profile中。

7)提供好的文章到专业媒体
这主要指的是把文章提交到同你的网站内容相关的文章收录网站,如果自己没有好的文采,那么可以雇人来写。一篇好的文章,往往可以给你带来几十个外链。

8)链接的建立过程,不要用欺骗的手法,特别是在交换链接时,要有同理心。


上面的这些方法,需要不断的,反复的去做,这是一个长期的工程,不要想着一次就可以完成,链接的时间效应,链接增加的趋势,都是要考虑的。

 

这篇文章来自:

SEO 网站优化推广