<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>atppp&#039;s Blog &#187; microsoft</title>
	<atom:link href="http://blog.wuxinan.net/archives/tag/microsoft/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.wuxinan.net</link>
	<description></description>
	<lastBuildDate>Tue, 08 Dec 2009 08:20:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Live.com</title>
		<link>http://blog.wuxinan.net/archives/473</link>
		<comments>http://blog.wuxinan.net/archives/473#comments</comments>
		<pubDate>Fri, 19 Dec 2008 19:29:18 +0000</pubDate>
		<dc:creator>atppp</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[bbs]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[kxn]]></category>
		<category><![CDATA[live]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[msn]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://blog.wuxinan.net/?p=473</guid>
		<description><![CDATA[曾几何时，bbs 文章里加了附件就去不掉了，只能把文章删掉。实际上，系统管理员还是看得到删掉的文章的，所以一般推荐的毁尸灭迹的方法是（假设这个论坛系统是由心理健康的团队制作的），删除附件（如果可能）、删除文字、最后再删除文章，这样基本可以保证只有闲得蛋疼且拥有服务器直接操作权限的家伙才有可能恢复那个帖子。KBS 系统里面，后来是 etnlegend 写了增删附件的核心和 term 部分的界面（我只是顺手写了个 web 部分的接口），bbs 才慢慢滑入了 21 世纪的轨道，美女 show 完照片可以及时删掉以防 wsn 骚扰。 就在最土鳖的 bbs 也慢慢披上了 Web 2.0 的衣裳的时候，Live.com 却悄悄的把它们的时钟拨回了 20 世纪。在 Live space 里面删除了的博客文章，仍旧会显示在它自己的 what&#8217;s new 里面（包括内容提要，但是可以手动删掉）。好吧，我承认，在如此“庞大”的一个系统里面，要保证 consistency 确实不是一件太简单的事情；但是删掉的博客文章不再让别的用户看到，却理应是最基本的隐私规则，对于 Live 这个 bug 我能说什么呢？要么，是 PM prioritize tasks 策略有问题；要么，是 engineer 缺乏 common sense；要么，这难道是一个 feature？？ Live.com 最近一次改版，不但 bug 层出不穷，还搞得很八卦。现在 MSN 昵称变化都有记录了。康神是一个好人，每次上 WC 都要改一下昵称以免误事。结果我等教众只要去康神的 profile [...]]]></description>
			<content:encoded><![CDATA[<p>曾几何时，bbs 文章里加了附件就去不掉了，只能把文章删掉。实际上，系统管理员还是看得到删掉的文章的，所以一般推荐的毁尸灭迹的方法是（假设这个论坛系统是由心理健康的团队制作的），删除附件（如果可能）、删除文字、最后再删除文章，这样基本可以保证只有闲得蛋疼且拥有服务器直接操作权限的家伙才有可能恢复那个帖子。<a href="http://dev.kcn.cn/">KBS</a> 系统里面，后来是 etnlegend 写了增删附件的核心和 term 部分的界面（我只是顺手写了个 web 部分的接口），bbs 才慢慢滑入了 21 世纪的轨道，美女 show 完照片可以及时删掉以防 wsn 骚扰。</p>
<p>就在最土鳖的 bbs 也慢慢披上了 Web 2.0 的衣裳的时候，Live.com 却悄悄的把它们的时钟拨回了 20 世纪。在 Live space 里面删除了的博客文章，仍旧会显示在它自己的 what&#8217;s new 里面（包括内容提要，但是可以手动删掉）。好吧，我承认，在如此“庞大”的一个系统里面，要保证 consistency 确实不是一件太简单的事情；但是删掉的博客文章不再让别的用户看到，却理应是最基本的隐私规则，对于 Live 这个 bug 我能说什么呢？要么，是 PM prioritize tasks 策略有问题；要么，是 engineer 缺乏 common sense；要么，这难道是一个 feature？？</p>
<p>Live.com 最近一次改版，不但 bug 层出不穷，还搞得很八卦。现在 MSN 昵称变化都有记录了。康神是一个好人，每次上 WC 都要改一下昵称以免误事。结果我等教众只要去康神的 profile 看，就可以知道康神如厕时间表……善哉善哉。Live.com 你向人家 SNS 取经，也要动动脑子，不要什么东西都拿来随便一抄，搞得人不像人鬼不像鬼。再比如说，页面上方大大的一个“People you might know”，我琢磨着 Live.com 的六度理论练得是不是纯熟，顺手点进去一看，蹦出一提示“We don&#8217;t have any suggestions for you now.”，你这不耍我么？没货早说啊！</p>
<p>还不止这点破事儿。<a href="http://b2.broom9.com/?page_id=519">Live space mover</a> 的作者 <a href="http://www.weiwei9.com/">broom</a> <a title="Stupid Live Space!!!" href="http://b2.broom9.com/?p=1100">怒道</a>：</p>
<blockquote><p><strong>Stupid Live Space!!!</strong></p>
<p>我就不明白了，评论的时间只显示月日不显示时分秒是啥意思……</p>
<p>而月份的表示，七月份是四个字母“July”，十一月就变成了三个字母的缩写加一个点儿“Nov.”，发指的是九月份居然是四个字母加一个点——“Sept.”…… 这真是癞蛤蟆跳脚背——不咬人恶心人……</p>
<p>管Live Space的同学你们有那么闲吗？？有吗？？？！</p></blockquote>
<p>broom 说，这一次的升级已经把他击溃了。还有，Photo permalink 换了，导致 rss reader 里面像洪水一样刷出几十屏的老照片。Alpha 对此评论说：“Live space 隔个一年半载就来这么一遭”，看来大家对这个问题也见多不怪了。我以前还提到过另一个<a href="http://blog.wuxinan.net/archives/237">问题</a>：</p>
<blockquote><p>……微软的 Live Spaces 里面的 Blog Entry 发布时间默认是不显示年份的，有时候搜索到一篇文章却死活找不到哪年发表的，告诉我几月几号有个屁用啊……那帮写程序的家伙也许从来没想到过 Live Spaces 能活过一年，所以“前瞻”到年份信息是没有意义的……</p></blockquote>
<p>博客说到底不就是一个内容发布和留言板系统吗，如果放学校里做顶多算个 network 101 的小作业，final project 都算不上。Live.com 却整得巨复杂，还特慢，稍微差点的机器开个 Live space 就跟死机了似的。随便抓个开源的框架都比 Live 的轻量、简洁、漂亮、全能。Live.com 的 infrastructure 听说也是相当牛逼的，怎么前端会搞成这么个样子呢？</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.wuxinan.net/archives/473/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>批评一下 PHP</title>
		<link>http://blog.wuxinan.net/archives/335</link>
		<comments>http://blog.wuxinan.net/archives/335#comments</comments>
		<pubDate>Mon, 24 Mar 2008 05:43:06 +0000</pubDate>
		<dc:creator>atppp</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://blog.wuxinan.net/archives/335</guid>
		<description><![CDATA[PHP 里函数多如牛毛，加进去又没什么统一规划，搞得现在成了命名法大杂烩，比如： obj_verb 型的：array_slice() http_inflate() verb_obj 型的：create_function() parse_str() verbobj 不加下划线：setcookie() addslashes() 直接把 POSIX 传统函数拿来用的：opendir() fopen() 这种算什么呢：error_reporting() htmlspecialchars() 特别是这个 htmlspecialchars 命名毫无章法 新老 DOM 类函数不一样：一个叫 getAttribute()，另一个叫 get_attribute() 你可能会说，那同类函数可能命名法就一致了吧？也不全是，日历函数： verb_obj：cal_days_in_month() 大写首字母不加下划线：JDDayOfWeek() 突然又全小写了：jdtounix() （其实 PHP 函数名不分大小写，最后这俩只是文档故意添乱） 晕死。有人说，你真弱，用多了就全熟了。好吧，我是比较弱，可是我知道有人在知名大公司天天写 PHP 还是和我一样晕……PHP 函数命名为什么这么乱？给俩链接： 20 possible reasons why PHP function names and parameters are weird Do You PHP? 里第二部分：The Ugly Duckling of Programming [...]]]></description>
			<content:encoded><![CDATA[<p>PHP 里函数多如牛毛，加进去又没什么统一规划，搞得现在成了命名法大杂烩，比如：</p>
<ul>
<li>obj_verb 型的：array_slice() http_inflate()</li>
<li>verb_obj 型的：create_function() parse_str()</li>
<li>verbobj 不加下划线：setcookie() addslashes()</li>
<li>直接把 POSIX 传统函数拿来用的：opendir() fopen()</li>
<li>这种算什么呢：error_reporting() htmlspecialchars() 特别是这个 htmlspecialchars 命名毫无章法</li>
<li>新老 DOM 类函数不一样：一个叫 getAttribute()，另一个叫 get_attribute()</li>
<li>你可能会说，那同类函数可能命名法就一致了吧？也不全是，日历函数：
<ul>
<li>verb_obj：cal_days_in_month()</li>
<li>大写首字母不加下划线：JDDayOfWeek()</li>
<li>突然又全小写了：jdtounix()</li>
</ul>
</li>
</ul>
<p>（其实 PHP 函数名不分大小写，最后这俩只是文档故意添乱） 晕死。有人说，你真弱，用多了就全熟了。好吧，我是比较弱，可是我知道有人在知名大公司天天写 PHP 还是和我一样晕……PHP 函数命名为什么这么乱？给俩链接：</p>
<ul>
<li><a href="http://blog.roshambo.org/archives/20-possible-reasons-why-PHP-function-names-and-parameters-are-weird.html">20 possible reasons why PHP function names and parameters are weird</a></li>
<li><a href="http://www.oracle.com/technology/pub/articles/php_experts/rasmus_php.html">Do You PHP?</a> 里第二部分：The Ugly Duckling of Programming Languages</li>
</ul>
<p>换个话题，最近 PHP 的 substr 函数被人改坏了。</p>
<p>There was a small inconsistency between PHP 5.2.1 and 5.2.2. In PHP 5.2.1, <code>substr($str, $start)</code> returns the full <code>$str</code> if<code> (</code><code>$start &lt; 0 &amp;&amp; abs($start) &gt; strlen($str))</code>. But starting from PHP 5.2.2, FALSE would be returned. Before 5.2.2, this behavior was conveniently used to extract at most N last characters of a string, e.g. <code>$str = substr($str, 30);</code> limits <code>$str</code> to at most 30 characters and truncate from the beginning if necessary. However, this no longer works! See also: <a href="http://cvs.php.net/viewvc.cgi/php-src/ext/standard/string.c?r1=1.445.2.14.2.54&amp;r2=1.445.2.14.2.38&amp;pathrev=PHP_5_2">diff-5.2.1-5.2.2</a>, <a href="http://bugs.php.net/bug.php?id=41375">bug 41375</a>. This is likely to change back in PHP 5.3, given what&#8217;s recently been done on <a href="http://cvs.php.net/viewvc.cgi/php-src/ext/standard/string.c?r1=1.445.2.14.2.69.2.16&amp;r2=1.445.2.14.2.69.2.17">PHP_5_3 branch</a>.</p>
<p><a href="http://us.php.net/manual/en/function.substr.php#75999">PHP Doc </a>有正方呼吁：This is a small inconsistency, one of those things that makes the life of a PHP programmer like hell.  <a href="http://bugs.php.net/bug.php?id=41375">Bugzilla</a> 上反方辩护：The fact that it worked up until 5.2.1 doesn&#8217;t mean that you should have used it. 这个问题其实最开始只是因为别的原因无意间改错的，但是 PHP 内部却有人坚持错误，有人报告这个问题也被归类为 <a href="http://bugs.php.net/bug.php?id=41375">Bogus</a>（意思就是说，RTFM，回家好好读文档去）。其实文档也不明确，现在基于各种原因，PHP 5.3 分支上又改回去了，真是搬起石头砸自己的脚。</p>
<p>说个微软搬石头砸自己脚的故事。IE 最开始搞出 {client,offset,scroll}{Top,Width,Height,Left} 十二个很有意义的 HTML 属性用来方便的设置/获取对象大小/位置等信息，实在是一个很好很强大的发明，基本也铁定进 HTML5 了。不过 IE 里面的制造标准不明确，各类元素定义略有不同，反倒别的浏览器抄得更和谐。搞到现在的局面是，微软自己发明的东西，反倒被 <a href="http://www.quirksmode.org/dom/w3c_cssom.html">QuirksMode</a> 说成 IE 里 incorrect/buggy，不如别的浏览器“正确”，真是衰啊。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.wuxinan.net/archives/335/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>IE7 是邪恶的</title>
		<link>http://blog.wuxinan.net/archives/308</link>
		<comments>http://blog.wuxinan.net/archives/308#comments</comments>
		<pubDate>Mon, 25 Feb 2008 07:09:21 +0000</pubDate>
		<dc:creator>atppp</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://blog.wuxinan.net/archives/308</guid>
		<description><![CDATA[曾经有好几个美国人跟我抱怨，IE7 怎么没有刷新按钮了。 上网一搜，没发现 IE7 刷新按钮的比比皆是。有个哥们抱怨说：I can’t believe I googled on this. 我长期不用 IE，今天打开来居然也没找到刷新按钮，情急之下只好按了 F5…… 其实，IE7 里面的刷新按钮被移到了地址栏右边，不再和后退、前进按钮在一起了。 十多年来我们早已熟悉的“后退、前进、刷新”的按钮序列居然被微软这帮猪头给推翻了。 这真是一个反人类的浏览器。 （小猪取自辛普森家庭电影网站）]]></description>
			<content:encoded><![CDATA[<p>曾经有好几个美国人跟我抱怨，IE7 怎么没有刷新按钮了。</p>
<p>上网一搜，没发现 IE7 刷新按钮的比比皆是。有个哥们<a href="http://pure-essence.net/2007/12/18/where-is-ie7-refresh-button/">抱怨</a>说：I can’t believe I googled on this.</p>
<p>我长期不用 IE，今天打开来居然也没找到刷新按钮，情急之下只好按了 F5……</p>
<p>其实，IE7 里面的刷新按钮被移到了地址栏右边，不再和后退、前进按钮在一起了。</p>
<p>十多年来我们早已熟悉的“后退、前进、刷新”的按钮序列居然被微软这帮猪头给推翻了。</p>
<p>这真是一个反人类的浏览器。</p>
<p><img src="http://blog.wuxinan.net/wp-content/uploads/2008/02/ie7.png" alt="ie7.png" /></p>
<p>（小猪取自辛普森家庭电影网站）</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.wuxinan.net/archives/308/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>断词换行大战</title>
		<link>http://blog.wuxinan.net/archives/265</link>
		<comments>http://blog.wuxinan.net/archives/265#comments</comments>
		<pubDate>Tue, 22 Jan 2008 23:57:52 +0000</pubDate>
		<dc:creator>atppp</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[netscape]]></category>
		<category><![CDATA[w3c]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://blog.wuxinan.net/archives/265</guid>
		<description><![CDATA[人物介绍： 王强：网景（Netscape）公司老雇员，后成为 Mozilla 基金会骨干，主管外联； 艾利：互联网世界警察 W3C 高层，负责协调 CSS3 进度； 炮尔：微软（Microsoft）资深工程师，参与编写 CSS3 文字模块标准； 盖兹：微软创始人之一，人称盖老板。 【第一幕】2001 年 5 月，艾利给炮尔打电话。 艾利：老炮啊，我，艾大妈。 炮尔：哎呦妈呀，好久不见嘞呀，你最近忙啥呢？ 艾利：我还那样，我跟你说啊，我今天没空跟你扯。明天我们这儿有个会，要开始搞 CSS3 文字模块了，你来不来插一腿？ 炮尔：啥？你们 CSS2 都没搞利落呢怎么就上 CSS3 了？我告诉你啊，上次你欠的债还没还呢，你让 Mozilla 把我们微软的 word-wrap 和 word-break 给实现了不就齐活了？还搞啥屁标准啊！ 艾利：Mozilla 他们不干啊，他们非要个标准。我说，我私下早就说好让你们写标准了，你到底来不来？ 炮尔：标准？啥标准？我们微软就是标准！你去外头看看多少人用我们的浏览器！ 艾利：嘘，你们和网景打官司呢，别大声嚷嚷，小心 Mozilla 也告你！ 炮尔：好好好，老大我服。明儿个几点开会？我今晚就飞过去。 【第二幕】第二天，W3C 会议室。 王强：炮工您好您好，很高兴见到您。听说你们 IE6 快发布了，恭喜恭喜啊！ 炮尔：哪里哪里！不过我们是真的觉得这个版本很好很强大啊！ 王强：听说一大批银行网站在 BETA 版上运行都有问题？嘿嘿，嘿嘿！ 炮尔：这个……这个…… （艾利姗姗来迟，进入会议室） 艾利：欢迎来到 W3C，谢谢大家光临。我们 W3C 是世界上最大的互联网组织，技术实力雄厚…… [...]]]></description>
			<content:encoded><![CDATA[<p>人物介绍：</p>
<ul>
<li>王强：网景（Netscape）公司老雇员，后成为 Mozilla 基金会骨干，主管外联；</li>
<li>艾利：互联网世界警察 W3C 高层，负责协调 CSS3 进度；</li>
<li>炮尔：微软（Microsoft）资深工程师，参与编写 CSS3 文字模块标准；</li>
<li>盖兹：微软创始人之一，人称盖老板。</li>
</ul>
<p>【第一幕】2001 年 5 月，艾利给炮尔打电话。</p>
<p>艾利：老炮啊，我，艾大妈。</p>
<p>炮尔：哎呦妈呀，好久不见嘞呀，你最近忙啥呢？</p>
<p>艾利：我还那样，我跟你说啊，我今天没空跟你扯。明天我们这儿有个会，要开始搞 CSS3 文字模块了，你来不来插一腿？</p>
<p>炮尔：啥？你们 CSS2 都没搞利落呢怎么就上 CSS3 了？我告诉你啊，上次你欠的债还没还呢，你让 Mozilla 把我们微软的 word-wrap 和 word-break 给实现了不就齐活了？还搞啥屁标准啊！</p>
<p>艾利：Mozilla 他们不干啊，他们非要个标准。我说，我私下早就说好让你们写标准了，你到底来不来？</p>
<p>炮尔：标准？啥标准？我们微软就是标准！你去外头看看多少人用我们的浏览器！</p>
<p>艾利：嘘，你们和网景打官司呢，别大声嚷嚷，小心 Mozilla 也告你！</p>
<p>炮尔：好好好，老大我服。明儿个几点开会？我今晚就飞过去。</p>
<p>【第二幕】第二天，W3C 会议室。</p>
<p>王强：炮工您好您好，很高兴见到您。听说你们 IE6 快发布了，恭喜恭喜啊！</p>
<p>炮尔：哪里哪里！不过我们是真的觉得这个版本很好很强大啊！</p>
<p>王强：听说一大批银行网站在 BETA 版上运行都有问题？嘿嘿，嘿嘿！</p>
<p>炮尔：这个……这个……</p>
<p>（艾利姗姗来迟，进入会议室）</p>
<p>艾利：欢迎来到 W3C，谢谢大家光临。我们 W3C 是世界上最大的互联网组织，技术实力雄厚……</p>
<p>炮尔：（打断）喂，你别打官腔行不行，我一会儿还要去看脱衣舞呢，难得老婆管不着我。</p>
<p>艾利：好那我们就直接进入正题，今天我们要协调开始 CSS3 文字模块的工作，最好下个星期就能发布一个草稿。</p>
<p>炮尔：大家都知道，微软早在 IE 5.5 就实现了伟大的 word-wrap 和 word-break 属性，大家只要照搬微软的文档，标准就出来了。我给大家举个例子，加了这个属性的 div，哪怕碰到再长的文字也不会把 div 撑破，比如：</p>
<p><img src="http://blog.wuxinan.net/wp-content/uploads/2008/01/ms.png" alt="ms.png" /></p>
<p>王强：首先，我赞赏微软在这方面先驱的工作，但是我并不觉得我们可以把微软这两个东西拿来直接作标准，比如同样属性的 div，可能会有这样的景象：</p>
<p><img src="http://blog.wuxinan.net/wp-content/uploads/2008/01/mz.png" alt="mz.png" /></p>
<p>王强：apart 一词被硬生生拆成了两行，这是不容许的。我觉得在这个断词换行领域，我们还有很长的路要走。</p>
<p>会议不欢而散，过了一个星期炮尔勉强拷贝了一下微软的文档发布了第一个 CSS3 文字模块草稿。</p>
<p>【第三幕】 一年后，2002 年 5 月，炮尔给王强打电话。</p>
<p>炮尔：小王啊，我去年请你看了脱衣舞秀，你怎么也不还个人情啊。这不 CSS3 文字模块二稿都快出了，你们 Mozilla 浏览器怎么在断词换行功能上连个动静都没有啊。</p>
<p>王强：这玩意儿不好搞啊。就上个月，我们才找中国佬谈过，各类标点符号能不能放行首行末的规则就快把我搞晕了。</p>
<p>炮尔：这个好办，我直接把我们的代码送给你们吧。我说，你还是给你们开发组施加一点压力，我这 CSS3 草稿发布出来就我们微软一个浏览器支持，我们律师怕人家告我们垄断那。</p>
<p>王强：还不光那一个操蛋的标点问题呢，这不我刚又收到一封中国佬的信，说他们新出了个规定，“毛主席”三个字中间也不能换行……</p>
<p>炮尔：我操，这都文革时候的事儿了，他们忽悠你呢。</p>
<p>王强：不光中文，别的语言也有问题。就说英语好了，一个词在什么地方断行，就是一个很技术的问题。比如 fucking，我是断成 fu-cking 呢，还是 fuck-ing，这很有讲究啊。</p>
<p>炮尔：你他妈骂我干嘛？</p>
<p>王强：我没骂您，我就是举个例子。再比方说了，德语 ss 中间不能断，阿拉伯语……</p>
<p>炮尔：行了，你们就不能随便先起个头，你们社区这么多免费劳动力，你起个头，大家自然就能贡献了。</p>
<p>王强：不瞒您说，这个断词换行我们开会认为是核心引擎功能，只能我们自己干。既然是核心，就不能随便乱搞，要搞就要搞个能用的。您看，光英文断词我们就得输进去整一个大英词典，工作量很大啊。</p>
<p>炮尔：好好，我理解。那你觉得啥时候能搞出来？</p>
<p>王强：今年吧，我们人都招好了，就等着写代码了。</p>
<p>【第四幕】镜头快速切换好几年的时光。</p>
<p>2003 年，Mozilla 基金会成立。断词换行功能毫无经济利益，被无限期搁置。</p>
<p>2004 到 2005 年，新版本 Firefox 连续发布，开发以短平快为宗旨，断词换行功能的呼声在 Bugzilla 上堆积如山，但 Mozilla 基金会视而不见。</p>
<p>2006 年，IE 7 开发组送给 Mozilla 一个蛋糕，祝贺 Firefox 2 发布。王强吃了一块蛋糕，感觉里面有异物，从嘴里拉出一张纸条：“你们他妈的怎么还不搞断词换行？”。</p>
<p>【第五幕】2008 年 1 月，盖兹在办公室找炮尔谈话。</p>
<p>盖兹：老炮啊，你看啊，我再过几个月就退休了，我这辈子就俩愿望，一个是把我发家的 BASIC 语言搞大，VB 搞得很成功，我很开心；还有一个我希望我们强大的 IE8 能成为 W3C 标准，你看，这只剩下没几个月了，你知道我退休前就这么一个心愿……</p>
<p>炮尔：盖老板，我很努力了，可是 W3C 一直不出 CSS3 标准，我也没办法啊。</p>
<p>盖兹：今年过年不是刚给他们送了一箱蚁力神吗？他们怎么不买帐。</p>
<p>炮尔：盖老板您有所不知啊，蚁力神出事儿了；而且 Mozilla 基金会刚给 W3C 送了一箱脑白金，恐怕 Firefox 还没钱开发断词换行功能，不让 CSS3 发布呢。</p>
<p>盖兹：好吧我知道了，你先出去吧。</p>
<p>盖兹给艾利打电话。</p>
<p>盖兹：艾大妈啊，我盖兹。</p>
<p>艾利：哎呦，您老还健在？</p>
<p>盖兹：我好得很，我问你啊，CSS3 咋还不发布呢，老子都快退休了。</p>
<p>艾利：这可不怪我啊，您给 Mozilla 基金会打个电话问问吧。对了啊，HTML 5 出草稿了，你们来不来插一腿？</p>
<p>盖兹：得，我不敢了，先这样吧，我还忙呢。</p>
<p>盖兹狠狠的拨了 Mozilla 基金会的号码。</p>
<p>“您好，这里是 Mozilla 基金会，捐钱请按 1，送钱请按 2，给钱请按 3，……和活人说话请按 0。”</p>
<p>盖兹按了 0，正好是王强接的。</p>
<p>“您好，这里是 Mozilla 基金会，我是王强，May I help you？”一口地道的伦敦腔。</p>
<p>“喂，我是盖老板，你大爷的你们到底什么时候搞他妈的断词换行？”</p>
<p>嘟……嘟……嘟……嘟……嘟……嘟……</p>
<p>（情节纯属虚构，如有雷同，实属巧合。）</p>
<p>路人甲：可是好像真事儿就是这样。</p>
<p>路人乙：笨！这叫艺术源于生活！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.wuxinan.net/archives/265/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>微软的文档……</title>
		<link>http://blog.wuxinan.net/archives/210</link>
		<comments>http://blog.wuxinan.net/archives/210#comments</comments>
		<pubDate>Tue, 11 Dec 2007 09:04:17 +0000</pubDate>
		<dc:creator>atppp</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://blog.wuxinan.net/archives/210</guid>
		<description><![CDATA[同样是字符串里找子串的函数，微软 VB 的文档： Returns an integer specifying the start position of the first occurrence of one string within another. Public Shared Function InStr(_ ByVal String1 As String, _ ByVal String2 As String, _ Optional ByVal Compare As CompareMethod _ ) As Integer Parameters String1 Required. String expression being searched. String2 Required. String expression sought. 读完了一头雾水，TMD [...]]]></description>
			<content:encoded><![CDATA[<p>同样是字符串里找子串的函数，微软 <a href="http://msdn2.microsoft.com/en-us/library/8460tsh1(VS.90).aspx">VB</a> 的文档：</p>
<blockquote><p> Returns an integer specifying the start position of the first occurrence of one string within another.</p>
<pre>Public Shared Function InStr(_
    ByVal String1 As String, _
    ByVal String2 As String, _
    Optional ByVal Compare As CompareMethod _
) As Integer</pre>
<p><strong>Parameters</strong></p>
<p><em>String1</em><br />
Required. <strong>String</strong> expression being searched.</p>
<p><em>String2</em><br />
Required. <strong>String</strong> expression sought.</p></blockquote>
<p>读完了一头雾水，TMD 到底哪个参数是要找的子串？？being searched？sought？？我英语不好也不要这么欺负我啊。再看微软 <a href="http://msdn2.microsoft.com/en-us/library/z9da80kz(VS.90).aspx">VC++</a> 类似函数的文档：</p>
<blockquote><p>Return a pointer to the first occurrence of a search string in a string.</p>
<pre>char *strstr(
   const char *str,
   const char *strSearch
); // C only</pre>
<p><strong>Parameters</strong></p>
<p><em>str</em><br />
Null-terminated string to search.</p>
<p><em>strSearch</em><br />
Null-terminated string to search for.</p>
<p><strong>Return Value</strong><br />
Returns a pointer to the first occurrence of <em>strSearch</em> in <em>str</em> &#8230;</p></blockquote>
<p>VC++ 里解释比 VB 的稍好一些，但是还是不清不楚的，功能说明为啥不写清楚哪个 string 是哪个呢？变量名为什么要写得这么诡异呢？参数说明里一个是 search，一个是 search for，TMD 又欺负我英语差！像这种常用函数，一般人都知道大概怎么用，只是偶尔不确定看一下参数顺序，你这么个文档还得让人费脑细胞琢磨，要你何用！再看 <a href="http://www.php.net/manual/en/function.strpos.php">PHP</a> 里类似的函数：</p>
<blockquote>
<pre>int <strong>strpos</strong> ( string $haystack, mixed $needle [, int $offset ] )</pre>
<p>Returns the numeric position of the first occurrence of <em>needle</em> in the <em>haystack</em> string.</p></blockquote>
<p>PHP 这个文档光看参数名就足以明白参数顺序了，看了功能解释就更清楚了。MacOS 的 man page：</p>
<blockquote>
<pre>char *<strong>strstr</strong>(const char *big, const char *little);</pre>
<p>The <strong>strstr</strong>() function locates the first occurrence of the null-terminated string <em>little</em> in the null-terminated string <em>big</em>.</p></blockquote>
<p>有一百种方法可以把这个函数的参数顺序写的很明确，但是微软偏偏选择了不明朗的写法。想起一般微软的程序很少有人去看 HELP 解决问题，而 MacOS 和 *nix 下面看文档则是家常便饭，看来微软文档无用论还是很有道理的……</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.wuxinan.net/archives/210/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

