2009年6月21日星期日

广州长隆欢乐世界游记

  周六和同事一起去广州番禺的长隆欢乐世界玩了一圈,感觉还不错,和深圳欢乐谷相比,广州长隆的过山车令人印象深刻,而且排队的人很少,周末人也很少,几乎半天时间就可以将大部分好玩的项目玩完,而深圳欢乐谷的项目则太多,排队动辄就是一个多小时,任何时间人都很多。

广州长隆欢乐世界

  广州长隆欢乐世界的门票和深圳欢乐谷一样,是170元,我们团体票可以打折,大概能降到100元左右。

广州长隆欢乐世界

  入口处就是十环过山车,这个过山车据说创造了游乐设备环数最多的吉尼斯世界记录,全世界只有两台(仅在英国还有一台)。

十环过山车

  这个过山车的确很刺激,转的圈数很多,感觉其刺激程度仅次于垂直过山车。

十环过山车

  十环过山车的旁边是摩托过山车,游客骑在一个类似摩托的小车上,这个过山车的加速度非常快,可惜时间太短了,惊险程度也一般。

摩托过山车

  垂直过山车非常高,有两段几乎是直上直下的,非常刺激,速度快的惊人,坐在上面如同坐在一架高速战斗机上飞行一样,令人大呼过瘾,这个过山车的另一个好处是,排队几分钟就能玩上,我就连玩了两次,感觉很爽。

垂直过山车

  激流勇进这个项目和深圳欢乐谷的同名项目几乎一模一样,但高度还不到欢乐谷的一半,小艇会载着游客慢慢爬上一个斜坡,然后急速冲下来,虽然我穿了雨衣,但冲下来的时候还是把裤子全打湿了。

激流勇进

  超级大摆锤号称“全球最大大摆锤”,塔高26米,看起来似乎不太惊险,但上去之后才会感觉到,摆的可真高啊。

超级大摆锤

  U型滑板虽然看上去也不怎么样,但的确也挺刺激的,感觉比欢乐谷的UFO要好玩。

U型滑板

  除了惊险的栏目外,还可以看到特技表演《惊爆危机岛》,里面的故事情节和打斗虽然看上去比较老套,但里面的老外表演起来还真像那么回事,挺敬业的。

惊爆危机岛

  最后节目都玩遍了,还会看到每日的巡游表演,园区的演员们纷纷赤膊上阵,这东东被“绿坝”看到一定会被全过滤掉的。

  总的来说,广州长隆欢乐世界还挺好玩的,就是设施少了点,除了上面我介绍的几个栏目外,其他的栏目比深圳欢乐谷要少的多,不想排队的话去这里玩也挺不错的。

2009年6月20日星期六

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

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

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

谷歌中国

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

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

2009年6月19日星期五

央视抨击谷歌中国存在淫秽色情信息

  今天晚上,中央电视台《新闻联播》和后面的《焦点访谈》两个栏目都重点抨击谷歌中国,声称谷歌中国存在大量淫秽色情和低俗信息,违反国家有关法律规定,严重侵害青少年身心健康。同时互联网违法和不良信息举报中心也“强烈谴责”谷歌中国传播淫秽色情和低俗信息,要求其对淫秽色情和低俗内容进行彻底清理,并建议相关执法部门依法处罚。

  这次央视和举报中心的措辞非常严厉,令人感到比较意外,做为一个经常上Google的用户,我印象中很少看到色情信息,对于色情信息过滤技术,Google有SafeSearch功能,可以从搜索结果中过滤掉大部分色情内容,但如果要求过滤掉搜索引擎上所有的色情信息,在技术上目前国内所有的搜索引擎都做不到,包括百度也做不到。

谷歌中国

  说到保护青少年,现实中的危害恐怕比网络上的要更凶猛一些,前有“习水嫖宿幼女案”,后有“邓玉娇防卫过当案”,如果从制度上能够保证再没有幼女被“嫖宿”,再没有服务生被迫“防卫过当”,这比起谴责搜索引擎过滤技术有漏洞要更为重要和紧迫一些。

  另外,如何保护自己的小孩,本来是每个家长的责任,相信大多数家长都有能力和办法管理自己的小孩,不必“保姆”们如此费心了。

  去年11月,央视新闻30分也连续两天曝光百度竞价排名中的虚假医药广告,为此,百度曾经在2009年春晚“赞助”了央视4000万元,如果央视真的那么有“社会责任感”,为啥百度交了钱就能在春晚亮相呢。这次央视吃完原告吃被告,里外通吃,又瞄上了谷歌,看来谷歌也不得不交些保护费了,在中国做企业实在不易啊。

2009年6月18日星期四

安全迁移网站的技巧

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

  1、迁移准备

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

  2、迁移操作

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

  3、迁移过程

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

  4、迁移结束

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

2009年6月17日星期三

利用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:\.
ootcimv2")
    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、饭否、嘀咕和做啥

  很多微博客(如嘀咕和做啥)和第三方工具(如Hellotxt、Ping.fm)都同时提供了同步到其他微博客的服务,可以同步信息到一些主要的微博客服务,如Twitter、饭否等,但是这些工具都有一个很重要的问题,就是存在密码被盗或泄漏的风险。

  目前大多数微博客是通过用户名和密码做为参数进行认证登录,Twitter可使用OAuth协议进行认证,而这些用户名和密码存放在这些同步工具网站上,万一保存不当,就有可能会被黑客获取,带来用户帐号被盗的风险,因此,比较保险的办法是通过自己写的程序来实现微博客的自动同步功能,这样被黑客破解的可能性就小了很多。

  我这里写了一个同时更新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">
<html>
<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字数

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

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

  使用方法是,先增加一个span,用于显示剩余的字数,然后在Textarea中,加入一个onkeydown和onkeyup的事件,调用另一段JavaScript函数,函数调用的参数为span的id和textarea的id,然后再JavaScript中使用innerHTML返回计算出来的剩余字数。

  以下是相关的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>