哀哉!痛哉!

0:4…

天哪…

哭我阿根廷,痛我阿根廷,哀哉!惜哉!悲哉!

和4年前一样,阿根廷再一次在1/4决赛中被德国人终止了世界杯前进的步伐,悲愤得令人发中指。不过所不同的是,4年前我悲愤的向德国人竖中指,这次,我向阿根廷的狗屎整体竖中指,向阿根廷的狗屎后防竖中指。整个球队,除了梅西和马斯切拉诺像个会踢球的,其他的呢,后卫形同虚设,中场无能,前锋只有个人的蛮干,伊瓜因停球基本2米外。只有马斯切拉诺在全场不知疲倦的飞奔防守,梅西已经俨然踢的像个后腰了,居然不断的回撤到后卫线之前去拿球,而传出的球也基本上是有去无回。梅西为这样的一支球队做出了巨大的牺牲,但他得到了什么呢?!只不过又找来一群“梅西,没戏”的嘲弄声而已。这样的球队,不配拥有梅西,梅西在阿根廷,或者是这支马拉多纳的阿根廷,简直就是暴殄天物。

这几乎是一支没有整体的阿根廷队,当他们落后的时候他们在干什么,防守梦游,进攻也完全失去了血腥,毫无斗志,全是单枪匹马单干。马拉多纳,足球是需要整体的,不是靠赛前亲吻每个球员就能解决问题的。等待马拉多纳的,将是腥风血雨般的声讨。

痛心啊,这仍然不是一届属于梅西的世界杯,他还需要等待另一个4年,4年哪!4年前,梅西只有19岁的梅西,但4年后,梅西已经27岁了。

半决赛梅西和巴萨队友的内战设想破灭了,不过我的世界杯还没有结束。

让我在巨大的悲痛中,等待临晨2:30西班牙比赛的到来,西班牙加油!

[译]3D为互联网准备好了么?

原文:Is 3D Finally Ready for the Web?
作者:Sixto Ortiz Jr.
来源:Computer archive, Volume 43, Issue 1 (January 2010) table of contents, Pages: 14-16, 2010

Introduction 介绍

最初的互联网是以一个简陋的鼠标点击环境开始的,但如今,互联网上已经到处是各种眼花缭乱的页面,充满着各种丰富的应用程序,有的用来娱乐,有的用来提高生产率,等等等等。用户可以在互联网上完成各式各样的任务,不管是购买商品,还是与全世界的用户实时交互。然而,一个关键的元素却迟迟没有在互联网上打上自己的烙印——3D。

在今天,3D的在线应用主要是游戏和虚拟世界,这些都需要强大的电脑和特殊的软件来支撑。然而,商业,工程企业和其他一些用户同样也需要3D,他们同样也需要3D所带来的真实感和更多细节。用户希望他们能够在浏览器中获得和在PC中一样的体验。并且由于3D技术在电影、游戏和其他各种娱乐行业中的广泛应用,消费者已经对它习以为常。因此,对于互联网上更多且更易于访问的3D内容的需求变得越来越强烈。况且更好的浏览器体验同时也意味着更多潜在的收入。

然而,互联网3D还处于一种很不成熟的状态,因为很难在典型的PC和浏览器上广泛使用这种复杂的技术。事实上,一般浏览器也无法承载复杂的3D内容,更无法提供高帧率或全屏的图形效果。并且,在实时的合作程序和其他应用程序中包含3D让本来已经很繁琐的开发过程会变得更加复杂。

尽管如此,现在是有一些组织在为网络3D技术而努力工作的。他们尝试将浏览器转为一种更为强大的计算平台,以在该平台上获得如PC上一样的体验,例如3D内容的展示。这些工作将会为网络衍生出更多的应用程序,包括产品建模,展示和配置;3D在线会议和工人协作;对于手术或机械过程的模拟;虚拟旅游;增强现实等等。

不管怎样,在互联网3D技术变得可依赖和成为主流之前,仍然有重重的困难需要克服。

3D on the web 网络上的3D

早期的网络是没有图形界面的,直到NCSA(美国国家超计算应用程序中心)在1993年发布了Mosaic,这是首个可以同时展示图片和文字的浏览器。

当前在互联网上,已经有一些为3D服务的技术在使用,他们基本使用同样的方式工作,但是使用不同的文件格式。

VRML和X3D
网络3D开始于1994年,在这一年,VRML组织发布了虚拟现实标记语言(Virtual Reality Markup Language)。然而,VRML从未流行过,因为它限制开发者只可以写3D相关的内容。为了创建完整的引人注目的应用程序,开发者必须能够同时开发3D,2D,视频和音频。在处理器和软件能够支持图形之前,VRML表现还是不错的,因为它能支持图形。但是VRML太慢,并且没有能力渲染复杂高仿真的模型和场景。

在1997年,Web3D联盟推出了X3D,它是一种基于XML的文件格式,同时也是VRML的扩展,以用来表现3D图形。X3D同样也没有流行过。游戏和3D开发人员广泛忽视了X3D,X3D只被极少数的商业工具所支持。

其他方法
3D工业论坛于2003年推出的Universal 3D技术,是一种压缩的3D图形文件格式。然而,它的推崇者也只是推动Universal 3D使其成为了一种主要使用在制造业或建筑业相关应用程序的文件格式。

开源的网络3D标记语言(3DMLW,3D Markup Language for Web)是一种基于XML的文件格式,它用于创建网络上的3D和2D内容。3DMLW由3D Technologies R&D于2009年推出,它可以通过插件工作在大多数流行的浏览器中。

Technical Developments 技术开发

今天的硬件能力能够比过去更好的处理3D。更快的CPU,更快的图形处理器和显卡,以及四处可见的3D图形加速器,这些都为网络3D的出现提供了可能。

JavaScript和HTML 5.0
开发者使用JavaScript语言开发各种网络应用程序。浏览器的 JavaScript引擎性能的提升,使得网络3D成为可能。比如说,IE9中的JavaScript引擎将可以使用宿主机器的图形处理器来快速的处理图形相关的任务。同样的,Mozilla也增强了其Firefox浏览器的JavaScript引擎,他们使用了一种追踪( tracing )技术,该技术通过优化代码的执行方式来提升性能。

JavaScript的访问HTML 5.0的能力可以让开发者更加方便的将视频,音频,3D和2D内容无缝合并到应用程序中。HTML5.0中的画布(canvas)元素同样也会促成互联网3D。该元素使得浏览器可以通过它们的JavaScript引擎,本能(无需插件技术)且动态的渲染位图图片,使得渲染3D变得更加容易。

WebGL
Mozilla 基金会是一个创建和支持开源应用程序的组织,Khronos是一个为并行计算,图形和动态媒体设计标准的联盟。它们俩正在开发WebGL。该技术可以在不需要插件的情况下为网络带来硬件加速的3D图形效果。任何支持Khronos的OpenGL或OpenGL ES规范的浏览器都可以运行WebGL。

跨语言跨平台的OpenGL定义了一组API,以供开发出提供2D和3D图形效果的应用程序。而OpenGL ES(Embedded Systems)规范为从简单元素(或者成为图元,比如线或者多边形)绘制3D场景提供了编程工具。OpenGL ES可以工作在智能手机这样的小型设备上。然而,这些能力不能离开插件的支持。许多用户倾向于不使用插件,因为它们不易安装,且难于排除故障和管理。

WebGL使得浏览无需插件便可渲染3D内容。该技术提供可以让软件通过编程访问PC机3D渲染硬件的API,从而扩展了OpenGL。本质上,WebGL提供了JavaScript应用程序和OpenGL软件库之间的连接,而后者负责访问宿主系统的图形处理器。这可以充分利用硬件的能力来渲染3D内容。

Khronos已经建立了一个WebGL工作组,该工作组将在今年上半年发布 WebGL的第一个release版本。但是程序人员已经开始把WebGL构建到Firefox的开发版和Webkit开源浏览器引擎中,该浏览器引擎被苹果的Safari和Google的Chrome浏览器所使用。

O3D
Google也是 WebGL工作组的成员,但同时Google也开发了一款基于浏览器的3D图形技术,O3D,如下图所示。

O3D Software Stack

图片来源:http://code.google.com/apis/o3d/docs/techoverview.html

O3D是一个基于IE,Firefox,Safari 和Chrome这些浏览器的插件。Google现在正在把该技术构建到Chrome中,并希望未来能够直接构建到其它的浏览器中。O3D可以在Windows,Mac,Linux上运行,它是一套开源的JavaScript API,用于开发互动的3D图形应用程序,比如游戏,广告,或者虚拟产品展示,都运行在一个浏览器里。该API为基于JavaScript的程序提供了接口,使得JavaScript应用程序可以与包含在O3D插件中的O3D核心软件进行通信,从而直接利用计算机的图形硬件。

Google 发言人说O3D是一个保留模式(retained-mode)的技术,因为它只设置场景一次,然后每帧只绘制场景改变的部分。与WebGL这样的立即模式(immediate-mode)技术不同,O3D不会每次都重新绘制整个场景。这提供了更好的性能,但却弱化了开发者的控制能力。

Adobe Flash
Adobe正在将更强的3D能力加入到它所属的Flash浏览器插件中。Adobe是在2008年Flash Player 10的发行版中推出了3D能力。该技术通过加入新的类和方法,从而包含了对于3D效果的支持,尤其可以通过Flash的 ActionScript编程语言在三维空间中设置一个物体的位置。通过这种方法,即便是没有丰富3D经验的开发者也可以通过在2D中设计物体来制作3D内容,并能通过新加入的类和方法修改它们。Flash Player 10.0,现在是beta版,将会为智能手机和其他移动设备带来3D效果。

Standing in the Way 在路上

在3D Web真正成熟之前,它还需要克服重重的障碍。

比如说,插件,在某些情况下,时常会导致浏览器崩溃或者其他的问题。让浏览器能够天生就有渲染3D的能力,并且克服当前3D技术不能和所有的浏览器、操作系统和应用程序兼容的问题,这些都是很大的挑战。另外,缺乏标准化也是一个问题。如果没有标准化,网络将会出现各种不同的互不兼容的格式和技术,这使得开发者为了在不同的浏览器上运行需要创建很多版本的程序。同时,开发网络上的3D内容需要很长的开发时间,并且很少的开发者对该方法很熟悉。

对于上网本和智能手机使用的迅猛增长,这些具有较慢的处理器,意味着更多的人在使用无法运行3D内容的设备。技术硬件能力和网络带宽已经大幅度的提升了,但它们仍然不能满足高度复杂的3D模型的需求。并且网络3D技术的推崇者们并没有为普通用户设计在线3D技术,这是在犯和VRML一样的错误。

Conclusion 结论

WebGL是一个非常有趣的网络3D开发技术,因为它无需插件。一旦WebGL推出,我们将在网络上看到3D内容的迅速增多。然而,3D在10年内是很难成功的,直到迅猛增长的流行上网本和智能手机拥有足够强大的处理器能力来播放数据密集的内容。不过总有一天,3D将在网络上做到像现在视频所做到的一样,网络3D的时代终会到来。

Now it’s World Cup time

The brand-new World Cup brought by the mysterious African continent is coming!!! The opening match between South Africa and Mexico is in just half an hour.

It should have been the time to fully enjoy myself in football. However, sadly, I am still engaged in my thesis work, because the preliminary oral defense for my postgraduate thesis is just tomorrow. What a time! Oh my goodness, I am still rehearsing my defense presentation, while watching TV to wait for the first World Cup match at the same time. Hopefully tomorrow everything will be alright.

God bless me. God bless Africa.
And, God bless Spain & Argentina.
God bless Messi. God bless Xavi. God bless Iniesta.

Norwegian Wood (This Bird Has Flown)

The Beatles的所有作品都是经典,而这首是经典中的经典,或许有些托“村上春树”的福吧,如雷贯耳,耳熟能详。

我弹琴有一个奋斗目标,就是要学会很多很多很多很多The Beatles的歌曲,弹唱也好,指弹也好。但弹琴很多年,到现在为止能弹完整的只有两首,一首是这个,另外一首则是Across the Universe

设备啊设备,我没有,我这纯业余的只有用这普通的DC录,画面粗糙,音质嘈杂,何时我才能真正的玩得像样点呢?不谈整个专业点的视音分道录制,至少弄个像样点的DV吧。

过一段时间就要搬家了,在现在这栋房子住了两年了,这或许是在这里的最后一次搔首弄姿,我很留恋。

最后,厄,这墨镜是Lennon Style,不是瞎子阿炳。

My Footsteps of Programming 3DS Max Exporter Plug-in (continued)

Oh my goodness, how long has it been since I wrote the first part of this article? What on hell was I buzzing around for during this period which seemed years to me? This plug-in is nearly becoming a legacy for me. Now it’s time to bring it back and finish the remaining parts. And I will also upload the whole project’s source code and related docs later.

First part of this article: http://www.bennychen.cn/?p=640

Predefine mesh file format

After we’ve got some basic concepts about 3DS Max, now it’s time to define our own mesh file format. It’s very hard to directly define a format from the scratch. Researching some already typical and mature file formats is a good starting point. Recommended by my tutor, I chose .md2 & .md3 formats as my learning material which are famous for being used in the Quake series game. Based on several days’ research on them, I defined my own mesh file format, which is sort of like .md2 & .md3 but also differs from them at some point.

I did not just define one format. They are a suite of formats, see the following table.

File Type
File Format
Basic mesh file
*.CSM (Crowd Simulation Model)
Texture
*.jpg, *.bmp, ……
Animation
*.AM
Animation Configuration
*.CFG
Mounting Configuration
*.CSM_PACK

There are 5 parts in total. But some of them are not necessary. Only one file is essential – the basic mesh file, which is named as CSM( Crowd Simulation Model ), because at that time I programmed this plug-in mainly for a crowd simulation project. The texture part is the textures file used by the mesh. If a mesh includes animation, the AM file( short for animation ) and animation configuration file(.CFG) are also needed. My format also supports mesh mounting, so if a mesh is mounted by several sub-meshes, .CSM_PACK is used to store the mount info.

These are some of the features of my format.

  • Support multi-texture
  • Support skinned animation
  • Decouple mesh and animation
  • Support animation configuration
  • Support mesh mounting

And the 2 figures below are the inside structure of CSM and AM. If you want to know more detail of them, later I will upload the docs.

I stored my animation data in .AM file, bone by bone, animation by animation, and frame by frame.

Export static mesh data

OK, so far, all the preparation work is done. We can finally start the programming process.

For the last 2 steps, I will not present very detailed info here. I will only talk on the difficulties needed to overcome when I programmed them. All the programming job is strictly based on the format we defined last step. For more detail, please turn to my source code.

Firstly we need to handle the static mesh data. In this step, some difficulties are.

1. Transformation between different types of coordinate system.
Basically 3DS Max uses right-hand coordinate system. But some common rendering system( i.e. DirectX ) uses left-hand coordinate system. They have totally different coordinate systems, see figure below. So, the coordinate data needs to be transformed before outputting. See the figure below, the left is a typical rendering system’s coordinate system, and the right is of 3DS Max.

About how to transform, you can refer to this paper – 《一种不同坐标系之间的变换矩阵的转换方法》by 杨卫东&刘玉树.

2. Handle mesh with multiple textures.
This is a tricky problem. We know that a single vertex could be shared by different faces, so if these faces are attached with different textures, the vertex should have multiple UV coordinates. This leads to the fact that we need to split the vertex into multiple vertices, so that we can ensure one vertex only maps to one UV coordinate. And the whole mesh needs to be reorganized.

From my CSM format definition, you may have found that a mesh is comprised of multiple submeshes. Actually the submeshes are split based on textures, that is, vertices using the same texture are categorized into one submesh. So if an original vertex is using 2 textures, this vertex is firstly split into 2 vertices and will exist under 2 submeshes respectively.

3. Vertex normal
This is another painful issue. About this topic, I once wrote an article in my blog before. Turn to it here.

Export skinned animation

Now, we have come to the most complex, most sticky part of the whole work. I can still remember the time, the pain and the effort when I tried to tackle this problem. Those memories are so unforgettable. But they all deserve.

Why I did it so painfully was that, firstly I was still not familiar with the mechanism of bone animation at that time, secondly the mechanism of 3DS Max skeletal system is hard to figure out, whether its bone system or biped system, lastly, decouple the vertex data and the animation data is another challenge.

About the computational process of bone animation, thanks to this blog, it is the key article that helped me accomplish the whole work.
http://www.cnblogs.com/neoragex2002/archive/2007/09/13/Bone_Animation.html

Screenshots

The figure below is my exporter plug-in UI. The upper part is used to include animations, which will later generate .CFG file. Ant the lower part is used to configure mesh mounting, which will later generate .CSM_PACK file.

And here is an example of exporting. On the back is the 3ds max software interface, rendering a mesh with or without some animation. And on the front is the mesh viewer developed by me, which renders the same mesh with the same animation.

This is another example, the Tiananmen Gate.

Linux下DB2的问题总结

1. 使用db2cc命令启动db2 control center时出现 – Error: Can’t connect to X11 window server using ’0.0′ as the value of the DISPLAY

解决方法:
- su root
- xhost +

关于xhost: http://linux.about.com/library/cmd/blcmdl_xhost.htm

2. 使用control center操控数据库时抛出SQL4414N错误

解决方法:
- su dasusr1
- db2admin start

3. 在用db2move导出数据库时出现如下的错误

Application code page not determined, using ANSI codepage 1208
Error opening list file. Terminating …
**Error occured while opening a file.
解决方法:
db2的用户对于当前文件夹没有写权限,使用chown改变owner或者chmod改变权限。
chown db2inst1:db2iadm1 $directory_name -R

4. 如何卸载db2

(1). 删除所有关联的instance
$DB2DIR/instance/db2idrop InstName
(2). 删除db2
$DB2DIR/install/db2_deinstall -a

5. $DB2DIR的include目录下为何只有一个asn.h

原因是在安装db2的时候,可能选用了typical模式,则不会安装这些头文件。使用custom 模式,并在select features to install中选中SDK

6. 如何查看db2的版本

db2level

Barça go out with heads held high (1-0)

FC Barcelona will not be going to the 2010 Champions League final. They dominated Inter Milan tonight, but the goals just would not come. Gerard Pique’s 83rd minute goal set up a gripping finale but it is the Italians that will be going to Madrid.

巴萨将无法前往2010的冠军杯决赛了。在今夜,他们控制了国际米兰,但需要的进球却没有到来。皮克83分钟的进球奏响了一篇扣人心弦的结尾曲,但前往马德里的却将是意大利人。

我们充满信心的Comeback一战最终未能如愿,巴萨还是被淘汰了。这是怎样的一个夜晚,激情,紧张,期待,愤怒,悲伤,各种感情掺杂在一起。尽管我们最终未能进入决赛,但这是如此难忘的一个夜晚,我们一小撮最死忠的巴萨球迷挤在一个小酒吧里,一起呐喊,一起承受。

不出所料,国米人把901大巴开进了诺坎普,铁桶一样的毁灭足球式的打法令人恶心。一度让人几近绝望,但皮克迟来的进球点燃了我们所有人的希望,之后博扬那个被吹掉的进球一度让那个酒吧在几秒之内陷入了疯狂,在刹那间,我想起了去年伊涅斯塔的最后一击,难道去年的那一幕又要再次上演,但只有那几秒,因为几秒后,裁判抹杀了那神奇一刻的复制。

巴萨,被淘汰了。

但今夜,巴萨我为你感到自豪,我坚信国米的晋级只是运气好而已,我们输给了1000公里,输给了毁灭足球的打法,输给了昏庸的裁判。

有人说国米征服了诺坎普,这简直太可笑了。作为一个全场龟缩在禁区里,全场只1脚射门,控球只20%,最终也输掉了比赛的球队,这叫征服?太他妈可笑了。巴萨被淘汰只是在梅阿查败走了麦城,在诺坎普,国米是个彻底的Loser。

至于穆里尼奥,我不想多说什么了:  just a bitch,总有一天会有报应的。

冠军杯没了,但接下来还有联赛,只有最关键的4轮了,巴萨加油!

Forca Barca!

任何人在比赛前对你说出这样的结果,你都会说他是个疯子。但事实就是这样,这就是足球,这有如腥风血雨的一夜,巴萨在梅阿查,被国米人肆虐的撒欢,吞下了两年来最大的一场失利。就算全世界都在赞美你的美丽,赞美你的战无不胜,赞美你是这个星球上的王中王,但这就是足球,没有永远的常胜将军,我们要学会接受失利。

我想尽力去忘记昨夜的痛楚,但依然心如刀绞。

输球了就是输球了,不必埋怨球队长途驱车10小时的疲劳,也不必埋怨运气的不佳,更没有理由埋怨裁判的不公,现在不是埋怨的时候,更不是悲观丧气的时候,因为180分钟的比赛才进行了一半而已。

期待巴萨的将士们及时调整自我,恢复自信。我们只是暂时1:3落后,我期待下一个90分钟的比赛,回到属于我们的诺坎普。如果国米能够主场3:1赢了我们,why we couldn’t? We could do better, because we are Barcelona!

我爱巴萨。Forca Barca!

悲剧

最近真是祸不单行,前几天才刚把iTouch弄丢了,这两天我的笔记本硬盘又不幸丢失。

硬盘不是好端端的被包在笔记本中么,怎么会丢失呢。事情是这样的,我那用了快5年的笔记本终于开始罢了工,于是就到中关村送修,但因为硬盘里的数据非常贵重,怕维修过程中受损,于是就拆卸下带了回来,但昨夜跟几个朋友去后海酒吧high大了,今早硬盘早已不知了踪影。还不如扔在维修点呢,悲剧……

真是郁闷之际。

丢一个不值钱的硬盘真的没什么,但是——

因为很多数据还没有来得及备份,就这样,我从大学2005年到现在几乎所有的照片全部丢失,我学吉他以来收集的吉他谱全部丢失,一年以来日积月累辛苦整理的VOA听写资料全部丢失,等等等等各种资料。。。。

我欲哭无泪。

不养成及时备份的好习惯,这就是血的教训。

但也不完全是悲剧吧,主要有以下几点:

  1. 硬盘绝不包含任何艳照;
  2. 照片基本全丢,但还好在各种个人相册、空间中上传了不少,所以一些珍贵的照片还能找到。但尽管如此,这个损失还是最惨重的。未来的很多很多年以后,当去回忆生命中的这段时间时,又失去了很多很多回忆的画面。(我已经失去过一次了,05年第一台笔记本被偷就丢了很多照片)
  3. 虽然吉他谱全丢了,但我真练不了多少,反正以后要练什么再从网上下吧。
  4. 坚持了一年的VOA资料丢失了固然可惜(其实VOA我iTouch里算是一份备份的,但iTouch已经先去了),但我这一年通过VOA带来的进步是绝对不会丢失的。
  5. 与计算机技术相关的资料我基本都是有备份的。
  6. 最后严重感谢DropBox,使得与我毕业设计相关的重要资料在这场灾难中得以幸存。

最近真是衰到底了,这难道就是传说中的本命年效应么?穿红色儿的真一点也不管用。