[摘]微博力量是博客200倍
第一,能写并有意愿写有价值微博的人群是博客的4倍。第二,这群人的人均微博产量是之前人均博客产量的5倍。这两条讲的是生产成本大大降低。
第三,有时间并且愿意读微博的人群是博客的2倍。第四,适合阅读微博的场所和碎片时间加总是博客的5倍。这两条讲的是消费成本大大降低。
4乘5乘2乘5,得到200倍。
(via 英国《金融时报》中文网专栏作家 程苓峰)
[摘]微博力量是博客200倍
第一,能写并有意愿写有价值微博的人群是博客的4倍。第二,这群人的人均微博产量是之前人均博客产量的5倍。这两条讲的是生产成本大大降低。
第三,有时间并且愿意读微博的人群是博客的2倍。第四,适合阅读微博的场所和碎片时间加总是博客的5倍。这两条讲的是消费成本大大降低。
4乘5乘2乘5,得到200倍。
(via 英国《金融时报》中文网专栏作家 程苓峰)
google:整合全球的信息
facebook:从根本上改变人们沟通方式
twitter:地球的脉搏
apple:Think Different
第一次听到”地球的脉搏”时,突然间眼前一亮,感觉自己豁然开朗,神清气爽,夸张点说,那一瞬间升华了。虽然中国的脉搏如此不清晰,虽然眼前的道路仍然很迷茫,虽然尼采说,人生就是带着镣铐的舞蹈,但那最原始的梦想,我仍会珍藏在心底。
自从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还是慢得太多了。
一些基本概念,摘自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, 还有自己的程序做了些实验,基本上搞清楚了:
原来主要的问题是,MSN里面删除帐号的时候,并不从AL里面删除,这就导致了再次加好友的时候,好友帐号不会再次得到“被加为好友”信息
最早用国外的一些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,问题就解决了。圣诞之夜,孩子睡了,独自在屏幕前。不过解决了这个问题,感觉还挺爽….
客户的机器是台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 已经直接支持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。
firefox下 没有obj.innerText,只能用innerHTML
firefox下 没有currentStyle, 可以用document.defaultView.getComputedStyle(aaa,null) 得到类似的currentStyle
prototype.js 中提供的class挺好的,能把代码组织得比较清晰,但什么原理还没搞得太清楚
学到另一招,不需要象AJAX一样创建对象:
function testScript(resultRowCnts)
{
MyScript.src = “new.js”; // 或者”new.asp”
}
============================
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了,用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