存档

作者存档

呓语

2011年10月10日 Huang Donghai 没有评论

我们升斗小民,微不足道,如路边的蚂蚁,粪缸里的蛆虫,不过是苟且图存,既无行善的能力,也无作恶的力量,说话不过像是疯子的呓语,是无人肯听的,传播几米就会消散在风中,所谓群众的呼声,不过是被呼声而已。生存着不过是被人践踏,被人口红利,吸着本已不多的血,无声无息并不会有老爷大人注目; 死也如风吹残叶,旋几下落在地上,不几天就化为了尘土,悲伤的不过是几个亲友,生命就弥散在了无边无际无来无去的宇宙中。

分类: 五味杂陈 标签:

王度庐《宝剑金钗》序

2011年1月17日 Huang Donghai 没有评论

昔人不愿得千金,惟愿得季布一诺,侠者感人之力可谓大矣。春秋战国秦汉之际,一时豪俊,如重交之管鲍,仗义之杵臼程婴,好客之四公子,纾人急难之郭解朱家,莫不烈烈有侠士风范,为世人之所倾慕。迨于后世,古道渐衰,人情险诈,奸猾并起,才智之士又争赴仕途,遂使一脉侠风荡然寡存,惟于江湖闾里之间,有时尚可求到,然亦微矣!余谓任侠为中国旧有之精神,正如日本之武士道,欧洲中世纪之骑士。倘能拾摭旧闻,不涉神怪,不诲盗淫,著成一书,虽未必便挽颓风,然寒窗苦寂,持卷快谈,亦足以浮一大白也。频年饥驱远游,秦楚燕赵之间,跋涉殆遍,屡经坎坷,备尝世味,益感人间侠士之不可无。兼以情场爱迹,所见亦多,大 都财色相欺,优柔自误。因是,又拟以任侠与爱情相并言之,庶使英雄肝胆亦有旖旎之思,儿女痴情不尽娇柔之态,此《宝剑金钗》之所由作也。

分类: 五味杂陈 标签:

Macbook Air外接显示器开启ClearType

2010年12月21日 Huang Donghai 没有评论

发现Macbook Air外接显示器的时候,默认是没有开启ClearType的,字体发虚的很厉害。

解决方法是在终端底下输入:

defaults -currentHost write -globalDomain AppleFontSmoothing -int 2

就是强行把抗锯齿打开。

分类: Tips & Tricks 标签: ,

iPhone/iPod有时不能显示歌词的解决方法

2010年11月14日 Huang Donghai 没有评论

有时候明明mp3里嵌入了歌词的tag,但是iPhone/iPod里还是不能显示。经试验,发现是V2.4的ID3 Tag偶尔会有这种Bug。在iTunes里,选择相应的mp3文件,右键点击,选择Convert ID3 Tags,转成V2.3版的ID3 Tag,问题解决。

分类: Tips & Tricks 标签: ,

其兴也勃焉,其亡也忽焉

2010年8月26日 Huang Donghai 没有评论

1945年,黄炎培以国民政府参政员的身份到访延安,在延安,他见到了共产党的领袖毛泽东。

毛泽东问:“任之先生,这几天通过你的所见所闻,感觉如何?”

黄炎培直言相答:“我生六十余年,耳闻的不说,所亲眼见到的,真所谓其兴也勃焉,其亡也忽焉,一人,一家,一团体,一地方,乃至一国,不少单位都没有能跳出这周期率的支配力。大凡初时聚精会神,没有一事不用心,没有一人不卖力,也许那时艰难困苦,只有从万死中觅取一生。既而环境渐渐好转了,精神也就渐渐放下了……总之没有能跳出这周期率。”

毛泽东答:“我们已经找到新路,我们能跳出这周期率。这条新路,就是民主。只有让人民来监督政府,政府才不敢松懈。只有人人起来负责,才不会人亡政息。”

————
挖65年的老坟,拭目以待。

分类: 五味杂陈 标签:

HLSL to GLSL

2010年5月22日 Huang Donghai 没有评论

当年 OpenGL Shader 语言选择投票 Cg 没有通过,而让 3D labs 主导的 GLSL 成为了标准,真是一件大不幸的事件。要同时支持 D3D 和 OpenGL 的渲染引擎就很麻烦,往往得写 HLSL 和 GLSL 两套代码。我们知道,PC D3D、XBOX 360 和 PlayStation 3 都是用 HLSL(Cg),当要移植到 OpenGL 时,就需要同样的代码 GLSL 也要写一套。

我们可以在 OpenGL 上用 nVidia 的 Cg Runtime 来解决这个问题。他可以用 HLSL 的语法来写 OpenGL 的 Shader。但是 Cg Runtime 也有他的缺点:1. 它很庞大,2. 他在 ATi 的显卡上性能不行,3. 他不支持 OpenGL ES 等等。FarCry 1,Axon Engine,id 的新游戏 Rage 采用这个方案。

所以有时候我们需要一个直接把 HLSL 翻译成 GLSL 的解决方案。

  1. ATi 有一个 HLSL2GLSL 的开源项目,支持直接从 HLSL 翻译成 GLSL,最高支持到 SM3。
  2. Lost in Triangles fork 了这个项目,hlsl2glslfork,目前不见有啥新功能
  3. MojoShader 支持把 D3D 的汇编 shader 和编译后的字节码翻译成 GLSL,Unreal Tournament 3 用的这个,好像也只支持到 Shader Model 3。

另外,Cg Runtime 在 Shader Model 4 和 Shader Model 5 在 OpenGL 上的支持好像也不太好。自从 Cg 的核心开发人员投奔微软后,Cg 框架的发展就明显停了下来。

这种人为造成的屏障,不知道是开发人员的不幸,还是产业的不行。

分类: 引擎开发 标签: ,

3G 宽带上网体验

2010年5月13日 Huang Donghai 没有评论

image 为了应付即将到来的长途旅行,搞了套 3G 上网设备。采用 Lenovo Ideapad U150 超轻便小本(11.6 吋显示屏,SU2200 双核,1G 内存, 250G 硬盘,蓝牙、Wifi、以太网卡都有,自己加了 1G 内存)。这个本子有个缺点,键盘很松的样子,响声很大,等发现已经晚了,已经买回家了。其他方面都还可以。

我对 3G 手机毫无兴趣,只是想 3G 上网,出外的时候可以看看网页,打打字而已。伟大的祖国可能是世界上唯一有 3 种制式 3G 并存的国家,中国移动的 TD-SCDMA,中国联通的 WCDMA,中国电信的 CDMA 2000。联通用的 WCDMA 是国际上最通用的 3G 制式吧。本来想用联通的服务,可是联通的 3G 上网,是只能在 3G 区域用,不能切换到 2G 用,纯 3G 网络覆盖面积还是很小的。中国移动的 3G 好像更不行。最后选了中国电信的天翼 3G,3G、2G、Wifi 随时切换。试了下速度,尚可,在家里好的时候有 200Kbytes 峰值,看看网页是够了。

本子不带 3G 模块,所以搞了个华为的 EC122 上网卡。这个卡还是显得庞大了点,相比于 U 盘。

如果是玩 3G 手机,还是用联通吧。纯 3G 上网,电信不错。逛某论坛发现,基本没人用电信的 3G 电话,全是上网的。而联通的 3G 用户,就是用 3G 电话的多,上网的反而极少。这是我们国家的怪现象。

最后给关心的人报个我买的价格:U150 (3699元),1G DDR3(175元),华为 EC122(280元),电信 3G(我的e家套餐内含 20 小时每月,无月租,超出 0.1 元每分钟)。

分类: 数字化生存 标签: ,

轮子为什么省力?

2010年5月11日 Huang Donghai 没有评论

我们程序界经常有句话,不要重新去发明轮子。轮子的发明确实很伟大,到底是谁发明的也不可考。我估计,这个发明是古代人在劳动生产中自然发现(或者叫发明)的。

image 想象下古人推或者拉一块沉重的方石头,这个时候要克服的是滑动摩擦力,它跟材料的光滑度、物体的重量和接触面的大小有关。这个力很大,古人一定很费劲。然后他发现,滚起来更省力(哪怕他不是圆形的),这个时候,如右图,是 Fp * Dp 这个力矩对抗 Fa * Da 这个力矩。如果这块石头是八角形的,那么 Da 就会更短,抵抗的力矩就会更小,随着形状越接近圆形,那么力矩就越小。可以想象,如果是个纯粹的完美的圆形的,那么抵抗的力矩会最小,这个时候就算是一个“小古人”,也可以推得动一块很重的大石头,这个其实就是滚动摩擦。并且圆形的特点,是滚动的时候不会颠簸,因为到圆心的距离一样。轮子就这样被发明了。

image我们认真研究下轮子的滚动摩擦。如右图所示,无论是轮子,还是托起轮子的地面,都不可能是完全刚性的,总会有点变形,就是这点变形,造成了滚动摩擦的起因。其实滚动摩擦并不是一种摩擦,而是一种力矩,完全的滚动摩擦,并没有在接触点产生滑动,也就不会做功。当轮子和地面越硬,变形就越小,相当于产生的滑动摩擦就越小。这就是为什么火车用钢轨和钢轮子;也是为什么自行车和汽车,气不足的时候会更吃力或者更消耗汽油。

但是汽车为什么不用钢轮子呢?这个道理是很简单的,不像铁轨,他不需要转向,他的转向,是靠扳道实现的。而汽车要主动转向(这个需要滑动摩擦力),钢轮子太滑,不能方便转向。何况,如果轮子是钢的,地面岂不是很容易划烂。如果整个地面用钢板,那成本也太高了。有轨电车,其实是可以用钢轮子的,而且,很多有轨电车,确实用的是钢轮子。

轮子里面的学问,暂时就讲这些。

分类: 思考者 标签: ,

如何利用大于4G内存?

2010年5月2日 Huang Donghai 没有评论

现在有大于 4G 内存相当常见,内存这么便宜。这样操作系统的选择就是件麻烦事情。Windows XP、Windows Vista 和 Windows 7 x86 版本都只能用到 3.0~3.2G 左右,跟主板有关。很多人就被逼安装 x64 版本的操作系统。

其实N年前就有PAE1这个CPU支持的特性。现在市面上的 CPU,估计没有不支持的吧。现在的 Linux 发行版,2.6 之后的内核大都编译进去了 PAE 的支持,所以,就算你是大于4G内存,装Linux 32bits,也可以完全利用全部内存。Windows Server 2003 和 Windows Server 2008 的 32 位版,也用PAE支持到 64G 的内存。

看这个表:

Windows 版本 (和最大支持内存(GB)) 32-bit 版本 64-bit版本
Windows 2000 Professional, Server 4 N/A
Windows 2000 Advanced Server 8 N/A
Windows 2000 Datacenter 32 N/A
Windows XP Starter 0.5 N/A
Windows XP Home & Media Center 4  
Windows XP Professional 4 32
Windows Server 2003 Web 2 N/A
Windows Server 2003 Small Business, Home, Storage 4 N/A
Windows Server 2003 Enterprise Storage 8 N/A
Windows Server 2003 Standard (SP1/SP2/R2) 4 32
Windows Server 2003 Enterprise (SP2) 64 2048
Windows Server 2003 Datacenter (SP2) 128 2048
Windows Vista Starter 1 N/A
Windows Vista Home Basic 4 8
Windows Vista Home Premium 4 16
Windows Vista Business, Enterprise, Ultimate 4 128
Windows Server 2008 Standard, Web 4 32
Windows Server 2008 Enterprise, Datacenter 64 2048
Windows 7 Starter 2 N/A
Windows 7 Home Basic 4 8
Windows 7 Home Premium 4 16
Windows 7 Professional, Enterprise, Ultimate 4 192

Windows 32 位版本内存的限制,完全只是商业考量,并非技术原因。所以,如果你要支持大内存,而又不想用x64版本的操作系统,XP 内核的可以选用 Windows Server 2003 Enterprise 或者 DataCenter 版本,Vista 和 Win7 内核的,可选用 Windows Server 2008  Enterprise。

当然 32 位的操作系统利用 PAE 可以支持到 64G 内存,但是单个应用程序,还是只能最多利用 4G 内存空间,我觉得这是我们唯一要用 64bits 操作系统的原因。

  1. 参考:Physical_Address_Extension []
分类: 系统网络 标签: , , ,

从零到点 – Chapter 0

2010年4月29日 Huang Donghai 没有评论

有“高手”说,考试新人,考矩阵求逆就够了。这么“高深”的东西,我怎么能懂呢。我是只知道点积和叉积的。这个话恐怕也说满了,积和积,我也不能说我就知道了。我只知道了一点点。

关于矩阵求逆,我们知道求逆的定义,就是求 M-1= I / M。对于4\times 4的矩阵,不过是 16 个线性联立方程,有16个未知数,这个只是体力活,就算你未尝先把公式背下来,硬算也是初中生可解的问题,并且这个只是代数问题,跟几何没有关系。而点积和叉积则不同,点积和叉积是 3D 解析几何,3D 图形学的数学基础,如何让扁平的代数立体起来,靠的就是这个。大多数引擎程序员会自认为自己很了解点积和叉积。但是实际上据我观察,却不是这样。99%的人没搞懂这个。

我们的教科书,倾向于直接把结果含糊不清的告诉学生,而没有把其中的过程,思辨教给学生,而这个反而是精华。我说他们含糊不清,已经是个很轻的说法。实际上,我发现我们的教科书,采用循环定义,想当然的推理的地方很多。我尝试用一种不同的途径来讲述这个。你看了之后,可能会更明白了,哦,原来是这样。但是很有可能 (或者说是更有可能) 是更迷糊了。很多你认为理所当然的东西一下子朦胧了起来。

自然数 Natural number

皮亚诺像我们从最简单的开始。老王是卖白菜的,他问,一斤白菜 2 块钱,请问 3 斤白菜多少钱?虽然你家里不是卖白菜的,我想你也能得出答案,6 块钱。我如果问为什么呢?因为 2*3 = 6。如果我问为什么 2*3 = 6 呢?这个就有点难度了。九九乘法表里就是这样的,我们从小就背下来了。其实很简单,乘法是加法的简化写法,2*3 等于 3 个 2 相加,所以 2*3 = 2+2+2=6。那为什么 2+2+2=6 呢?这就很难答上来了。如果你孩子问你,你会跟他搬指头。搬指头是没错的,但是如果是 20,200,2000, 你恐怕就没这么多指头可以搬(蜈蚣除外)。

要解答这个问题,其实是没有可能的。我们要搬出公理,公理,就是公认的道理,不证自明的道理,其实就是没有办法证明的道理。我们前面说的,其实是自然数,或者说,我们叫它自然数,因为它很“自然而然”。关于自然数,我们有皮亚诺公理来描述这个问题。

皮亚诺的这五条公理用非形式化的方法叙述如下:

  1. 1 是自然数;
  2. 每一个确定的自然数a,都有一个确定的后继数 a’a’  也是自然数(一个数的后继数就是紧接在这个数后面的数,例如,1的后继数是2,2的后继数是3,等等);
  3. 如果自然数 bc 的后继数都是自然数 a,那么 b = c
  4. 1 不是任何自然数的后继数;
  5. 任意关于自然数的命题,如果证明了它对自然数1是对的,又假定它对自然数 n 为真时,可以证明它对 n’  也真,那么,命题对所有自然数都真。(这条公理保证了数学归纳法的正确性)

皮亚诺公理里的第 2 项所谓的后继,其实定义了加法,后继,就是搬一个指头,就是 +1 的得到的数。后继的后继,就是 + 1 + 1。我们知道 1 的后继那个数,我们写作 2,意思就是 1 + 1 = 2。所以加法就是多次搬指头的简写

a+b 定义为 a 后面第 b 个后继,也就是 a 之后再搬 b 次指头。

我们先证明证明加法结合律:

(a+b)+c=a+(b+c)

首先证明 c=1 时上式成立, (a+b)+1 是 (a+b) 的后继,而 a+b 是 a 后的第 b 个后继,那么 a+(b+1) 也就是 (a+b) 的后继。所以

公式1: (a+b)+1 = a+(b+1)

成立。

假设 c=m 时成立,我们证明 c=m+1 时也成立。

如果

公式2:(a+b)+m=a+(b+m)

成立,

那么 根据公式1有

(a+b)+(m+1) = (a+b+m) + 1

根据公式2有

(a+b+m) + 1 = ( a+(b+m))+1

再根据公式1(用了两次公式1)

( a+(b+m))+1 = a+( (b+m)+1) = a+(b+(m+1))

证毕。

加法交换律也可以用归纳法类似的证明。

那么 2+2 等于多少呢?2+2 = (1+1) + (1+1) = (1+1+1) + 1 = 3+1 = 4

2+2+2 等于多少呢?按上面的方法,不难证明 2+2+2=6

但是2+2+2写起来太难看了,如果你买100斤白菜,那岂不是要写老长?我们定义一个新的简写方法,a多次累加b次,我们写成a\times b乘法就是多次加法的简写。就得到 2\times 3=6

乘法也可以证明符合结合律和交换律。证明就不写了。自己可以去试试。

另外,对于一个自然数,乘以1等于多少呢?这个很容易理解,还是等于自身。一斤白菜2块钱,你买一斤,当然还是2块钱。所以我们有:

公式3: 1 \times n = n

整数 Integer

卖白菜是件很高深的工作,跟掏粪不相上下,也需要大学生才能搞定。老王大学毕业后,卖白菜卖的很有心得。有个问题,今天进了100斤白菜的货,卖出了85斤,问,还剩多少斤呢?

所以我们要定义一个搬指头的逆运算,反向扳指头,先拿出100根指头,然后拿掉85个指头,这个运算我们叫减法,减法是加法的逆运算

100-85=15

如果卖了100斤呢?你发现啥都没剩下。这时候我们定义一个新的数 0,表示没有,空。0算不算自然数,有的领域倾向于算是,比如集合论和计算机科学里。有的领域一般不算,比如数论。数论里面算0,很多东西就不好搞了。比如0算不算偶数?算不算质数?不好搞。我们不讨论这个。卖白菜虽然高深,但是也没到要去证明哥德巴赫猜想的地步。

所以,卖完100斤后,老王今天收入了200块钱。老王的白菜生意做得很好,又很有信誉,所以,白菜供应商可以让老王先拿货,后付款。第二天老王又拿了100斤白菜,但是挂了帐,拿货价是1元每斤(白菜的利润没这么高,否则就不是叫白菜,但是我们还没学过实数,所以暂时这么定)。结果这天生意不好,大家都喜欢吃点好的(豆腐就不错),只卖掉了30斤,老王今天收入多少钱呢?

30\times2=60

要还供应商100块,这个帐一算,老王亏了40块。如何计帐这个亏了的40块钱(统计局不叫这个叫亏损,叫赤字,老王收入下降也不是下降,叫负增长),我们扩展自然数支持这个记法,叫负数。-1就是0前继,-40就是0往前数40。

我们不难得到,0-40 = -40,0-n=-n;

负整数乘以正整数是正整数还是负整数呢。当然是负整数。我欠你10块钱,是-10。如果是欠10倍的10块钱,当然是 –100。如果是正数就麻烦了,你要倒找我钱。即, 假设a, b是正整数:

(-a)\times b=-(a\times b)

负整数乘以负整数是负整数还是正整数呢?

假设a, b是正整数,那么

\begin{array}{rl} (-a)\times(-b) & =-1\times a\times(-b)\\ & =-(a\times(-b))\\ & =0-(a\times(-b))\\ & =0-(-(a\times b))\\ & =a\times b\end{array}

显然结果为正整数。

小结

我们初步从一无所有开始,得到了整数的概念和一些基本的运算。后面我们要进入实数和几何,然后接近点积和叉积。

分类: 基础理论 标签: ,

Switch to our mobile site