24 八月, 2008

用照片制作3D场景,Microsoft release photosynth

微软Labs正式推出photosynth,可以分析照片之间的相似性,根据相互之间的关联拼接一系列的照片,最终制作成一个类3D效果的场景效果。你可以用Firefox或者IE浏览photosynth,不过需要安装对应的播放器插件。

我试着搞了几个:金山海滩1金山海滩2喀什铜器

一个截图:

photosynth screenshot

因为拍的照片数量太少,所以出来的效果不是很好。Photosynth Guide里建议环拍静物,相机拍摄角度每次转动不要超过15度,就是说,在一个平面,至少要拍360/15=24张照片。我的这个铜器,总共拍了有9张俯视的,11张正面的,还有3张局部图。照片之间的间隔太大,不容易分析成功。

而金山海滩那套,也不太成功。一来是因为照片拍的太少(总共20张照片,包含了3组视角),结果照片之间的重叠部分太小;二来拍摄点只有一个(都是在更衣室出口处),违背了Photosynth的“Rules of 3”原则:场景的任何一部分必须出现在从3个不同的地方拍摄的3张照片之中。

RWW的这篇介绍不错:Microsoft Launches Photosynth: Your Pictures in 3D


24 七月, 2008

Windows Search 4.0 -- 升级你的WindowsXP桌面搜索

如果是XP,并且用Windows Desktop Search,那么,可以从这里下载升级包,升级到Windows Search 4.0

也可以通过windowsupdate,如果你用的是正版XP的话。


4.0的一些改进和新功能:

索引更快更深,搜索性能改善,可以搜索EFS加密文档...

更多信息,请参考Windows Search 4.0 Released to Web


18 七月, 2008

使用Flash查看Mindmap文件

Mindjet Mindmanager的脑图文件的后缀是.mmap,这是一个.jar格式的压缩包,解压后,你会发现其中有一个xml文件,包含了此脑图的数据,还有一些文件,是和脑图的模板、格式、图片等显示属性相关的。

如何在网页中浏览.mmap文件呢?使用flash当然是最好的解决方案。

这里”就提供了这样一个方法,可以使用Freemind的Flash viewer控件来显示Mindmap文件,内部的工作原理如下:

  1. 取得需要显示的.mmap文件内容
  2. 提取/转换 .mmap到xml文件
  3. 使用XSL将此xml转换成Freemind的.mm格式
  4. 使用Freemind Flash Browser来显示转换后的.mm文件

Freemind,是一个开源的mind manager工具。

Freemind Flash Browser的介绍和下载

如何转换.mmap到.mm,可以参考“Import and export to other applications”和“Accessories”。

条件都具备了,你也可以根据这些,自己开发一个MindMap Flash Browser了。


21 三月, 2008

BI, DBMS, QlikView, etc

QlikView,In-Memory BI

What Makes QlikTech So Good?

So let me try to articulate exactly what makes QlikView so good. The underlying technology is what QlikTech calls an “associative” database, meaning data values are directly linked with related values, rather than using the traditional table-and-row organization of a relational database. (Yes, that’s pretty vague—as I say, the company doesn’t explain it in detail. Perhaps their U.S. Patent [number 6,236,986 B1, issued in 2001] would help but I haven’t looked. I don’t think QlikTech uses “associative” in the same way as Simon Williams of LazySoft, which is where Google and Wikipedia point go when you query the term.)

DBMS:

DBMS也该有发展了。


13 二月, 2008

UTBLOG主页视觉热点图

heatmap of UTBLOG homepage (http://www.utblog.com/plog/),看上去,主页设计很有问题,最热的地方,提供的可用信息却最少。

使用风鬼Feng-GUI生成,老外的东西,却使用中文名字,有意思。

heatmap of UTBlog


22 十一月, 2007

Vmware Ethernet controller drivers for Windows Vista

症状:VM Server Console,安装Vista后,找不到Ethernet Controller驱动

解决:You may workaround it by mounting the VMware Tools iso file as a CD-ROM and then going into Device Manager and performing an update driver for the ethernet controller selecting the vmxnet driver.

The ISO files are located in your C:Program FilesVMwareVMware Workstationwindows.iso on a Windows host.

系统会查找并安装VMWare Accellerated AMD PCNet Adapter

来自:http://communities.vmware.com/message/267913


14 十一月, 2007

Oracle 9i安装,LD_ASSUME_KERNEL

安装Oracle 9.2.0.4.0 on Red hat Enterprise Linux AS4 (x86_64)

NOTE: Ensure to set the environment variable: LD_ASSUME_KERNEL=2.4.1 Failing to set the LD_ASSUME_KERNEL parameter will cause the Oracle Universal Installer to hang!


27 十二月, 2006

Yahoo! Photos

Yahoo! Photos的Help.

我关注的几个优点:

  1. 空间无限
  2. 每月上传的照片数目不限(每个Album只能存放300张照片,但是Album的数目不限)
  3. 不改变上传照片的尺寸和精度
  4. 有多级权限,支持tag

稍许限制:

  1. 现在只支持JPG格式,Yahoo!解释说,这是因为现在的数码相机导出照片的格式大都是JPG。不过,Yahoo!也会在将来支持其它格式的图片
  2. 可以上传大尺寸照片,但是同时上传尺寸照片(每张大小2~5M)的数量会受到限制
  3. 每半年必须登录Yahoo!一次,否则照片可能会被删除

flickr不花钱几乎不能用了,没想到它的东家倒慷慨。试试看再说,好的话搬家。


17 七月, 2006

hosts file doesn't work, 罪魁祸首是MSN Messenger

今天被这个问题浪费了至少1个小时,很生气!这里记下来,希望后来者能节省点时间。

症状:

奇怪现象:

直接原因:

解决方法:

幕后凶手:

作案过程:

作案动机:

感谢zafar:http://www.mcse.ms/archive62-2006-1-1880791.html


14 六月, 2006

MSN Spaces,易变的URL

echo的Space为例,从原先的http://spaces.msn.com/limbosun 改为现在的http://limbosun.spaces.msn.com

参考:MSN Spaces 6月5日将强制改变URL地址

原先的url,包括更老的“http://spaces.msn.com/members/limbosun”暂时都还能使用

同步的,所有的RSS(feed)订阅地址也跟着改变,而RSS内发布的文章和照片的Link和GUID也随之更改。很多RSS订阅/浏览工具根据link/guid来判断文章的唯一性,针对MSN Spaces的这些变化,可能会引起一些处理上的错误。

似乎大家都不太重视GUID(rss2.0)这个属性,那么是不是可以将文章title+发布日期作为判断文章唯一性的标准呢?


17 四月, 2006

Aqua dock的一个bug: not release file handle in time

一直使用Aqua Dock作为Windows XP桌面的应用程序launcher。(In short, Aqua Dock is a task bar and a Windows program launcher that does it with Apple's style)。上面大多数items使用应用程序自带的icon("use system icon", 可以通过icon extractor从.exe文件中获取这些图标),指向Firefox的快捷项亦然。

今天,在Firefox自动升级到1.5.0.2版的过程中,碰到这个“升级失败”的提示:至少有一个文件无法更新。请确定关闭了所有其它应用程序并有修改文件的权限,然后重新启动Firefox。

登录用户是系统管理员,权限肯定是有的。那么应该是某个应用程序锁住了Firefox的某个文件,使得更新无法成功。

这个应用就是Aqua Dock。道理很简单,我逐个关闭其它应用,同时测试Firefox是否能够更新所有文件。直到我关闭了Aqua Dock后,升级才顺利完成。

我做了个简单的覆盖尝试,证实Aqua Dock确实会锁住那些配置为“use system icon”的item指向的执行文件。我猜想,Aqua Dock打开这些应用程序文件(.exe)以获得其中包含的图标,但是却没有及时关闭被打开的文件句柄,造成其它应用无法删除或者覆盖同一个exe文件。

曾经向不少人推荐Aqua Dock,这里特别提醒一句,如果你在安装后者升级某软件或应用的时候碰到类似问题,不妨关闭正在运行的Aqua Dock再试试。


17 四月, 2006

HP Pavilion ze2000的触摸板驱动

不安装这个驱动,就无法禁止此型号笔记本上的触摸板。使用键盘的时候,一不小心碰到它,常常会造成不必要的麻烦。

Synaptics Touchpad for windows 2000/XP 驱动,版本 7.13.0.1

点击此处下载,下载后,直接运行即可


11 四月, 2006

Linux中关闭扬声器

turn off the speaker (小喇叭,和声卡无关)

shell: setterm -blength 0

or setterm -bfreq 0

xfree: xset b off


5 四月, 2006

RIA,在浏览器上动态显示Chart

应该区分浏览器上的两种页面,一种是网站显示,一种是web Application

作为一个网站,当然要照顾到bookmark 功能,要考虑back功能,要关心是否能被搜索引擎找到,还要尽量保证普通用户对网页浏览的一贯体验。而webApplicaton是原来的c/s结构的应用的B/S版,更注重桌面程序的用户体验。 基于这样的认识,我认为,做网站开发,UI的设计,还是应该以XHTML+CSS为主,Ajax用来部分改善UE,不宜过度使用,FlashXUL等其它RIA技术更是如此。

最近公司要开发一个高压侧变压器在线监测和诊断系统,初步决定采用B/S结构,而动态显示图表功能必不可少。譬如分析或者统计的结果曲线,饼图,2维或多维柱图,温度计,仪表盘等。这就是一个典型的桌面应用程序模块。要保证能够在IE6上运行,争取兼容Firefox。采用哪种技术实现呢?

优点:界面够漂亮,够“动态”

问题:除了学习曲线过长外,Flash在图文/列表处理方面的表现,也让人担忧。

参考:展望2006年,Flash來未有來

Ajax动态读取后台数据,通过JSFlash object进行交互。

要求:图表Flash要做得比较通用,设计Flash的人最好能了解一些ActionScript

问题:还是需要学习ActionScript

参考:Flash+Javascript framework Open Source Flash - flashjs ActionScript 2.0入門系列教學文章

W3C的标准是SVG,这个VML肯定是没戏了。IE5开始支持,不过在稍后版本,包括IE6的典型安装中,就已经不再包含VML控件了。当然,现在的IE6还支持,但是要手工打开“允许二进制脚本”安全选项。不过,至少在IE里还能用,看了几个例子,都还不错。

参考:

VML实现国际钟表,VML Clock

Chart Widget Mozilla或者Opera上直接用<canvas>,在IE上利用VML封装成IECanvas,不过,我的IE6上显示始终有问题,脚本出错

还需要等待,等IE开始支持了再说。在这之前,还不如使用VML

使用JS+div,在浏览器上直接绘图。学软件专业的人一定倍感亲切吧。一个椭圆可能包含数百个div,数量是多了点,不过绘制和clear的速度都不慢。

优点:纯粹。这里只有JSXHTML

参考:JavaScript VectorGraphics library

问题:过多的对象生成和释放,不知道会不会引起浏览器内存泄漏

MozillaXUL,微软的XAML,还在研究,一时半会儿恐怕用不起来。而且,几个例子,只看到一些常用控件的实现,对于Chart,尤其是vector chart,并未涉及。从发展上看,矢量图的方向还应该是SVGXUL/XAML,关注的应该是客户端RIA的整体实现方案

参考:XUL ZK Engine, ZK demo


10 三月, 2006

qmail的邮件组功能

新公司用qmail,接触不多。原先的管理员对qmail也不熟悉,只能自己上马。想开通邮件组功能,类似于mailing list,给xxx@abc.com发信,包含于xxx这个组的所有成员都可以收到邮件。

我用的是qmailadmin 1.2.3,vpopmail 5.4.10。查看qmailadmin.cgi,编译进了ezmlm模块,管理界面也有“邮件列表”(论坛相关,显示和添加)功能,但是每次添加都莫名失败。

尝试用邮件帐号的转发功能,就是先建立一个邮件帐号xxx,然后修改它的配置,转发所有的信件到指定的地址(一个或者多个)。这个可以模拟邮件组的功能,但是有一个很大的缺憾,那就是它无法判别发信人是否在邮件组中。举例来说,xxx@abc.com是一个邮件组,它转发的邮件地址列表中包含a@abc.com,b@abc.com,c@abc.com。当这个a给xxx@abc.com发信时,a,b和c都收到邮件。b收到邮件,选择回复a,并转抄xxx组,这时候,a会收到两封一摸一样的邮件,而b也会再次收到自己刚刚发出的邮件。让人感觉很不爽

对于更喜欢在后台以命令行方式操作的,添加这样的邮件组,可以参考:http://www.chinese.qmail.org/servlet/template?series=28&article=59

設立通信論壇(mailing list) :我想將寄至me-sos@my.host.name的郵件轉寄給一撮人。

答: 將電郵地址放入~me/.qmail-sos;每行只放一個地址。內送至me-sos的郵件便會轉寄至相對的電郵地址。你亦需要執行

touch ~me/.qmail-sos-owner

如此彈回的郵件才會寄給你,而不會發還給發件者。

另一方法:ezmlm是一個通信論壇管理軟件,支援自動訂閱、確認程序、檔案庫、全自動的回彈郵件處理(包括發信通知用戶他們錯失了哪些郵件)等等。

5 三月, 2006

无法查看CHM文件内的内容

同事email给我一个js的help文档,是chm格式的。我能打开此文件,也能看到左边的目录信息,但是无法显示右面的具体内容。报错:无法显示网页。错误页面的url是:res://C:WINDOWSsystem32shdoclc.dll/dnserror.htm#mk:@MSITStore:blah...,或者res://C:WINDOWSsystem32shdoclc.dll/navcancl.htm#mk:@MSITStore:blah...

不能显示(Can not display),这很正常,因为chm的访问存在严重的安全漏洞。虽然微软为此发布了很多的security patch,但是,显然还不够。所以它特地加上了这个功能,当你打开这种来路不明(对系统来说)的chm文档时,系统会提醒你可能存在风险。而如果你选择强制打开,那么IE会忽略msits协议,结果就是你看到的“无法显示网页”的错误页面。

如何解决:右键点击chm文档,查看属性,可以看到“安全”提示:此文件来自于其它计算机,可能被阻止以帮助保护该计算机(嗯,这段话逻辑不通,应该是“帮助保护您的计算机”),提示后面有一个“解除锁定”的按钮。选择解除,然后保存修改。

现在你就可以正常访问此chm文档了。

注意:如果你chm所在路径名,包括它的文件名,如果包含"#"字符,那么,也可能出现这种错误。

又如果你连chm文件都无法打开,那么很可能是%system%/hhctrl.ocx有问题,或者msits协议没有注册,或者中了和chm漏洞有关的病毒,google吧。


14 二月, 2006

悼念方正王选

王选病逝_新闻中心_新浪网

纪念王选

怀念王选,怀念北大计算机研究所


20 一月, 2006

用JS写的星际争霸

强的。http://matrix.foresee.cn:8080/forum/images/usr/pub/Sunny/sc/sc.htm


16 一月, 2006

网站发布,beta版?

ajaxian网站前日发布了一篇新的文章,谈到网站发布新的功能时需要注意的几个问题,较有感触:

还提到几点,关于如何降低用户试用的门槛,保证html/css和javascript代码的合法等,都是在发布网站或者发布新功能时候应当考虑的问题。

 查看全文

22 十一月, 2005

SVN与CVS性能比较

原文:http://svn.haxx.se/users/archive-2005-06/0753.shtml

测试者在相同的环境下,就几个关键的操作,测试了两者的速度,结果如下:

Action

File set(M bytes)

CVS (second)

SVN (second)

Check out

1

17.32

26.96

7

16.92

35.01

Tag

1

29.30

0.88

18

52.45

0.86

Update

1

44.46

4.91

8

53.39

38.62

Create branch

1

27.99

0.80

21

2.93

0.69


1 十一月, 2005

关于rss图标的争论

这个图标,就是很多提供rss输出网站上的或者

争论起源于http://www.reallysimplesyndication.com/2005/09/26#a970

大概意思是说,“rss/xml”这样的图标,很不直观,普通人不知道是干什么的。应该改为“subscribe”,就是“订阅”。

有人提出不同意见:http://weblog.philringnalda.com/2005/10/16/empire-of-white-on-orange-xml

针对多国语言环境,譬如英文中是"subscribe",中文里是“订阅”,有点乱。不如统一起来。

Dave当然要解释一下:http://www.reallysimplesyndication.com/2005/10/16#a105

事情不大,不过这种对细节负责的认真态度,值得学习。


26 十月, 2005

Gaim安装,连接gtalk

Google的gtalk使用的是Jabber的XMPP协议,而Linux上流行的IM客户端Gaim支持Jabber,所以Gaim自然可以连通gtalk服务器。Gaim是个开源项目,最近Google招收了一个这个开源项目中的工程师Sean。Sean在Gaim主页中提到这件事情,并讲了一些gtalk的发展目标和他在gtalk项目中的工作。

Working at Google

I (Sean) have been hired by Google, moved to Seattle, and have been working on the Google Talk team for about a month and a half. The goal of Google Talk is to make real-time communication as open as possible, and in that regard, I've been working to offer all of Google Talk's features into other clients. Currently, I'm working on making it as easy as possible for other clients to use Google Talk's voice features. You can expect Gaim and other clients to be interoperable with Google Talk's voice features in the near future.

今天试着安装了Gaim,并按照Google上的帮助做了设置,但是却没有成功。在用户验证的时候报告“断开连接,服务器未使用任何支持的身份验证”的错误。

注意到设置帮助中提到的高级选项“Use TLS if available”选项,所以怀疑TLS(gnutls,Transport Layer Security Protocol)是unavailable的。查看了Gaim的configure.log,果然没有找到gnutls.h和gnutls的library。于是从网上下载gnutls-1.2.8.tar.bz2,libgcrypt-1.2.2.tar.gz和libgpg-error-1.1.tar.gz包,依次安装。然后以--with-gnutls-includes和--with-gnutls-libs指定gnutls头文件和库的目录,重新configure,编译安装后,连接成功。

gtalk不提供其他IM都具备的分组功能,猜测是因为gtalk可以修改联系人的显示名称,通过搜索,可以方便地找到某个联系人。Google Talk分组技巧用的就是这个办法。前后的因果关系有点类似gmail中没有目录,而是以标签(label)替代。


22 十月, 2005

Ajax使用调查

原文:http://www.ajaxian.com/archives/2005/10/ajax_survey_res.html

Ajaxian发起了一个关于Ajax使用的调查,现在结果出来了。调查使用的是surveymonkey提供的服务,你可以使用filters功能细分结果数据,使用view功能查看详细的投票数据,使用export导出结果报表。
参加调查的一共有763人,人数不多,结果的普遍性不强。不过调查结果比较有意思。

结果让人吃惊。原先以为,大部分的用户在开发和原型中使用Ajax,实际上,在产品中使用Ajax的占31.2%,紧紧排在“开发”(32.8%)之后。

看来,人们不仅仅以议论Ajax,更在实际产品中实现了Ajax。

PHP第一,40.2%;Java第二,35.1%。喜欢新技术的人更热衷于PHP。

调查之前,我们特地增加了一个选项:直接使用XmlHttpObject,而不是先前存在的框架、工具包或者代码库。因为我们强烈地预感到,选择这一项目的人会很多。果不其然,有高达40%比例的用户选择了XHR(XmlHttpRequest)方式。Prototype/Scriptaculous 23.1%,排第二,是最受欢迎的工具包。

这里比较有趣的是问题2和3的调查用户之间的内部关联。

大部分用户使用PHP,但是PHP框架,例如Sajax、Najax等,比例却不高。

而很少用户使用Rails,但是Prototype/Scriptaculous却名列框架使用第一。

这说明Rails的确会带给我们很大帮助。它让原型设计更加方便,使用Rails是你明智的选择。对于其他后端框架,你需要自己抉择,根据我们的调查,通常的结果是XHR。

ajax-survey-results.png


20 十月, 2005

放弃控制

原文:How I Learned To Stop Worrying and Relinquish Control.

在google之前,Excite,Hotbot和Altavista等 搜索引擎都尽可能地延长从搜索开始到结果出现这个过程,试图让用户在他们提供的页面上逗留更长的时间。这个目标就是所谓的“黏性”,不能轻易让用户离开你 的站点。然而Google出现了,让整个互联网社会吃惊的是Google似乎更关心如何让你更快速地去往你想去的地方。积极地将用户从自己的网站 上赶走,这其中怎么可能存在成功的商业模式?

7个年头和75 billion美元的市值明白地回答了这个问题。当其他搜索引擎试图控制你的行为的时候,Google认识到是用户自己支配自己,如果想取胜,只有(让Google)成为用户的首选。

Let Go, Luke

互联网发展的历史一次又一次地向我们展示了放弃控制的价值。Amazon客户评论功能,最初被那些深信负面评论会损害销售的人们认为是愚蠢的,而事实是,这个功能提高了信用,带来更多的订单。eBay的开放市场抛弃对买卖双方的集中化控制,取而代之的是分布式的管理系统,消费者个体可以相互评级。 不约而同地,GoogleAmazoneBay先后发布了他们的API(应用程序接口),这样,其他人就可以以各种出人意料的和创新的方式利用他们提供的信息。

很多设计者发现放弃控制是一件相当困难的事情。当Jeff在评判一次交互式设计竞赛的时候发现,设计者总是尽其所能地试图去控制用户的体验过程,譬如,弹出一个窗口或者改变窗口的大小,在一个Flash中添加所有的东西,连续不断的音乐等。他们被控制产品的表象所迷惑以至于忽略了用户体验的前因后果。

互联网给我们的教训是,我们必须放弃,必须尽可能少的施加不必要的控制。这个用以塑造用户体验的最少控制的需求的标准是什么?用户,工具和内容,它们一起来自何处?如何以一种有意义的并且是和商业相关联的方式来放弃控制?

A Flickr of Light

有一盏指路明灯,Flickr。当OfotoSnapfishShutterfly正在为照片打印大打价格战的时候,Flickr却坚信它的用户会发现Flickr的服务值得付费(当然,你不付费也可以使用)。Ofoto强迫用户注册,否则无法浏览其他人的公开照片。这样的要求必然导致许多用户选择那些更少控制的服务。

因为传统的图片站点选择了和线下商业同样的盈利模式,所以他们总是试图吸引用户定购那些可以产生利润的服务。而Flickr,天生于互联网,由图片 库,用户,标签(tag)和相互之间的联系组成。它不受任何传统的商业模式驱使,毫不困难地就放弃了控制。任何人可以浏览其他人公开的照片,可以贴标签。 你可以将任何其他人加为自己的联系人,无需对方的回应。

也许Flickr做的最伟大的事情是开放了API,允许开发者无缝接入。这就意味着,某人可以开发一个完全免费的工具,将照片从iPhoto直接移动到Flickr上。这个新的简捷的上传工具极大地增加了对Flickr的使用,以至于你需要去购买一个高级帐户(Pro account)。请注意:其他人的工作,Flickr赚到了钱。这只是因为Flickr放弃了控制。

Flickr认识到用户需要更好的分享照片的方式,Flickr也认识到用户分享照片的方式有无数种。Flickr让用户从分享照片中获取自身价值——通常这不符合传统服务的打印-礼品模式。不是努力去限定用户的体验,而是授用户以沙盒和在这个沙盒中创建富有意义的体验的方法。

Trail the Long Tail

另外一个关于如何移交控制权到用户手中以取得巨大商业回报的例子,是Chris Anderson关于“长尾”(Long Tail)富有洞察力的讨论(原文网志)。

互联网时代之前,当货品在商店销售或者通过商品目录进行销售的时候,因展示空间的限制,采购员控制了你购买的范围。今天,在互联网上,空间几乎是无限的,因此,这个控制权就回到了消费者手中。据Anderson记录,“Barnes & Noble书店平均销售130,000种书,Amazon的在线销售的半数以上来自于这130,000种书之外”

Netflix就是这样一个将选择内容的权力移交给消费者并从中 受益的长尾企业。这并不是真正的权力移交,也不是递送渠道的移交——有很多种业务可以将租到的货物送到你家。不是这些,Netflix最重要的步骤是让消 费者自己控制租赁DVD的时间长短。你可以无限期地,无需额外费用地,租有这个碟片。结合大容量的商品目录、无过期费用和递送到家服务,Netflix让 消费者得到了莫大的对租赁体验的支配,注册用户的数量也跟着水涨船高了。

Survial of the Fittest

放弃控制正在成为互联网行业方方面面的需求。消费者要求RSS,这样,他们可以在自己选择的时间,以自己选择的工具来获得信息。标签(Tag)和社会性分类(folksonomy)将内容的组织分类权力移交给用户。人们正在公告板和网志上生成内容。极其流行的CraigslistCraig Newmark定期地调查他的核心业务的用户

放弃控制意味着增加了不确定因素,这是可怕的一面。加强控制,会带来可信赖的,可遇见的成果。但是,在这个日渐复杂,混乱,充满诱惑的世界里,我们必须承认把着缰绳是我们的消费者。任何试图控制他们体验的举措都会导致他们弃你而去,寻找别处自由所在。我们可以做的,就是提供最适合他们生活和习惯的最好的工具,最好的内容。

Peter Merholz是Practice Development的执行官,也是Adaptive Path,世界第一的用户体验顾问公司的创办者之一。


14 九月, 2005

又见病毒

系统硬盘的MFT坏了,只能FORMAT,重装系统。还没完全搞定,就发现中了毒。Sygate Personal Firewall发出警报,%windows%/csrss.exe试图连接chameleonexpo.com.au。查看任务管理器,果然有一个以我个人身份运行的csrss.exe进程,尝试kill,失败。使用ntsd -c q -p PID命令,成功。手工删除csrss.exe,重启后,csrss.exe又出现了。

安装Norton Antivirus,可以发现病毒,但是无发修复,无法隔离。

参考:

http://www.kill.com.cn/vir/muma/middle/1864.asp

http://www.sophos.com/virusinfo/analyses/trojpindropa.html

解决方法:

  1. 使用ntsd结束%windows%/csrss.exe进程
  2. 打开注册表,在HKCR下搜寻包含mcsys.dll的CLSID项,删除
  3. 在HKLMSOFTWAREMicrosoftWindowsCurrentVersionShellServiceObjectDelayLoad下找到“system”项,如果它的内容和上面搜到的CLSID一致,则删除
  4. 重启,删除%windows%下的csrss.exe和mcsys.dll

搞定


28 八月, 2005

MySQL char type field is case insensitive

用惯了Oracle,对MySQL中的很多默认属性很不习惯。譬如今天碰到的这个问题,我有一张表,里面有一个name字段,NOT NULL,并且加上了UNIQUE限制。第一次,插入‘AJaX’,正常,第二次,想插入‘AJAX’,失败,报告ERROR 1062:duplicate key错误。查了才知道,原来MySQL对char/varchar类型的字段,在匹配的时候是不区分大小写的,除非在建表的时候指定此列的BINARY属性(参考)。晕啊。建议大家要么加上BINARY属性,要么不要添加UNIQUE(或者PRIMARY)限制。对应的,是用一个CHAR(32)的MD5的结果作为唯一键值比较合适。

还有NOT NULL属性,这个在Oracle里面,其实是一个‘check’限制,如果试图插入NULL值,会出错。但是MySQL不会,那么它插入的是个什么数值呢?如果你设置了DEFAULT VALUE,那很简单,就是这个缺省数值,万一没有设呢?我用char类型试了一下,select bin(x)出来的结果是NULL,但是,你用IS NULL这个条件query是查不到结果的。再晕。所以,奉劝大家,如果指定某列NOT NULL,千万要加上DEFAULT VALUE,否则,会出现一些稀奇古怪的后果。

发现一篇文章,MySQL Gotchas,我最近使用MySQL开发碰到的问题,这里基本上都提到了,推荐。


25 八月, 2005

Google的即时通(IM),Google Talk

这里刚刚得知MSN Messenger 7.5正式版发布了,而“即将发布”已久的Google的即时通软件也真的即将发布了。到http://talk.google.com上看,二级域名已经生效,重定向到http://www.google.com/talk上,不过,是404错误。好像还是11点钟的事情,过了一会儿,肉骨头在skype上给我消息,Google Talk已经可以下载了,疯特。

试用了,最大的感觉是简洁,就象当年MSN给我的感觉一样。下载包更小,只有900k。只能用gmail帐户登陆,你可以邀请有gmail帐户的朋友,如果是其他邮箱的,google会在发送Google Talk邀请的同时,发送一封Gmail的邀请信。呵呵,当年Google在Gmail上的投入,真是英明之举啊,搜索树立品牌,Gmail聚集用户资源,Desktop Search和Google Talk离开浏览器向桌面应用发展,还有传说中的Google的浏览器,让人期待啊。多个选择,对我们用户总归是好事情。

通了语音,质量非常好,我和骨头都很满意。

现在的Google IM还是beta版(Google喜欢beta,最近网上也流行beta),正在增强的功能包括即时通讯中文字和语音的加密传输,这个功能目前似乎只有skype提供。还有更多new features,google暂时保密,并期待用户回馈,这也是永远beta的目的之一吧。

抓了个包(<presence type="probe" to="xxxx@gmail.com"/><presence from="xxxx@gmail.com/Talk.v64E5DFE890" to="xxxx@gmail.com/Talk.v64E5DFDFC6"><status/><priority>0</priority><c node="http://www.google.com/xmpp/client/caps" ver="1.0.0.64" ext="voice-v1" xmlns="http://jabber.org/protocol/caps"/><x stamp="20050824T03:33:11" xmlns="jabber:x:delay"/></presence><message to="xxxx@gmail.com" type="chat"><body>test, ....... no need to reply</body><active xmlns="http://jabber.org/protocol/chatstates"/></message>),Google talk走的是Jabber的XML Message协议,那么后台肯定是Jabber Server了。这样的化,只要Google愿意,并且AOL,MSN同意,随时,Google Talk都可以同时连AOL或者MSN了。

看来会有很多动作了。Jabber是开源的吗,遵守GPL吗?再说吧


24 八月, 2005

FUD -- Fear, Uncertainty, and Doubt

translated according to http://en.wikipedia.org/wiki/Fud

FUDFear(惧), Uncertainty(惑), Doubt(疑)的缩写,通过散布关于竞争对手产品的负面(含混并且不实)的消息以达到竞争目的的一种销售或市场策略。这个术语最早是用来描述计算机行业竞争中的“不实描述”手段,现在已经在各行各业广泛应用。

定义

当年Gene Amdahl离开IBM创建自己的公司Amdahl Corp后,首次提到FUD:“FUD,就是惧、惑、疑,是IBM销售人员向那些可能成为购买Amdahl产品的潜在客户逐步灌输的观念”

Eric S. Raymond 说的更详细一些:

“目的,当然是说服客户继续使用和购买IBM的产品而不是竞争对手的。而为了达到目的,一般是通过承诺凡使用IBM产品的客户在将来会受益而使用IMB竞争对手产品的则不然这样的手段。1991年以后,这个术语变得通用起来,任何在竞争中出现的故意的假情报假消息都可以被称为FUD”

这些大计算机公司的对手声称,以散布FUD来达到目的行销手段是不道德的。

对于一些名气不大的产品,通过散布它们的缺陷的不实消息,使得决策者不选择这些产品,即便它们在技术上相对而言更加优秀。作为一个公认的现象,可以概括为采购代理商们口口相传的一句格言:“没有人会因为购买IBM的产品而被解雇”。这就导致许多公司的IT部门为了迎合高层管理人员的品牌认知而购买那些明知有技术缺陷的软件。

发展

 查看全文

16 八月, 2005

Windows Update的正版验证

上微软的update网站,想安装几个安全补丁,赫然发现,微软需要正版验证了。先提示你安装一个控件“Windows Genuine Advantage Validator”,然后检验你的序列号是否合法。我用的是非官方途径得来的XP,自然无法通过验证。

CATHOME01.COM介绍一种bypass验证的方法,使用第三方的Upiea软件禁用WGA控件。不过,我这里不适用。因为Upiea1.49 Pro根本就检测不出WGA控件的存在。我估计是因为这个控件的文件地址是%windows%/system32/LegitCheckControl.dll,而不是通常ActiveX控件所在的%windows%/Downloaded, 所以Upiea找不到它。

其实,有更方便的方法。boingboing的一篇小文章“Microsoft Genuine Advantage cracked in 24h ”称,当windows update提示“快速”和“自定义”时,在地址栏填上: javascript:void(window.g_sDisableWGACheck='all') ,然后回车,后再选“快速”和“自定义”即可。我试了一下,very very very good! 搞定,写这篇blog的时候,后台正在updating呢。

其实这个方法和CATHOME01提到的方法,道理上是一样的,都是禁用这个控件。

这种“后门”,估计很快就会被Microsoft封闭的。当然,到了那个时候,我相信,一定也会有解决的办法的。道高一尺,魔高一丈,多么朴素的辩证法。

考虑到市面上用非正版XP的用户太多,可爱的微软还特地声明,凡是使用“自动更新”功能的用户,不受WGA限制。

还顺便Google到,IE 7.0中,也加入了WGA


14 八月, 2005

邮箱,也是越大越美?

我以前用过一阵子21cn的邮箱,后来因为垃圾邮件实在太多,所以放弃了。但也没有完全抛弃,怕什么时候,长久没联系的朋友会发信到这个邮箱。而且,破罐子破摔,反正它已经是一个垃圾邮箱了,所以在网上注册什么的,常常会使用这个id。因此,每隔一段时间,想起来还是会上去收收信的。

今天收到21cn发来的广告信,告诉我21cn的免费邮箱也扩容了。全部扩大到2G,通过积分方式还可以扩展到10G。原先好像只有10M吧。这不能不说是一个大大的进步。但是于我而言,却并没有喜悦。因为垃圾桶变大了,高兴的只有倒垃圾的那些spammers。

我现在的主邮箱使用的是gmail的服务。gmail很成功,21cn应该向它学习成功的经验。但不是扩容这么简单。简洁易用的界面,低调的广告,相对领先的反spam技术,方便快捷的搜索等。我特别看重anti-spam技术。一般来说,防垃圾邮件有两种基本技术,阻止和过滤。前者包括黑名单,白名单等,大多数的邮件服务都提供这个功能;而过滤,比较成熟的有建立规则和Bayesian过滤(或者类似的基于统计和概率的过滤技术)。Bayesian过滤比较智能,只需要较少的人工参与,良好学习的过滤器就可以自动识别高达99%以上的spam emails。印象中,是hotmail最早提供类似Bayesian过滤的功能,gmail从开始就有。这两个邮件服务都有一个spam目录,放的就是系统认定的垃圾邮件。你也可以"report spam"或者"not spam"来做进一步的确定,这种进一步的确定动作实际上是促使贝氏过滤器学习,以期在将来降低误报率和漏报率。(了解更多关于Bayesian filter)。btw,utblog(plog system)就是使用这种过滤技术来过滤垃圾评论的,快一年时间下来,效果越来越让人满意。

选择gmail,还有一个重要原因,google这个品牌让人放心


26 七月, 2005

PHP4,引用传递还是值传递(Pass-by-reference or Pass-by-value)

因为一直写C/C++程序的缘故,总觉得函数中引用传递要比值传递效率高。然而在PHP4中-使用的是Zend2引擎-事实却并非如此。

Zend引擎引进“引用计数”(Reference Count)概念,在不发生对变量的写操作的前提下,只是简单地修改Reference Count的值,并不做任何实际的Copy动作。也就是说,如果你的函数传入一个数组参数,而函数中对这个数组只有读操作,那么无论这个数组多么庞大,对内存的消耗并不因此增加,执行性能也不会因此降低。因为PHP解释器并不会生成(Copy)这个大数组的副本

“引用计数”机制是Zend内部在处理变量和参数传递时的隐含(implicit)机制。如果你显式(explicit)地使用“别名”(Alias)或者显式地以Reference方式传递参数,也就是在变量前添加“&”符号,那么,PHP会花费额外的代码来处理,效率反而比值传递低。

今天,我写一个读取utf8字串长度(实际长度,一个中文只算一个)的小程序,一开始使用的是引用传递,结果在处理长达22,000个ASCII字符长度的字串时(需要做超过7000次的显式引用传递),耗时数分钟。当我将传递方式改为值传递后,只需数秒,可见,显式“引用传递”对性能的影响还是很大的。

结论:

PHP4中,如果不需要修改传入参数的值,那么不要使用“引用传递”。


13 七月, 2005

php中的MAX_FILE_SIZE,文件上传限制和bug

PHP关于文件上传部分,特别提到表单隐藏域:MAX_FILE_SIZE,意思是接收文件的最大尺寸。文档中给出的例子如下:

<form enctype="multipart/form-data" action="_URL_" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>

这里设置MAX_FILE_SIZE = 30000,期待一种可能,使得浏览器在传送文件之前能够依此作出预先判断,如果文件尺寸大于30000字节,则不执行实际的POST动作。也就是不往服务器发送文件内容,而是直接在客户端提醒用户“你试图上传的文件超过30000字节”。

这的确是一个非常棒的主张,但在现实中却暂时无法实现。不是因为这个限制可以“被简单地绕过”,而是IEFireFox这两个主流浏览器都不支持这个特性。PHP的这个建议尚未被采纳

MAX_FILE_SIZE还有一个用场:后台PHP会判断接收到的文件大小是否大于这个值,如果超出,$_FILES['thisfile']['error']会被设置为UPLOAD_ERR_FORM_SIZE(2),同时放弃保存临时文件,将$_FILES['thisfile']['size']置0。

这个例子,没问题,表现正常,当我试图上传一个40多K的文件时,PHP程序报告“文件超过MAX_FILE_SIZE”。

但是,如果我们将表单中的MAX_FILE_SIZE从30000减少到1000,情形又如何呢?

问题就出在main/rfc1867.c中判断文件是否超长的这部分代码上。php每次从buffer中读取FILLUNIT字节长度的内容后,首先判断“已经读到的内容长度(total_bytes)”是否大于MAX_FILE_SIZE,然后再增加“已经读到的内容长度(total_bytes)”。这样一来,和预计的结果之间至多会有FILLUNIT字节的误差,而FILLUNIT=1024*5=5K。(点击bug了解详细内容)

这就是说,当MAX_FILE_SIZE<5K时,上传一个大于MAX_FILE_SIZE,但是小于5K的文件是没有问题的。

当然,因为这个设置很容易被绕过,所以服务器端编程不应当依赖于MAX_FILE_SIZE。而且,5K到底是个很小的数值,对大多数上传文件的表单来说没有影响。

btw, PHP中post_max_size,upload_max_filesize, MAX_FILE_SIZE的设置,和客户端上传给服务器端的流量大小无关。Apache服务器从客户端接收长度不超过LimitRequestBody字节数的请求,然后传送给php模块,php模块再决定是否保存成临时文件,设置$_FILES全局变量,移交给script进一步处理。这个Apache的LimitRequestBody选项缺省值=0,允许Request body的最大字节数是2G(Linux + Apache)