胡思乱想 2.0 (ttthree)
2007-06-01
  Zooomr,令人刮目相看

一年多以前,注意到过这个早早就支持多语言、流量限制比Flickr大方得多、支持Gmail帐号TPass登录的照片网站。最近偶尔访问到这个网站,发现它正在进行一次重大的版本升级,升级过程中困难重重,包括数据库访问和硬件都出了问题。然而这些对于一个只有两个开发人员的网站来说,是再正常不过的事情。浏览了一下它的官方博客,才知道这个Zooomr真的是令人刮目相看:尽管它下线一周多,许许多多的用户们毫无怨言,我看到的所有评论都是期待和赞美...

homestar14 said on 30 May 2007 at 10:40 am: 

Take your time, we can wait. Good luck at finding a new server. Mark III is totally worth it.

BG said on 30 May 2007 at 10:42 am:

Much love Thomas and Kris. Thanks for the hard work. We’ll play hard on the other side of M3…

-McBLG

rkalajian said on 30 May 2007 at 10:48 am:

Keep up the good work. You’ve got a lot of dedicated Zooomr users backing you.

可以想像,Zooomr必然带给了它的用户很多其他类似服务商无法比拟的东西。

 
2007-04-21
  将soopie向Dreamhost迁移

出于为xiong节省成本的考虑,近日在尝试将soopie移到Dreamhost的虚拟主机当中。任务艰巨主要体现在以下两点:

- 转移的数据量大,总共为9G,而且有无数的小文件(图片,视频,文本。。。)。在soopie的服务器和Dreamhost服务器以及Dreamhost不同帐号之间倒腾数据是一件挺麻烦的事情。先是打包压缩,然后ftp传送,再然后解压,这些步骤都非常的费时。通过这个过程,了解了两件事情:

  1. lftp后台传送很方便,调用put命令以后,任务就在后台运行了,这时候退出lftp,任务进程会一直继续直到传送完成;Dreamhost上只有最基本的ftp命令,后台运行就比较困难:先运行nohup ftp;然后所有的输出就被定向到nohup.out了;输入open <主机名>,回车;输入用户名;输入密码;输入put或者get命令;Ctrl+Z把进程挂起;bg命令把ftp进程放到后台。整个操作过程中没有回显,一不小心输错了就只好从头再来-_-
  2. soopie到目前为止9G的用户数据中,有7.3G是用户通过手机存在我们的网络硬盘中的文件,而不是分享的照片/视频,由此可见免费网络存储仍然是中国网民的最爱,大概为智能手机用户提供好用的网络硬盘客户端还是一件值得做的事情。

- 需要在Dreamhost上安装自己定制的Ruby解释器和各种扩展(soopie是基于Ruby on Rails的)。这是因为国内有不少地方的移动网关有“问题”,会偷偷修改上传数据中的boundary,导致soopie收到手机上传的HTTP包无法被Ruby CGI正确处理,需要修改Ruby解释器中一个cgi.rb来应付这种情况。这个过程其实弄明白了以后并不算太复杂,但是问题在于网络上可以检索到的任何一篇相关文章都不是完全可以拿来直接照搬成功的,需要到处借鉴,不停尝试。。。摘记于此:

1.  Freeze soopie的Rails版本到$RAILS_ROOT/vendor/rails目录,并且把soopie用到的各种gems也都freeze到$RAILS_ROOT/lib/下。这是为了保证soopie用到的Rails不会受到Dreamhost安装的新版本Rails 1.2影响。具体的做法是在$RAILS_ROOT运行rake freeze_gems,然后下载这个gems.rake文件放到$RAILS_ROOT/lib/tasks下面,并修改其中的第四行,填入soopie用到的各个gems名字,运行rake freeze_other_gems. (之后就可以把整个Rails应用程序打包了) 

参考: 这里

2.  在Dreamhost上安装Ruby, FastCGI, RubyGems, 若干必要的gems ,步骤如下:(参考1参考2)

a. 下载Ruby源代码 ftp://ftp.ruby-lang.org/pub/ruby/ruby-1.8.4.tar.gz 解压,下载rubygc.patch放到解压后的目录

./configure --prefix=$HOME/local
patch gc.c rubygc.patch
make
make install

安装成功后,在$HOME/local/bin下面会有ruby的可执行程序,

export PATH=$HOME/local/bin:$PATH

which ruby 会输出 $HOME/local/bin/ruby, ok,这样就拥有自己的Ruby解释器了

b. 下载FastCGI源代码 http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz 解压

./configure --prefix=$HOME/local
make
make install

c. 下载RubyGems源代码 http://rubyforge.org/frs/download.php/11289/rubygems-0.9.0.tgz 解压

ruby setup

安装成功后运行which gem会输出$HOME/local/bin/gem,ok,这个Ruby扩展管理工具也属于我们自己了

d. 安装几个必须的gems

mkdir $HOME/.gems
export GEM_HOME=$HOME/.gems
export GEM_PATH=$GEM_HOME:/usr/lib/ruby/gems/1.8
gem install mysql
gem install fcgi
gem install rails --include-dependencies

3.  正确设置环境变量

把用户根目录下的.bash_profile修改为:

export PATH=$HOME/local/bin:$HOME/.gems/bin:$PATH
export GEM_HOME=$HOME/.gems
export GEM_PATH=$GEM_HOME:/usr/lib/ruby/gems/1.8

4.  数据上传到Dreamhost服务器并解压之后,在Dreamhost的控制面板中加一个新的子域名,并打开FastCGI支持,默认目录设为/home/用户名/域名/public/

5.  修改一系列文件内容、文件目录权限 (参考,尤其当你遇到这样的提示时: Application Error - Rails application failed to start properly)

  • 进入Dreamhost主机目录$HOME/<第4步添加的域名>/

chmod 755 public
chmod 755 public/dispatch.*
chmod -R 766 log
chmod -R 766 tmp

  • 添加一个.htaccess文件到public目录下,内容为:

# General Apache options
AddHandler fastcgi-script .fcgi
AddHandler cgi-script .cgi
Options +FollowSymLinks +ExecCGI

# If you don't want Rails to look in certain directories,
# use the following rewrite rules so that Apache won't rewrite certain requests
#
# Example:
# RewriteCond %{REQUEST_URI} ^/notrails.*
# RewriteRule .* - [L]

# Redirect all requests not available on the filesystem to Rails
# By default the cgi dispatcher is used which is very slow
#
# For better performance replace the dispatcher with the fastcgi one
#
# Example:
# RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
RewriteEngine On

# If your Rails application is accessed via an Alias directive,
# then you MUST also set the RewriteBase in this htaccess file.
#
# Example:
# Alias /myrailsapp /path/to/myrailsapp/public
# RewriteBase /myrailsapp

RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

# In case Rails experiences terminal errors
# Instead of displaying this message you can supply a file here which will be rendered instead
#
# Example:
# ErrorDocument 500 /500.html

ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"

ENV['GEM_PATH'] = '/home/你的用户名/.gems:/usr/lib/ruby/gems/1.8'

OK,做完这些步骤之后,在访问这个应用之前,唯一可以做的是祈祷。可能遇到的情况有很多,最常见的包括以下几种:

 
2007-04-17
  再见,联机版UU盘

 
2007-04-04
  谷歌也出拼音输入法

传言了很久的谷歌拼音输入法终于在今天发布了。按照Google的行事风格,应该在愚人节当天发布,这样比较酷。不过这也从另一个方面说明谷歌和那个Geek味道很浓的美国Google有一点不同。

感觉上它和搜狗拼音输入法相比,在中文输入方面没有什么特别突出的优势,但增加了英文输入方面的一些支持:

不过遗憾的是,如果你按Shift键切换到英文输入状态,就没有这些聪明的支持了。也就是说如果你企图用它来输入英文文档,需要每个单词增加一个键的overhead.

另一方面的特性是谷歌一向拿手的,而搜狗似乎还缺乏一些基础架构/用户基础来做到:用户词库可以同步到Gmail帐号。这样你可以在家里和公司/实验室用同一套用户词库了,重装系统也不需要把词库倒来倒去。搜狗要增加这个特性则比较困难,搜狐的邮箱还没有形成类似于Gmail帐号这样的Passport,用户面也还不够。

谷歌的产品一向不愁推销,偶尔有意或者无意漏出一点半点蛛丝马迹就能让G粉们趋之若鹜,输入法的发布同样让BBS的许多相关版面/许多BLOG都火了起来,看见过几个帖子,不少疯狂的G粉面对自己心爱的Google,已经失去了理智和判断力 :p (看这个文章后面的评论,关于谷歌使用搜狗词库的事情,貌似有那么点道理,不过G粉可不管这么多,一个字,骂搜狗)

最让人叫绝的是在水木上看到一个帖子标题:Google出输入法了,我终于可以删掉搜狗拼音输入法+Google皮肤。真让人发汗...

 
2007-03-26
  被工商银行抢钱了

前几天在工商银行的网银上关联了信用卡自动还款,没有仔细看说明,以为一经设定就能生效了,不料要到下个月才能生效。。。。于是这个月就算逾期还款了,利息从刷卡日起开始算,每天万分之五。偏偏这次是刷信用卡有史以来最多的一次,吐血三升 -_-

这个故事教育我们,不要搞去什么“自动”的名堂,每个月手动一次一点也不麻烦。

 
2007-03-22
  Everything is online : 可用于替代软件的在线服务

Google是一家很了不起的公司,自从它确定了自己的商业模型之后所做的每一件事情,都是为了自己的广告业务寻找更宽广的舞台。然而就在这同时,它所推出的许多服务,都改变了整个计算机互联网行业对软件的理解。看到 Gmail,人们才知道 Web mail 原来可以做成这样;看到整合了Writely和 Google Spreadsheets 的 Google Docs & Spreadsheets,人们才发现原来在浏览器里面也可以用上Office的基本功能。今天的浏览器,更像是一个发挥想象力的舞台,原本很多需要安装软件才能完成的工作,今天都可以找到在线服务版本。

最近有所体验的是一种很炫的在线服务:文件格式转换

有了这些服务,你不再需要安装专门的工具来把Word文档打印成PDF,当你只有OpenOffice的时候也可以用它把Word文档先转成支持的格式然后用OpenOffice打开,也可以在你没有WinRAR的时候把收到的RAR文件转成ZIP格式。

 
2007-03-21
  Everything is online : 在线存储

存储介质恐怕是硬件里面价格下降得最快的一种了。一年多以前在做UUPAN的时候,国内外还没有什么特别出色的免费网络硬盘服务,它们或者容量太小,或者带宽/文件大小限制太严。而今天,当UUPAN.COM流量几乎为0的时候,国外优秀的免费网络硬盘已经不胜枚举:

Features

OminiDrive

myDataBus

DriveHQ

XDrive

免费空间大小

1G

5G

1G

5G

单个文件大小

无限制

500M

无限制

无限制

带宽

5G/

5G/

1G/

无限制

客户端工具

丰富

丰富

Windows资源管理器集成

API支持第三方应用

有,XML Post APIC++ DLL library

文件共享

支持

支持

支持

支持

Web Grab*

不支持

支持

不支持

支持

* Web Grab : 通过给出URL直接将网络上的文件下载到网络硬盘保存。myDataBusWeb Grab功能相当的酷,我用它下载两个将近400M的视频,都在10分钟以内下载完成。XDrive的相对不是很稳定,但强在文件大小没有限制,我成功保存了一个500M的视频文件。

从上表中列举的免费在线存储服务来看,似乎我们已经没有必要将数据托付给类似于UUPAN这样以非正常方式利用免费电子邮箱的软件来存储了。(xiong说等将来有钱了,半天睡懒觉半天做UUPAN,看起来也许那时候做的会是其它的软件/服务了)

这里不得不提的是Box.net,这个曾经我很看好的网络存储服务。在它还没有提供客户端的时候,我曾试图用RubyC++封装它提供的API,然后做成客户端来作为UUPAN的替代方案,让我FT不已的是封装还没做完,它居然关闭了网站的API文档部分,等后来再开放的时候,我已经不像之前那么有空了。不过即使做完了,现在也没法让很多人用,因为它已经不再提供免费注册了,最低的Plan10$/年,大多数中国网民是不愿意花这个钱的。

当空间已经不再是问题,唯一限制我们使用网络存储的就是带宽了,极限速度100KB的现有"宽带",使得我非到万不得已决不上传超过50MB的文件。期待带宽10倍,100倍增长的那一天。

 
2007-02-13
  Dream handset ...

E90 Communicator。

从N系列出来以后Nokia的外观做得越来越cool了。

这是合上的时候:

打开...

比那个9300 Communicator漂亮多了,而且还是S60的 Orz ...

 
  想象: Offline Google Applications

Google 从2004年开始陆续推出了包括Gmail, Google Calendar, Google Docs & Spreadsheets (宁愿用这么长的名字也不肯叫Google Office,避嫌? -_-) 在内的一系列优秀Web应用,其中Google Docs & Spreadsheets更是被人称为微软Office杀手。最近关于"Google Office"的最新消息是可能正在策划Presentation Tool,即在线版本的Powerpoint。而Google Docs & Spreadsheets则通过Google Toolbar增添了很酷的功能:支持直接把文件拖拽到浏览器窗口中自动用Google的在线应用程序打开编辑。

从目前看来,Google的这一系列Web应用程序,最致命的问题在于要求时刻连接着网络。于是你不可以在旅途中编写/查看邮件、查看日程安排,也不可以在网络偶尔中断的时候访问文档和电子表格。这些问题在微软的Office中并不存在,你完全可以在上飞机前从服务器上同步所有的新邮件,登机后慢慢查看。

而看来在不就的将来,这个局面会有所改变:

- Firefox 3 To Support Offline Apps

据Firefox的高层开发人员(好像已经是Google的员工了)说,Firefox 3将提供对Web应用程序的离线支持,支持的方式是提供一些API,Web应用程序可以通过使用这些API在Firefox 3中实现离线运行。 - 看起来这里会产生兼容性问题:要想使用离线版本的Google Docs & Spreadsheets,请使用Firefox 3。

- A Toolkit for Offline Web Applications

Dojo Offline Toolkit 是一个很cool的构想,它通过伪装成Proxy欺骗浏览器,让它以为自己还在连线状态。当然,这种做法的问题是需要用户安装这个Toolkit并且信任它,同时也需要Web应用程序做相应的改动。

Google的观点是他们并不打算制造一个"Office Killer",他们只是提供一种完全免费的替代方案。但是如果有一天,只要你有浏览器,不论是否连线都可以使用一套完全免费,简洁强大,不需安装的Office,你会不会去买一套价格昂贵,需要用一张DVD作为安装介质的Microsoft Office ?

 
2007-02-10
  Next Gen. Search Engine ?

相信有不少人都在挖空心思想着下一代搜索引擎应该是怎么样子,该怎么样才能弄出一个足以击败Google的新搜索引擎,从而书写一个新的神话。这里我们不讨论那些自称的第N代搜索引擎。最近注意到两个有意思的搜索引擎:

- Chacha.com : People Powered Search. 有意思,够大胆,最近拿到600万美元的风投,估计可以多雇一些人在后台支持搜索了。[1][2]

- msdewey.com : Flash based Interactive Search. 有个很俏皮的虚拟形象伴随整个搜索过程,其搜索程序基于微软的Live search. 如果你打开页面闲置很久,那个Ms. Dewey会做各种各样的动作试图引起你注意,有时候还会说:Keep on asking questions. The more you ask the more i know, and soon i will rule the world ... Wuhahaha ... :D

这两个搜索引擎若称之为下一代搜索引擎显然为时尚早,尤其后者,基本上还是一个Toy. 但却无疑提供了一些线索:

- 返回更精确的查询结果(几个,而不是成千上万个),其质量类似于一个数据检索专家充分理解我的意图并给出的结果。

- 不要要求我能够很精确地描绘我想找什么。(所谓的自然语言搜索引擎似乎还离得很远,先不说目前自然语言理解的水平,用户是否能够很清楚地用自然语言描述检索目标也还是一个很大的问题。如果要求我搜索B Tree的时候描述成:I need the definition of 'B Tree', a kind of data structure in computer science 这样详细,我想我还是去图书馆借本教科书算了 -_-)

- 有更好的交互式体验,当然,不是像Ms. Dewey这么夸张的 :p 适当地给些优化搜索结果的提示和帮助就是了。

 
2007-02-05
  智能手机乱弹

在还用黑白屏手机的时代,特别仰慕那些可以用数据线或红外连着电脑的手机。那时候我见过的可以做到这个的有西门子的几款手机,其中有个6681什么的,支持Java,可以用红外连着电脑,装个软件就可以用电脑输入发送短消息了。后来我用的手机也可以做到这一点了,还是用蓝牙连的电脑,可以装很多Java游戏,制作Java电子书…可是这个时候我突然发现很多所谓的智能手机可以直接看TXT格式的文本,而不用费劲地把文本自己做成电子书,同时还要受手机Java堆栈大小的限制。再后来我也用了诺基亚的智能手机,不过很贵。

Wikipedia上有SmartPhone的定义,但我们作为中华人民共和国的遵纪守法公民一般是不应该访问的,于是这里很难给智能手机下个定义。有的人简单地把"能够像电脑那样安装应用程序来扩展功能"的手机称作智能手机,但其实这样是有漏洞的,实际上支持Java的手机都符合这个条件。我的理解是,Java手机和智能手机的区别在于厂商是不是和第三方开发商共用一个公开的SDK来进行手机软件的开发,如果第三方开发者只能用Java SDK进行开发,而厂商或其合作伙伴却可以用自己私有的SDK来访问系统更多功能,那么这个手机就算不上智能手机了。完全是基于Java的手机不属此类(如BlackBerry,由于它完全基于Java,厂商和第三方开发者都用Java SDK,所以就算智能手机了-_-)。

周末出去买些东西,有个台球打得比我稍微好那么一点的同事想要物色一款新手机,于是同去。其实我一直对各种各样的新手机有着强烈的兴趣,非常乐意地去逛了几家大的家电商场的手机柜台,发现现在的智能手机性价比之高实在是令人发指,Nokia 5500, Dopod 310据说2006年智能手机的平均价格已经降到2450元了,而2005年是3176元 。智能手机在价位上和非智能手机已经没有明显的区别,在这样的情况下,对于那些对智能手机有所了解的人来说,如何选择似乎是比较清楚的了。

赛迪网给出一个2006-2007年中国智能手机市场研究年度报告(居然要卖将近10000人民币一份,谁有盗版的麻烦给一份)其中说了智能手机各类操作系统的市场占有率,前三依次是Symbian,Linux和Windows Mobile,分别占了63.2%,30.3%和5.4%,其中让人意外的是Linux的占有率之高和Windows Mobile的占有率之低。从我在大街上观察取样来看,它们所占份额应该没有这么悬殊。其实从应用程序的丰富程度上来看,Symbian的确是当之无愧的第一,而Windows Mobile也有不输于它的趋势,Linux则不敢恭维,看过几款摩托罗拉Linux手机,其界面一言以蔽之"千篇一律的土",第三方应用也匮乏得很,实在很奇怪它能占那么多的市场份额。从这个角度来看,比较推荐的是买Symbian或者Windows Mobile,如果要买智能手机的话。

OK,推销完硬件,下面推销一下软件: http://soopie.com 可以用智能手机分享视频、图片、上传下载文件,支持Windows Mobile和Symbian S60,买了智能手机的话一定要试试看,呵呵。

 
2007-01-21
  从Q币到博客

我有个妹妹,刚上了半年初中,她喜欢Q币已经有两年多的时间,在两年前,曾经一次过把一个朋友从腾讯带出来的数百Q币敲诈个精光,使得他时时想起来都觉得后怕。而现在她打电话给我也常常是问我有没有Q币。前些天接到妹妹的电话,很意外的,她要求我给她建博客,而且说要两个,也许她并不知道博客并不是Q币那样,越多越好 :p 当时电话里我险些脱口而出问她要独立的还是到免费BSP那里申请 … 第二天她又来了电话,问我徐静蕾的博客是在哪里的,要在那个地方也建一个。足见老徐博客的影响力之大。

给妹妹在新浪申请的博客地址是: http://blog.sina.com.cn/u/1274806102 , 她会去更新它么,写些什么呢,who knows J

 
2007-01-09
  不是年终总结

如果说在这个时候来写2006年年终总结,肯定是要被观众们鄙视的,所以在此郑重声明,这绝对不是所谓的年终总结。

如果只给一秒钟的考虑时间,能想到的在这一年中的事件事物其实不多:

  • 顺利毕业来到一个心仪的公司工作,目前enjoy工作中
  • soopie.com 这个自我感觉不错不过目前基本孤芳自赏中的项目 (见soopie的这一年)

再给一分钟的时间,我会给2007年许下这些愿望:

  • 公司的performance review… (奸笑)
  • soopie.com 新的突破
  • TBD

(从这里这个案例我们可以看出我这个人其实是很低调的,想了足足一分钟,只能想到几个这么微不足道的要求,灯神啊,满足我吧…)

题外话:

两个多月没有更新Blog的jarid在MSN上问我最近是不是很忙,好久没有写Blog了,其实我上一篇也不过事隔一个多月而已 :-)

 
2006-11-22
  流氓软件生态链

最近关于流氓软件、反流氓软件以及流氓把反流氓告了反流氓又把流氓骂了之类的新闻真是见得多了去了。今天则看到说有个中国互联网协会正式公布了"流氓软件"的官方定义,且不管这个所谓"官方"是谁封的,不管这个互联网协会和牙膏广告里的中国牙防组是不是类似,也不管它的定义是不是科学,耐人寻味的是为什么会有这么多人会加入到反流氓的行列中去乐此不疲。我想,开发反流氓软件的技术精英们,尤其是那些曾经创造过国内流氓软件开山之作的或者姓周的同志们,作为过来人,基本会很好地防范所谓的流氓软件,他们未身受其害,怎么会义愤填膺磨刀霍霍怒对流氓软件呢?是正义感在支持他们么?Orz 答案应该是否定的,正确的答案应该是:利益决定了这一切。

传说一些"装机量"(注1)超过2000万的流氓软件大公司,靠弹广告窗口月入数十万上百万轻轻松松。这么诱人的利益摆在面前,难怪乎各种各样的流氓软件层出不穷。再然后大家都来做流氓软件,做的人多了,平分下来利益就少了,有的人做不下去了,就开始换个方向来思考,做反流氓软件的软件,异军突起,只要起步早,就能迅速占领用户桌面。只要装机量上去了,就是个哈喽沃德(注2)程序也能赚钱!! 流氓,反流氓,生态链就这样见成了。流氓软件的存在和不断涌现为反流氓软件的兴起提供了肥沃的土壤,正如同病毒造就了杀毒软件市场一样,所不同的是病毒不能带来广告费,否则也会出现很多病毒作者状告杀毒软件公司这样好玩的事情了。这个生态链的形成给普通用户造成了什么样的影响呢?或许就是装机的时候多了个XXXX安全卫士之类的必备工具吧。

PS:用Firefox上网,很少遇到流氓软件问题 J

  1. 装机量是流氓界的术语,指某流氓软件占领的计算机数目。
  2. Hello World程序,一般是程序员在新入手一门程序设计语言时候写的第一个小程序,向屏幕打印文字"Hello, world",意为:你好,世界。
 
2006-11-19
  Word 2007 的Blog发布功能

很奇怪,居然不支持直接发布图片到Live Space,这一点上不如Windows Live Writer。

但对图片编辑的支持,实在是很炫:

原图是这样的:


可以用2007的Picture Tools一键处理成以下各种模样:


此外,还可以使用Smart Art,轻松插入很酷的图文:

 
  Hey, this post is issued by Word 2007

Hello, world…

 
2006-11-17
  免费的午餐实在是太多了

看到消息说微软的Office Live去掉了Beta的字样,正式对美国用户开放。于是点过去看看,才发现原来Office Live和Office办公套件几乎没有关系,它居然是一个虚拟主机解决方案-_- 三种套餐,其中Basic版本免费,含一个免费的国际域名,500M网站空间,提供Web版本的站点编辑工具(挺强大的了,虽然页面不是很有特色),此外还有25个2G的Live Mail邮箱,对于一个小型企业或者个人来说,实在是不可多得的免费午餐。相比之下国内的那些虚拟主机服务...可以去一边凉快了。

PS. 中国用户其实也可以申请,前提是有一张可以国际支付的VISA或者MasterCard信用卡,当然,申请Basic版本信用卡只是用来防止恶意注册。注册程序主要依靠地名和邮编的对应关系以及电话号码的格式来验证您是否美国用户,有搜索引擎这个好东西,大家自然可以很容易解决这个问题 ;)

再一个有趣的免费午餐是这里。每天给一个商业软件的免费版本,只在24小时内下载安装激活有效,当然目前还都是些小软件(屏保),今天给出的是一个叫做CDuke的刻录软件,貌似挺强大的。这个免费午餐的有趣之处在于,只能知道前几天有什么吃,但是已经吃不到了,你永远也不会知道明天吃什么。所以最好还是订阅他们的RSS,以便第一时间知道有什么好吃的 :D

 
2006-11-08
  Second Life

据说是国外很火的一款网络游戏。

昨晚首次登录Second Life,来到了一个叫做"Orientation Island"的地方,四周是和我一样刚刚来到这个陌生世界的人,所有的人都在环顾四周,感觉有点像 The 4400 里面 4400 们一起出现时的场景。

四处走走感觉还不错,有的地方会有动听的音乐,有时会有Second Life世界的新闻,可以顺便练习下听力,而且居然可以飞起来,还可以在水面下行走 -_-||

在这个Orientation Island学习到一些基本的技能之后,就可以teleport到真正的Second Life世界中去开始生活,在这个虚拟世界里,你可以用自己的双手创造东西,吸引别人购买从而获得财富,就如同在现实社会中一样。你可以绘画,可以制作衣服,可以制作各种各样的新奇小游戏来吸引别人。而迫不及待地离开了Orientation Island的我...不慎在飞行途中掉到一个大大的院子里找不到出来的路,而且还飞不起来了... Orz

OK, 我终于也打过网游了 :-)

 
2006-10-29
  版权意识和病毒

室友F君有张新买不久的音乐CD,想借来听听,F君曰:某有该CD对应的mp3,网上下的,拷给你。于是翻出一个小巧别致的U盘,熟练地将若干首mp3拷贝粘贴了给我。U盘插入我机器的时候,防毒软件发出一声尖叫,有病毒!!幸好AOL提供的这个免费杀毒软件(OEM的卡巴斯基)更新还挺及时,据说这种病毒刚出来的时候诺顿和卡巴斯基都是不能杀的。病毒由AdobeR.exe, AdobeR.exe.log, autorun.inf, RavmonE.exe, msvcr71.dll这几个文件组成,通过移动存储介质传播。危害不算很大。不过这个故事足以告诉我们如下道理:

  1. 要有良好的版权保护意识,如果我借了CD来听而不是用U盘拷贝盗版的mp3,就不会有面临病毒的危险。不过听说有些iPod出厂的时候都会带上病毒(而且就是RavmonE病毒),也没准CD上会有病毒附送。
  2. 病毒作者很敬业,为了让Win95, Win98用户也能用上这种病毒,在打包的时候没有忘记附上一个好几百k的msvcr71.dll。
  3. 最近小心不要把自己的U盘插入F君的机器,也不要将F君的U盘插入自己的机器 :p

BTW: 问F君借CD的目的是从上面RIP出mp3来 :D

 
2006-10-25
  std::ifstream 和 std::fstream 的区别

今天的故事稍微偏向技术,并且冗长,适合对C++熟悉并且有兴趣的听众。

首先有一个很简单的C++程序,它判断在C盘根目录下的一个名为 test.txt 的文件是否能够打开,代码如下:

#include <fstream>
#include <iostream>

int _tmain(int argc, _TCHAR* argv[])
{
std::fstream fin("c:\\test.txt");
if (fin.fail())
std::cout << "Failed to open test.txt" << std::endl;
else
{
std::cout << "test.txt is ready" << std::endl;
fin.close();
}
return 0;
}

编译后得到可执行程序 just_a_file_open_test.exe, 我们将它和 test.txt 一起放在C盘的根目录下面。运行之,得到输出"test.txt is ready"。

然后我们写一个C#的 Console Application, 代码也很简单,主体如下:(汗,我居然没有找到一个简单一点的C#程序中调用第三方程序的方法,够菜的了)

System.Diagnostics.Process p = new System.Diagnostics.Process();
string cmd = "c:\\just_a_file_open_test.exe"
p.StartInfo.FileName = "cmd.exe"
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = false;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = false;
p.Start();
p.StandardInput.WriteLine(cmd);
p.StandardInput.WriteLine("exit");
p.WaitForExit();
p.Close();

这个程序也工作得很好,总是能够得到"test.txt is ready"的输出。

之后我们尝试在C#写就的Web Service中进行对 just_a_file_open_test.exe 的调用,WebMethod 如下:

public string test()
{
System.Diagnostics.Process p = new System.Diagnostics.Process();
string cmd = "c:\\just_a_file_open_test.exe"
p.StartInfo.FileName = "cmd.exe"
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.StandardInput.WriteLine(cmd);
p.StandardInput.WriteLine("exit");
string result = p.StandardOutput.ReadLine() + p.StandardOutput.ReadLine() + p.StandardOutput.ReadLine() + p.StandardOutput.ReadLine() + p.StandardOutput.ReadLine();
p.WaitForExit();
p.Close();
return result;
}

按F5进行调试,得到的输出是这样子的:(test.txt成功打开了)

<string>
Microsoft Windows XP [Version 5.1.2600](C) Copyright 1985-2001 Microsoft Corp.C:\Program Files\Microsoft Visual Studio 8\Common7\IDE>c:\just_a_file_open_test.exe test.txt is ready
</string>

到目前为止,一切都符合想象,最后我们很高兴地将这个不务正业的 Web Service 部署到 IIS6.0 中去。再测一次,得到了这样的输出:(失败了!!!)

<string>
Microsoft Windows XP [Version 5.1.2600](C) Copyright 1985-2001 Microsoft Corp.C:\WINDOWS\system32>c:\just_a_file_open_test.exe Failed to open test.txt
</string>

是 just_a_file_open_test.exe 出了问题吗,oh,不是的,也不是 test.txt 出了问题,我们用命令行运行 just_a_file_open_test.exe 仍然得到了预想的输出。那么究竟是怎么回事呢,答案是:我也不知道。我只知道把第一段程序中的 std::fstream fin("c:\\test.txt"); 替换成 std::ifstream fin("c:\\test.txt"); 问题就解决了,IIS中调用 just_a_file_open_test.exe 得到了预想的结果。

我很想知道,是什么造成了 std::fstream 和 std::ifstream 有这样的区别,STL和IIS后面隐藏了什么样的秘密?

Update: 秘密在于IIS在打开文件的时候会用ASPNET这个帐号(而访问数据库的时候, 如果用Windows Integrated Authencation方式,它又会去使用IUSR_MachineName这个帐号,挺神奇的),要std::fstream打开文件成功,必须让ASPNET帐号拥有对该文件的写权限。

 

姓名: Jie TONG
位置: 北京, 北京, CN
Links
My MSN Space
soopie
uupan

Archives
2005-11 / 2006-03 / 2006-04 / 2006-05 / 2006-06 / 2006-07 / 2006-08 / 2006-09 / 2006-10 / 2006-11 / 2007-01 / 2007-02 / 2007-03 / 2007-04 / 2007-06 /


Powered by Blogger