屋顶上的木帷幕

海鸥之所以追着渔船飞,是因为它们认为会有沙丁鱼抛向大海 - Eric Cantona, 1995
随笔 - 146, 评论 - 3169, 引用 - 56

导航

关于


标签

每月存档

最新留言

广告

【第1页/共2页,12条】
首页
前页
1

Treo 700w正式发布,兼谈为何Palm会输给Windows Mobile

Palm、Microsoft和Verizon在北京时间今天早上举行了联合新闻发布会,发布了新的Treo 700w手机,运营商是Verizon,操作系统是Windows Mobile 5.0。BillG代表Microsoft参加了新闻发布会,代表Palm的是Ed Colligan,不是Jeff Hawkins。

也就是短短两年多前的2003年6月,那时Palm收购了Handspring,Jeff Hawkins回到了他创建的Palm,人们纷纷将其与重回苹果的Steve Jobs相提并论。还记得Treo 600发布时候的轰动,在纽约的发布会上,Jeff Hawkins手里拿着Treo 600:

但自那以后,2004第一季度Pocket PC的出货量追平基于Palm OS的PDA,2004年底微软首次在手持设备市场上超越Palm占据最大份额,2005年初Sony宣布不再生产(基于Palm OS)的PDA,直到今天,Palm开始在自己的设备中使用微软的嵌入式操作系统,这在即便是一年前也是令人难以想象的。而曾几何时,Palm OS在九十年代末占据了超过50%的市场份额,拥有压倒性的优势。

微软已经可以把Palm从竞争对手名单中划掉了——正如以前Netscape、VisiCalc、WordPerfect一样——尽管这个名单不断的有新的加进来,例如Google、RIM。

Windows Mobile赢得对Palm的竞争是无可挑剔的,尽管Palm的用户始终嘲笑微软不懂的嵌入式系统,嘲笑微软用写PC操作系统的方式来写嵌入式的OS,嘲笑Pocket PC上的软件不如Palm多。没有人可以指责微软利用了垄断优势来排挤Palm:微软并没有在Windows XP里预装ActiveSync。尽管Palm的开发者和拥趸始终认为微软缺乏创新、缺乏技术、缺乏对市场的认识,但事实上,缺乏这些的是Palm——否则微软不可能赢得对Palm的竞争。终端用户市场里,用户是用脚投票的,掏不掏钱全在购买者;开发者社区中,程序员总是喜欢给更多的用户写软件,也总是喜欢在容易开发移植的平台上写软件;销售渠道中,零售商总是喜欢代理更好卖的产品,电信运营商也总是希望co-branding受欢迎的设备。

在移动和嵌入式领域,微软是一个后起的公司。后起的公司要取代已经取得成功的公司,一定要等到他们犯错误。李彦宏说Netscape犯了1.5个错误,那Palm呢?

我觉得Palm有点过于相信来自于早期成功的经验

九十年代末,手持设备还处于黑白显示、内存只有2MB或更少的状态。当时的Palm OS能够螺蛳壳里做道场,在有限的硬件上实现了丰富的功能。但很多Palm的开发者和支持者就此相信,手持设备就是应该是简单的,不应该把台式机上的事情拿到手持设备上来做。

Palmer认为微软在Pocket PC上采用和desktop windows类似的编程模型(消息机制、API、动态链接库、TCP/IP等)是荒谬的,他们嘲笑微软不懂handheld device。没错,在当时的硬件上,类似桌面系统的编程模型会造成很大的负担。但Palmer没有看到硬件的发展,事实上,时至今日,PDA的内存已经达到64MB或者128MB,CPU的时钟频率已经和Pentium II时代的台式机CPU一样块,与此同时,同样的编程模型带来的好处逐渐显现出来——VC和eVC,以及.NET和.NET CF——桌面的程序员可以很轻易的转移到Windows Mobile上。别说我事后诸葛亮,其实2003年的时候我在hi-pda和人为此争得面红耳赤说的就是同样的话。

对于程序员来说,开发Palm的应用程序相对困难——仍然需要用C语言来写。这和桌面上的快速开发潮流是不相称的。在桌面上,九十年代末就已经是Delphi和Visual Basic大行其道了,到了二十一世纪初,Java也进入桌面,然后就是.NET。程序员总是愿意用更方便的方法来写程序。喜欢炫耀自己“能够修改内核”的毕竟是少数。Palm曾经可以搭上Java的班车。Java的确也有了一个Palm上的VM(叫做Personal Java),我在我当时的Palm Vx上用过,速度出奇的慢。原因也很简单:CPU不行,内存太小。

Palmer过于相信过去的成功经验,他们坚信Palm的哲学是正确的:handheld device上的程序就应该是短小、简洁的。当时,在Palm OS 3.1上,一个程序如果超过100k就会被认为是丑陋的;而如果一个程序小于20kb,就会得到很好的评价。Palmer嘲笑Pocket PC上的程序的体积庞大,动辄500k或更大。但事实上,程序短小带来的好处被闪存的迅速降价完全抵消了。

Palmer在很长的一段时间里认为Pocket PC的彩色是没有必要的,gray scale的Palm足够了。但事实上,没有人能抵挡彩色的诱惑:无论是彩色电视机,还是彩屏手机。Palmer一度还对Palm的电池寿命非常自豪。没错,当时gray scale的Palm的电池寿命至少是在10小时以上的,而Pocket PC的电池通常只能维持两个小时(的确如此,我当时用iPAQ 3630的时候每天都需要充电)。但Palmer并没有很正确地意识到导致Pocket PC的电池寿命过短的主要原因之一是彩色和带背光的屏幕。事实上,当Palm的PDA也用上彩屏以后(例如我曾经用过Palm Tungsten T),电池寿命和Pocket PC相差无几,优势荡然无存。

Palm犯过的错误还包括错过了网络,错过了多媒体,错过了中国市场。受到硬件和编程模型的限制,Palm上始终开发不出类似Pocket PC上的“招商银行掌上银行”的应用。Palmer曾经固执的认为在handheld devices上是不需要上网的(当然,Palm长期的160*160 pixels的分辨率也是无法上网的原因之一)。曾经一度,对于Palm上的音乐播放软件来说,可以后台播放也会成为亮点——而对于Pocket PC来说,完全是与生俱来的。

Palm最终还是进入中国了,大概在2003年的样子,不算太晚,但没有把销售和市场做好,失去了最后的机会。Apple在中国也一直没有做好应该做的事情。人们喜欢iPod,但却不知道去哪里能买到。

--

The posts on this weblog are provided "AS IS" with no warranties, and confer no rights. The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

posted on 2005-09-27 13:15:00 by mvm  评论(34) 阅读(11327)

数字键盘的排列规律

我们的日常生活中会用到很多数字键盘:通常有四行三列共十二个键组成,其中十个键代表从0到9的十个数字,其余两个键根据不同设备使用情况的需要而定。

有趣的是,数字键盘的排列有两种截然不同的方式:一种是1-2-3在自上而下的第一行,7-8-9在第三行;另一种,7-8-9在第一行,1-2-3在第三行。

使用前一种排列的设备包括:

     
手机 固定电话 DVD/电视遥控器
     
门禁系统 施乐复印机

使用后一种排列的设备包括:

   
计算器 计算机

很难说这些设备是根据什么规律来选择使用哪种排列的。或许是依循某种潜在的惯例?如果一定要找一些规律,或许可以认为那些和“计算”有关的都使用7-8-9在上的排列;和“计算”比较无关的使用1-2-3在上的排列。

ATM取款机的数字键盘是一个特例,不同银行的ATM机上的排列是不一样的,有些是1-2-3在上,有些是7-8-9在上,例如:

   
上海银行的ATM机 深发展的ATM机

这种不一致造成一些不大不小的不便:我不得不注视着键盘一个一个数字辨认,不能习惯性的“盲打”,否则有时候就会按错密码。

posted on 2005-09-23 12:21:00 by mvm  评论(21) 阅读(7663)

A C++ expert can be expert of everything?

I have noticed for a long while that: people (either inside my company or across the whole software industry) think if a people is a C++ expert, it could be easy (and likely) for him to be an expert of other not-that-hard-to-be-expert-of things (such as, VB, SQL, Web, Script or even C#); however, people tend to believe (more or less) that an expert of those not-that-hard-to-be-expert-of things are less likely to be a C++ or Operation System expert.

I think such kind of viewpoint is popular, but not of truth.

//shrug

posted on 2005-09-22 22:35:00 by mvm  评论(20) 阅读(4171)

Partially Revert Linked List

Problem: partially revert a linked list

Given a HEAD pointer to a linked list and an OFFSET pointer pointing to a node in the linked list. You are asked to write a C/C++ subroutine to revert the part of the list from HEAD to OFFSET:

You are NOT allowed to use recursion. Please follow the definition of the type and function as shown below:

typedef struct _Node { int value; struct _Node* next; }Node; Node* Revert(Node* head, Node* offset) { //Your code here. Return the head of new linked list. }

[The End]

posted on 2005-09-15 12:08:00 by mvm  评论(0) 阅读(3455)

SQL Problem

Problem: delete the post and the whole sub tree. (20 minutes)

Condition:

Supposing we have a web forum system, in which there are numbers of topics. Every topic has one and only one root post. Every post (either root post or intermediate post) has numbers of children posts, unless it's a leaf post. In short, you could regard a forum as a forest: A topic is a tree; a post is a tree node.

Posts are stored in the tbl_Posts table in SQL Server 2000. Definition of tbl_Posts is:

CREATE TABLE [dbo].[tbl_Posts] ( [PostID] [int] NOT NULL , [ParentID] [int] NOT NULL , [TopicID] [int] NOT NULL , [Subject] [nvarchar] (50) NOT NULL , [Body] [nvarchar] (1000) NOT NULL ) ALTER TABLE [dbo].[tbl_Posts] WITH NOCHECK ADD CONSTRAINT [PK_tbl_Posts] PRIMARY KEY CLUSTERED ( [PostID] ) CREATE INDEX [IX_tbl_Posts] ON [dbo].[tbl_Posts]([ParentID]) ALTER TABLE [dbo].[tbl_Posts] ADD CONSTRAINT [FK_tbl_Posts_tbl_Posts_1] FOREIGN KEY ( [TopicID] ) REFERENCES [dbo].[tbl_Posts] ( [PostID] ), CONSTRAINT [FK_tbl_Posts_tbl_Posts_2] FOREIGN KEY ( [ParentID] ) REFERENCES [dbo].[tbl_Posts] ( [PostID] )

Posts are sorted by PostID in the table. PostID is unique. All the posts in the same topic have the same TopicID, which equal to the root post's PostID. Root post's ParentID is equal to it's PostID. There is no limitation to depth of post tree.

The date in tbl_Posts might be:

PostID ParentID TopicID
1 1 1
2 1 1
3 3 3
4 1 1
5 1 1
6 6 6
7 4 1
8 4 1
9 1 1
10 3 3
11 4 1
12 3 3
13 12 3
14 6 6
15 6 6
16 9 1
17 8 1

Question:
Please write a SQL stored procedure "DeletePost", which takes a PostID as input parameter and can delete all the posts (include itself) under the post PostID. Note: using temp table, table variable or any recursive algorithm won't score. Cursor is not encouraged.

For example, "exec DeletePost 4" will change the forum as:


[The End]

posted on 2005-09-15 12:00:00 by mvm  评论(0) 阅读(3692)

MSN is hiring developers in Shanghai

Position: Software Design Engineer (Full-Time Employee)

Location: Shanghai

Job Description:

Do you want to work in a startup environment in a fast growing country? Are you adventurous and driven? Are you looking for a high impact project?

Microsoft MSN Technologies, China is building a diverse, world-class engineering team (in Shanghai) responsible for building large scale ecommerce services for MSN and Microsoft. In addition, we will be placing strategic engineering investments to support the dynamic China market.

We are looking for high potential Software Design Engineer that can help the development effort of building a High Quality and Trustworthy large scale ecommerce services.  You will be an integral part of this business focused; global engineering team with the responsibilities to build a system that can easily enable local strategic partners, deals, and payment methods in the Asia market to facilitate a Digital Commerce Ecosystem, and to participate and contribute to global Engineering Excellence practices and initiatives. Your work in this area will have a direct and visible impact on our bottom line and help grow the business focused, global engineering capabilities in China.

If you are passionate about building software system that are highly scalable, and reliable with the latest technologies in delivering secure and robust online services.  If you are passionate about help growing the engineering capabilities in China.  If you are creative, execution-focused, disciplined and a team player with strong communication skill, apply NOW.

Qualifications:

  1. 1+ year experience in software development with very good understanding of database design principles, building software as service, and in depth knowledge of C/C++/C#, ASP.NET, or T-SQL.
  2. Team player, highly driven and result oriented.  Must be fluent in English
  3. Proficient in software engineering life cycle and shipped quality products is a plus
  4. Understanding high scale/trust environment needs is preferred.
  5. A BA/BS degree in Computer Science or a related technical field is required.
  6. Financial industry or accounting background is a strong plus.

--

The job posting above could also found here. Applicant please send your resume to ericzhe[at]microsoft.com.

posted on 2005-09-15 10:27:00 by mvm  评论(17) 阅读(5866)

【第1页/共2页,12条】
首页
前页
1

Powered by: Joycode.MVC引擎 0.5.2.0