分类“互联网”的存档

[摘]微博力量是博客200倍

2010年05月17日 星期一

[摘]微博力量是博客200倍

第一,能写并有意愿写有价值微博的人群是博客的4倍。第二,这群人的人均微博产量是之前人均博客产量的5倍。这两条讲的是生产成本大大降低。

第三,有时间并且愿意读微博的人群是博客的2倍。第四,适合阅读微博的场所和碎片时间加总是博客的5倍。这两条讲的是消费成本大大降低。

4乘5乘2乘5,得到200倍。

(via 英国《金融时报》中文网专栏作家 程苓峰)

什么是气度和视野?

2010年05月16日 星期日

google:整合全球的信息
facebook:从根本上改变人们沟通方式
twitter:地球的脉搏
apple:Think Different

第一次听到”地球的脉搏”时,突然间眼前一亮,感觉自己豁然开朗,神清气爽,夸张点说,那一瞬间升华了。虽然中国的脉搏如此不清晰,虽然眼前的道路仍然很迷茫,虽然尼采说,人生就是带着镣铐的舞蹈,但那最原始的梦想,我仍会珍藏在心底。

JavaScript引擎速度比较

2008年09月21日 星期日

自从Google的Chrom浏览器推出以来,Javascript的速度就成为大家追的焦点。一个比一个宣称快。

Mozilla的TraceMonkey: (现在Firefox3.0里面的还是SpiderMonkey)

Webkit的SquirrelFish & SquirrelFish Extreme:

于是测试了玩玩。SquirrelFish Extreme用的是Webkit r36712 nightly build版本。有空再补TraceMonkey的。

测试集 V8 IE8 SpiderMonkey SquaireFish Extreme
SunSpider 3080.8ms 12977.8ms 5744.0ms 2704.2ms
jsTimeTest 74ms 785ms(*) 329ms 107ms

(*): 这个数据可能偏大,因为中间弹出了对话框:”脚本执行时间太长,是否继续”之类的,但不比不知道,IE8还是慢得太多了。

MSN上的好友列表

2008年06月21日 星期六

一些基本概念,摘自http://www.hypothetic.org/docs/msn/notification/get_details.php

Forward List (FL)

The forward list, abbreviated as FL, is the list of principals whose presence you are subscribed to. You can expect to be notified about their on-line state, phone numbers, etc. This is what a layman would call their “contact list”.

This list currently (as of March 23, 2003), has a limit of 150 people, doubled from a previous 75. If you try to add a 151st person, you will receive error 210 and they will not be added.

Everyone in your forward list belongs to one or more groups, identified by their group number. By default, they belong to group 0.

Reverse List (RL)

The reverse list, abbreviated as RL, is the list of principals that have you on their forward list. You cannot make modifications to it. If you attempt to add or remove people from this list, you will be immediately disconnected from the NS with no error message.

Allow List (AL)

The allow list, abbreviated as AL, is the list of principals that you allow to see your online presence - as opposed to your reverse list, which is the list of people who request to see your online presence. If someone removes you from his or her contact list, he or she is automatically removed from your RL but not your AL. He or she no longer receives online presence from you, but if he or she adds you again, your client can act in the knowledge that you previously allowed him or her to see your presence.

Block List (BL)

The block list, abbreviated as BL, is the list of people that are blocked from seeing your online presence. They will never receive your status, and when they try to invite you to a switchboard session, they will be notified that you are offline. No-one can be on the AL and the BL at the same time, and if you try to add someone to both lists, you will receive error 219.

用Miranda, MSN, 还有自己的程序做了些实验,基本上搞清楚了:

  • 假设一开始都是新的帐号
  • jimax 加了 xiao, xiao收到“被加为好友”信息,选择确认,现在xiao里面是 FL, AL, RL; jimax 里面是FL, AL, RL, 双方都能看到对方信息
  • 下面 xiao 删除 jimax (MSN里面, 但不阻止), 此时xiao里面是 AL, RL (只是从FL里删除), jimax里面是FL, AL (只是RL中删除) jimax 仍然能看到 xiao 的在线信息
  • 下面 xiao 阻止 jimax,此时xiao里面是 BL, RL, jimax里面是FL, AL, jimax看不到xiao的在线信息了
  • 现在 jimax 删除 xiao (用自己程序), jimax里面彻底没有(从FL, AL里面都删除了), xiao里面是 BL
  • 现在 xiao 加了 jimax, jimax 里面 FL, AL,RL. jimax 看不到xiao的信息,因为xiao里面是 FL, BL, RL
  • jimax删除xiao(自己程序) RL, BL (而不是全部删除), xiao里应该是FL, BL
    (这里是有些不同的地方:删除的时候,如果FL, AL ==> 0; 如果FL, AL, RL ==> RL, BL)

  • 此时xiao删除jimax, jimax里面是BL, xiao里面是BL
  • 此时xiao加jimax,jimax得不到“被加为好友”,jimax BL, RL, xiao里面是FL, BL
  • 此时jimax加xiao, 变为 FL, AL, RL, xiao里面是FL, BL,RL , jimax得不到xiao信息,xiao能得到jimax消息
  • xiao 解除阻止,jimax不变 FL, AL, RL, xiao为FL, AL, RL, 则两边都可以得到消息了

    原来主要的问题是,MSN里面删除帐号的时候,并不从AL里面删除,这就导致了再次加好友的时候,好友帐号不会再次得到“被加为好友”信息

  • pyMSNt 和 MSNShell不兼容的问题

    2007年12月25日 星期二

    最早用国外的一些Jabber的MSN Gateway(比如jaim.net 和anywise.com上的),从MSN发送消息发现消息总会丢失,或者提示“无法将以下消息发送给所有接收者:”但发送消息给MSN客户端却总是能成功。但jabbernet.dk上MSN Gateway的就一直都没问题。后来自己安装了pyMSNt,发现也出现挂不上去的问题,开始总以为是pyMSNt的安装或者配置哪里不对。一个朋友又说总是在家里能挂上,在单位就总是出问题。总结了各种现象,才发现,是MSNShell和pyMSNt不兼容的问题。卸载了MSNShell,不管连哪个都很正常了。而msn.jabbernet.dk不是pyMSNt的,(它有个msnnew.jabbernet.dk好象是pyMSNt的)所以一直没有问题。

    问题是这样发生的:在一般情况下协议里都是一个空行来隔开消息头和消息体的。而对于没有消息体的消息来说,消息头结束后要跟两个回车换行,也即下面必须要有个空行的。
    根据http://msnpiki.msnfanatic.com/index.php/MSNP8:Payload_Commands

    “It’s possible for messages to have no body. If you just end a message with the two newlines at the end of the header, it will have an empty body. ”

    但是如果你安装了MSNShell, 并且开启了”加密聊天”模式后,MSNShell会在发送正常的消息前,进行握手(看看对方是不是也支持加密),发送如下的信息
    MSG test@msn.com ming 165
    MIME-Version: 1.0
    Content-Type: text/x-bobo
    sv: 4.2.28.32
    mv: 8.1.178.0
    state: ssShellHandShake1
    bobo1: 1658134426017880279626016817.6426387281559877623017753
    问题就在于,MSNShell的这条信息也是没有消息体的,但是在消息头后面只有一个回车换行。虽然前面的MSG后面跟的playload size是正确的。但pyMSNt的做法是在读完一行,发现是消息头之后,并不立刻判断其长度是否已经满足,而总是去读下一行,直到读到一个空行后再判断,如果size还不够再转到读消息体的函数里判断长度。这就造成了pyMSNt把下一条正式消息
    MSG test@msn.com ming 130
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    X-MMS-IM-Format: FN=%E5%AE%8B%E4%BD%93; EF=; CO=0; CS=86; PF=2
    的第一行也当成是本消息的内容了,然后丢弃,然后造成把MIME-Version一行当作下一条命令的开始,然后造成Invalid Command 异常。

    弄清楚原因,简单改造一下pyMSNt,问题就解决了。圣诞之夜,孩子睡了,独自在屏幕前。不过解决了这个问题,感觉还挺爽….

    Zend Optimizer 和 PHP 5.2.3 不兼容?

    2007年08月21日 星期二

    客户的机器是台FreeBSD,装了PHP 5.2.3 和 Zend Optimizer 3.2.8。想给用户先是加密的代码,等客户付钱后再改成不加密的,但是Zend Guard 4 加密过的代码执行起来IE说找不到网页,Firefox提示下载这个网页。于是换了Zend Guard 5, 因为Guard 5需要Zend Optimizer 3.3.0以上,于是升级了Zend Optimizer,但是仍然不行,加密过的代码显示一片空白。试了几个简单的加密倒是没问题,但一到比较复杂的程序就不行了。在网上也查不到相关的问题和说明。

    最后实在没辙了,把PHP5.2.3换成5.2.1,问题解决了。看样子是5.2.3和Optimizer的兼容性问题,感觉这是个挺大的 BUG,PHP的这次升级太不负责任了,折腾了起码三四天 :(

    在openfire基础上安装jwchat

    2007年08月15日 星期三

    Openfire 已经直接支持HTTP Binding, 因此jwchat不用再依赖于JHB(JabberHTTPBinding),但Openfire的Http binding 是以8080端口提供的,因此需要做如下步骤:

    1. 在apache的httpd.conf

    AddDefaultCharset UTF-8
    ProxyPass /http-bind/ http://127.0.0.1:8080/http-bind/

    另外要注意的是,需要把

    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_http_module modules/mod_proxy_http.so

    这两句都打开。

    2 更改jwchat/config.js里面的 SITENAME 为你所提供的jabber server的域名。

    注释掉其它的增加一个新的Backend

    httpbase:"http-bind/"
    type:"binding"
    servers_allowed:[SITENAME]

    3. 在openserver的管理端增加两个服务器属性:

    xmpp.httpbind.client.requests.polling = 0
    xmpp.httpbind.client.requests.wait = 10

    这就OK了。

    参考了http://chromus.kajigger.com/blog/index.php?p=100,但实际上没有必要和<virtualhost>较劲, 开始的失败就是配置<virtualhost>总不对。

    还有一个问题是只打开了proxy_module,没有打开 proxy_http_module,这时候的现象就是总说server disconnected。

    JavaScript的一些经验

    2006年01月11日 星期三

    firefox下 没有obj.innerText,只能用innerHTML
    firefox下 没有currentStyle, 可以用document.defaultView.getComputedStyle(aaa,null) 得到类似的currentStyle
    prototype.js 中提供的class挺好的,能把代码组织得比较清晰,但什么原理还没搞得太清楚

    另一种局部刷新

    2005年12月21日 星期三

    学到另一招,不需要象AJAX一样创建对象:

    function testScript(resultRowCnts)
    {
        
    MyScript.src = "new.js"// 或者"new.asp"
    }
     
     
    <
    script language="javascript" id="MyScript" defer type="text/javascript">
     
     
    <
    div id="toogle">
    <
    /div>
    <a id="test" href="#" onmousedown="testScript()">TestScript<
    /a>

    ============================
    new.js

    document.getElementById("toggle").innerText = "abcd";

    ============================
    new.asp

    <% Response.Write ("document.getElementById('toggle').innerText = 'abcd'")  %>;

    实际上new.asp一样是动态的,得到数据然后通过一些javascript语句进行更新。
    好处是不需要在客户端脚本创建”Microsoft.XMLHTTP”对象,缺点是需要将Javascript写在ASP中间。
    如果只是js的话,其实也还清楚。

    恢复IIS的ASP.NET支持

    2005年11月29日 星期二

    本地的IIS不知道怎么不能支持ASP.NET了,用VS.NET 2003创建一个新的Web Application 就说IIS不支持ASP.NET。
    使用aspnet_regiis -i -enable恢复了。

    下面摘自http://www.163er.com/zz/Server/Windows/6159.shtml:

    使用 Aspnet_regiis.exe 修复 ASP.NET 的 IIS 映射

    从“开始”菜单,单击“运行”。
    在“运行”对话框中的“打开”框中,键入 cmd,然后单击“确定”。
    在新窗口中的命令提示符下,键入以下行:
    “%systemroot%\Microsoft.NET\Framework\version\aspnet_regiis.exe” –i。

    在该路径中,version 表示安装在服务器上的 .NET Framework 的版本号。在键入命令时,必须用实际的版本号去代替这个占位符。

    注意 在该命令中必须包含引号。

    有关 Aspnet_regiis.exe 的详细信息,请以 -? 作为参数重复步骤 3 或参阅 ASP.NET IIS 注册工具 (Aspnet_regiis.exe)。

    另外,在 Windows Server 2003 上,如果从 Web 下载或通过 Visual Studio .NET 安装了 .NET Framework 和 ASP.NET,则必须从 IIS 管理器中手动启用 ASP.NET。详细信息,请参阅安装 ASP.NET。

    注意 如果要在域控制器上安装 ASP.NET,您必须采取特殊的步骤来使安装正常进行。详细信息,请参阅位于 http://support.microsoft.com 的 Microsoft 知识库中的文章 CHS315158:“ASP.NET 在域控制器上不能使用默认 ASPNET 帐户”。

    ASP.NET IIS 注册工具 (Aspnet_regiis.exe)
    当您在单个计算机上并行执行多个版本的 .NET Framework 时,脚本映射到 ASP.NET 应用程序的 ASP.NET ISAPI 版本将确定该应用程序使用的公共语言运行库版本。ASP.NET IIS 注册工具 (Aspnet_regiis.exe) 允许管理员或安装程序很容易地更新 ASP.NET 应用程序的脚本映射,以便指向与工具相关的 ASP.NET ISAPI 版本。此工具还可以用于显示所有已安装的 ASP 版本的状态。NET 注册与工具配对的 ASP.NET 版本,创建客户端脚本目录,并执行其他配置操作。

    Aspnet_regiis [options]
    您可以指定下列一个或多个选项。

    选项 描述
    -c 将 ASP.NET 的客户端脚本(如客户端的验证脚本)安装到每个 IIS 站点目录的 aspnet_client 子目录中。
    注意 仅安装与 Aspnet_regiis.exe 相关的 ASP.NET 版本的客户端脚本。

    -e 从每个 IIS 站点目录中的 aspnet_client 子目录中删除 ASP.NET 的客户端脚本。
    注意 仅删除与 Aspnet_regiis.exe 相关的 ASP.NET 版本的客户端脚本。

    -ea 从每个 IIS 站点目录的 Aspnet_client 子目录中删除所有 ASP.NET 版本的客户端脚本。
    -i 安装与 Aspnet_regiis.exe 相关的 ASP.NET 版本,并更新 IIS 配置数据库根及其下的脚本映射。
    注意 仅更新使用早期 ASP.NET 版本的应用程序的脚本映射。使用后续版本的应用程序不受影响。

    -ir 安装与 Aspnet_regiis.exe 相关的 ASP.NET 版本并仅在 IIS 中注册 ASP.NET。
    注意 此选项不会更新脚本映射。要安装 ASP.NET 并更新脚本映射,请使用 -i 选项。

    -k path 从所有 ASP.NET 应用程序中将脚本映射删除到所有 ASP.NET 版本中,这些 ASP.NET 应用程序位于所指定的应用程序的根路径及其子目录中。
    -kn path 仅从所指定的应用程序根路径中的 ASP.NET 应用程序中将脚本映射删除到 ASP.NET 版本中。
    注意 该选项不影响 path 子目录中的应用程序。

    -lk 列出 ASP.NET 脚本映射的路径和所有 IIS 配置数据库项的版本。
    注意 从父项继承 ASP.NET 脚本映射的项不会显示。

    -lv 列出在计算机上安装的所有 ASP.NET 版本的状态和安装路径。
    -r 更新 IIS 配置数据库中及其下的所有脚本映射,以便将其指向与 Aspnet_regiis.exe 相关的 ASP.NET ISAPI 版本。
    注意 除当前版本外,所有现有脚本都将更新到指向与 Aspnet_regiis.exe 相关的 ASP.NET ISAPI 版本。

    -s path 将指向与 Aspnet_regiis.exe 关联的 ASP.NET ISAPI 版本的脚本映射安装到所指定的应用程序的根路径及其子目录处的所有 ASP.NET 应用程序中。所有在指定路径和其下面使用 ASP.NET ISAPI 版本的现有脚本映射都会更新。
    -sn path 将指向与 Aspnet_regiis.exe 关联的 ASP.NET ISAPI 版本的脚本映射安装到所指定的应用程序根路径处的 ASP.NET 应用程序中。所有在指定路径中使用 ASP.NET ISAPI 早期版本的现存脚本映射都会更新。
    注意 该选项不影响 path 子目录中的应用程序。

    -u 从计算机中卸载与 Aspnet_regiis.exe 相关联的 ASP.NET 版本。此 ASP.NET ISAPI 版本的现有脚本映射会自动重新映射到所安装的最高的剩余 ASP.NET ISAPI 版本中。
    -ua 从计算机中卸载全部 ASP.NET 版本。
    -? 显示工具的选项和命令语法。

    注释
    当计算机中安装了多个版本的 ASP.NET 时,ASP.NET 会并行地运行。在此安装过程中,Internet 信息服务 (IIS) 需要知道应在 ASP.NET 中处理页的 ASP.NET ISAPI (aspnet_isapi.dll) 版本。与 ASP.NET 应用程序相关联的 ASP.NET ISAPI 版本将确定用于该应用程序的公共语言运行库。ASP.NET 应用程序通过 IIS 中的脚本映射与 ASP.NET ISAPI 版本相关联。要简化 ASP.NET 应用程序的配置过程,每个 ASP.NET 版本应该包括链接的 Aspnet_regiis.exe 版本。

    注意 每个版本的 .NET Framework 都包含唯一的 Aspnet_regiis.exe 版本。因为工具的每个版本仅能应用于与其相关联的 .NET Framework 版本,所以请使用该版本的适当工具来配置 ASP.NET 应用程序。

    Aspnet_regiis.exe 通常与 -s 或 -sn 选项一起使用,以将 ASP.NET 应用程序重新映射到与工具相关联的 .NET Framework 版本中。请使用 -s 选项更新在指定路径和它们所有子目录中的应用程序。如果不想更新子目录中的应用程序,请使用 -sn 选项。要立即更新计算机中所有现有 ASP.NET 应用程序的脚本映射,请使用 -r 选项。

    注意 path 参数引用的是应用程序的根路径,而不是物理路径。例如,W3SVC/1/ROOT/SampleApp1。

    相反,您可以使用此工具从使用 -k 或 -kn 选项的任何 ASP.NET 版本中删除脚本映射,并指定应用程序的根路径。

    注意 如果指定的根路径从父根路径中继承了其脚本映射,则 -k 和 -kn 选项不起作用。

    该工具也可用来安装或卸载链接的 ASP.NET 版本。请使用 -i 选项安装 ASP.NET 并更新所有现有 ASP.NET 应用程序的脚本映射。使用 -ir 选项安装 ASP.NET,无需更新脚本映射。要卸载与该工具相关的 ASP.NET 版本,请使用 -u 选项。如果想从计算机中卸载所有版本的 ASP.NET,请使用 -ua 选项。

    您可以使用 Aspnet_regiis.exe 查看关于 ASP.NET 的信息。要列出所有已安装的 ASP.NET 版本的状态和安装路径,请使用 -lv 选项。如果您要查看由 ASP.NET 脚本映射的所有 IIS 配置数据库项的路径,请使用 -lk 选项。

    客户端脚本(如客户端验证)可以使用 Aspnet_regiis.exe 来进行安装和删除。将与工具相关联的 ASP.NET 版本的客户端脚本安装到每个 IIS 站点目录的 aspnet_client 子目录中,请使用 -c 选项。要删除与工具相关的 ASP.NET 版本的客户端脚本,请使用 -e 选项。要删除所有已安装的 ASP.NET 版本,请使用 -ea 选项。

    有关在 ASP.NET 中并行执行的详细信息,请参阅 ASP.NET 中的并行支持。有关脚本映射和应用程序根路径的详细信息,请参阅设置应用程序映射。

    示例
    下列命令将指向与 Aspnet_regiis.exe 相关的 ASP.NET 版本的脚本映射安装到 SampleApp1 应用程序及其所有子应用程序中。

    Aspnet_regiis -s W3SVC/1/ROOT/SampleApp1
    下列命令仅会更新 SampleApp1 应用程序的脚本映射,而不会影响子目录中的应用程序。

    Aspnet_regiis -sn W3SVC/1/ROOT/SampleApp1
    下列命令将安装与工具相关的 ASP.NET 版本,并更新所有现有 ASP.NET 应用程序的脚本映射。请注意仅有在当前脚本映射到早期 ASP.NET 版本的应用程序才会受到影响。

    Aspnet_regiis -i
    下列命令将安装与工具相关的 ASP.NET 版本,但不会更新现有 ASP.NET 应用程序的脚本映射。

    Aspnet_regiis -ir
    下列命令显示在计算机上安装的所有 ASP.NET 版本的状态和安装路径。

    Aspnet_regiis -lv