24 八月, 2008
用照片制作3D场景,Microsoft release photosynth
微软Labs正式推出photosynth,可以分析照片之间的相似性,根据相互之间的关联拼接一系列的照片,最终制作成一个类3D效果的场景效果。你可以用Firefox或者IE浏览photosynth,不过需要安装对应的播放器插件。
一个截图:
因为拍的照片数量太少,所以出来的效果不是很好。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文件,内部的工作原理如下:
- 取得需要显示的.mmap文件内容
- 提取/转换 .mmap到xml文件
- 使用XSL将此xml转换成Freemind的.mm格式
- 使用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
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:
- Associative Model Of Data
- Relational Model Of Data
- Column Oriented Model Of data
DBMS也该有发展了。
13 二月, 2008
UTBLOG主页视觉热点图
heatmap of UTBLOG homepage (http://www.utblog.com/plog/),看上去,主页设计很有问题,最热的地方,提供的可用信息却最少。
使用风鬼Feng-GUI生成,老外的东西,却使用中文名字,有意思。
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.
我关注的几个优点:
- 空间无限
- 每月上传的照片数目不限(每个Album只能存放300张照片,但是Album的数目不限)
- 不改变上传照片的尺寸和精度
- 有多级权限,支持tag
稍许限制:
- 现在只支持JPG格式,Yahoo!解释说,这是因为现在的数码相机导出照片的格式大都是JPG。不过,Yahoo!也会在将来支持其它格式的图片
- 可以上传大尺寸照片,但是同时上传尺寸照片(每张大小2~5M)的数量会受到限制
- 每半年必须登录Yahoo!一次,否则照片可能会被删除
flickr不花钱几乎不能用了,没想到它的东家倒慷慨。试试看再说,好的话搬家。
17 七月, 2006
hosts file doesn't work, 罪魁祸首是MSN Messenger
今天被这个问题浪费了至少1个小时,很生气!这里记下来,希望后来者能节省点时间。
症状:
- ping(或者使用IE, FF访问)一个网址,hosts file不起作用,完全被ignored
- hosts文件的位置正确,entry语法正确,registry中对应的key值("HKEY_LOCAL_MACHINE/System/CurrentControl Set/Services/TCPIP/Parameters/DataBasePath")正确
- 关闭"dns client" service,并重启进入安全模式,依然无法ping通hosts file内的entry
奇怪现象:
- 在你hosts文件所在目录下(xp: %systemroot/system32/drivers/etc),除了hosts file以外,还有一个陌生的hosts.msn文件
直接原因:
- "HKEY_LOCAL_MACHINE/System/CurrentControl Set/Services/TCPIP/Parameters/DataBasePath"的值虽然正确(在xp机器上应该是"%Systemroot%/System32/drivers/etc",表示hosts file的实际路径),但是它的类型(REG_SZ)却是错误的。正确的类型是:REG_EXPAND_SZ,扩展字符串,可以以实际值替换环境变量%systemroot%。而REG_SZ类型的字串则必须指定实际路径,如"C:/windows/system32/drivers/etc"。
解决方法:
- rename (注册表key)DataBasePath
- 新建REG_EXPAND_SZ类型的值"DataBasePath"
- 将原"DataBasePath"值拷贝到新"DataBasePath"内
- 删除原"DataBasePath"
幕后凶手:
- 曾经使用过MSN Messenger 7.0/7.5的“Connection Troubleshooter”或者在安装这两个版本(7.5以上版本未做测试)的Messenger时选择了"automatic scanning and configuration of ports" option
作案过程:
- 保存hosts到新的hosts.msn文件
- 修改注册表值DataBasePath的类型,从可扩展字符串到普通字符串,结果系统无法查找带%号的路径,造成hosts文件失效
作案动机:
- 我不用这个hosts,大家也都别用
- 某些间谍程序和病毒再也没法使用这个hosts作恶了
- 让大家充分认识到注册表值的这两种字符串类型之间的微妙区别
- 一想到会有很多人为此焦头烂额,真开心
- Bill说...
感谢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
原先的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,不宜过度使用,Flash,XUL等其它RIA技术更是如此。
最近公司要开发一个高压侧变压器在线监测和诊断系统,初步决定采用B/S结构,而动态显示图表功能必不可少。譬如分析或者统计的结果曲线,饼图,2维或多维柱图,温度计,仪表盘等。这就是一个典型的桌面应用程序模块。要保证能够在IE6上运行,争取兼容Firefox。采用哪种技术实现呢?
- 全部采用Flash实现
优点:界面够漂亮,够“动态”
问题:除了学习曲线过长外,Flash在图文/列表处理方面的表现,也让人担忧。
- 图表部分用Flash实现,Ajax+js+flash
Ajax动态读取后台数据,通过JS与Flash object进行交互。
要求:图表Flash要做得比较通用,设计Flash的人最好能了解一些ActionScript。
问题:还是需要学习ActionScript
参考:Flash+Javascript framework Open
Source Flash - flashjs; ActionScript 2.0入門系列教學文章
- 使用微软的VML实现图表
W
参考:
VML实现国际钟表,VML Clock
Chart Widget 在Mozilla或者Opera上直接用<canvas>,在IE上利用VML封装成IECanvas,不过,我的IE6上显示始终有问题,脚本出错
- 直接使用SVG
还需要等待,等IE开始支持了再说。在这之前,还不如使用VML呢
- 全部采用JavaScript实现
使用JS+div,在浏览器上直接绘图。学软件专业的人一定倍感亲切吧。一个椭圆可能包含数百个div,数量是多了点,不过绘制和clear的速度都不慢。
优点:纯粹。这里只有JS和XHTML
参考:JavaScript
VectorGraphics library
问题:过多的对象生成和释放,不知道会不会引起浏览器内存泄漏
- XUL、XAML或其它
Mozilla的XUL,微软的XAML,还在研究,一时半会儿恐怕用不起来。而且,几个例子,只看到一些常用控件的实现,对于Chart,尤其是vector chart,并未涉及。从发展上看,矢量图的方向还应该是SVG。XUL/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
悼念方正王选
16 一月, 2006
网站发布,beta版?
ajaxian网站前日发布了一篇新的文章,谈到网站发布新的功能时需要注意的几个问题,较有感触:
- 不要发布未完成或者不完整的功能
- 不要为了表示一直在更新,而故意限制某些功能的发布
- 虽然IE还是主流,但是早期的使用者一般都使用Firefox或者Safari,千万不要忽略这些人
- 避免没完没了的“lauching soon”页面
- 吸引博客,但是不要与他们争论,即使你是正确的
- 不要向用户索取额外的个人信息
还提到几点,关于如何降低用户试用的门槛,保证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,实际上,在产品中使用Ajax的占31.2%,紧紧排在“开发”(32.8%)之后。
看来,人们不仅仅以议论Ajax,更在实际产品中实现了Ajax。
- 我将Ajax和哪种后台开发语言一起使用
PHP第一,40.2%;Java第二,35.1%。喜欢新技术的人更热衷于PHP。
- 我使用哪一种Ajax的框架、工具包、代码库
调查之前,我们特地增加了一个选项:直接使用XmlHttpObject,而不是先前存在的框架、工具包或者代码库。因为我们强烈地预感到,选择这一项目的人会很多。果不其然,有高达40%比例的用户选择了XHR(XmlHttpRequest)方式。Prototype/Scriptaculous 23.1%,排第二,是最受欢迎的工具包。
这里比较有趣的是问题2和3的调查用户之间的内部关联。
大部分用户使用PHP,但是PHP框架,例如Sajax、Najax等,比例却不高。
而很少用户使用Rails,但是Prototype/Scriptaculous却名列框架使用第一。
这说明Rails的确会带给我们很大帮助。它让原型设计更加方便,使用Rails是你明智的选择。对于其他后端框架,你需要自己抉择,根据我们的调查,通常的结果是XHR。
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的开放市场抛弃对买卖双方的集中化控制,取而代之的是分布式的管理系统,消费者个体可以相互评级。 不约而同地,Google,Amazon和eBay先后发布了他们的API(应用程序接口),这样,其他人就可以以各种出人意料的和创新的方式利用他们提供的信息。
很多设计者发现放弃控制是一件相当困难的事情。当Jeff在评判一次交互式设计竞赛的时候发现,设计者总是尽其所能地试图去控制用户的体验过程,譬如,弹出一个窗口或者改变窗口的大小,在一个Flash中添加所有的东西,连续不断的音乐等。他们被控制产品的表象所迷惑以至于忽略了用户体验的前因后果。
互联网给我们的教训是,我们必须放弃,必须尽可能少的施加不必要的控制。这个用以塑造用户体验的最少控制的需求的标准是什么?用户,工具和内容,它们一起来自何处?如何以一种有意义的并且是和商业相关联的方式来放弃控制?
A Flickr of Light
有一盏指路明灯,Flickr。当Ofoto,Snapfish和Shutterfly正在为照片打印大打价格战的时候,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)将内容的组织分类权力移交给用户。人们正在公告板和网志上生成内容。极其流行的Craigslist的Craig 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
解决方法:
- 使用ntsd结束%windows%/csrss.exe进程
- 打开注册表,在HKCR下搜寻包含mcsys.dll的CLSID项,删除
- 在HKLMSOFTWAREMicrosoftWindowsCurrentVersionShellServiceObjectDelayLoad下找到“system”项,如果它的内容和上面搜到的CLSID一致,则删除
- 重启,删除%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
FUD是Fear(惧), 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字节”。
这的确是一个非常棒的主张,但在现实中却暂时无法实现。不是因为这个限制可以“被简单地绕过”,而是IE和FireFox这两个主流浏览器都不支持这个特性。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,情形又如何呢?
- 上传800字节的文件,正常;
- 上传40K的文件,PHP报告文件过大,也正常;
- 上传3000个字节的文件,PHP未报告错误,它成功保存了文件!出乎意料!
问题就出在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)
.png&mode=medium)

