2011年3月10日星期四

为什么RTP往往是使用UDP,而不是使用TCP封装

继续完成“流媒体技术系列”,接上一篇提出的问题:为什么RTP往往是使用UDP,而不是使用TCP封装,接下来简单的解释一下,先摘录一些基本概念,然后使用一个表格进行对比,进一步探讨这个问题。

计算机网络OSI模型中,TCP和UDP为第四层传输层的功能。

简单的说:TCP传输控制协议(Transmission Control Protocol)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。TCP协议能为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错地发往网络上的其他计算机,对可靠性要求高的数据通信系统往往使用TCP协议传输数据。

必须要经过三次“对话”才能建立。
第1次对话
A-->    发连接请求数据包                       -->B

第2次对话
A<--    发送同意连接和要求同步          <--B

第3次对话
A-->    发数据包确认B的要求的同步    -->B

UDP用户数据报协议(User Data Protocol)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。
UDP例子:“ping”命令测试两台主机之间TCP/IP通信是否正常,就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。

几个使用TCP重要的优点
1.TCP速率控(TCP rate control)制有经过证明是具有的稳定性和可扩展性。
2.TCP提供保证delivery, deleting the packet loss efficiently。
3.TCP是可以助于的越过防火墙。
4.流量控制(The flow control)。
5.The transmission windows system有助于优化网络资源的使用。

从网上摘抄一段关于TCP协议的主要功能
TCP协议的主要功能是完成对数据报的确认、流量控制和网络拥塞;自动检测数据报,并提供错误重发的功能;将多条路径传送的数据报按照原来的顺序进行排列,并对重复数据进行择取;控制超时重发,自动调整超时值;提供自动恢复丢失数据的功能。

相对TCP,UDP显然更好地使用于实时应用,原因如下:
1.最低开销(Minimum overhead)。
2.在最大数据从传输速率开始发送。
3.不重复请求,所以就没有重传(一个单一的数据包丢失在一个的实时应用中并不重要)。
4.低处理时间(low processing time)。不需要缓冲(No buffers)。

与TCP不同,UDP并不提供对IP协议的可靠机制、流控制以及错误恢复功能等。由于UDP 比较简单,UDP头包含很少的字节,比TCP负载消耗少。下图为TCP的头和UDP的头的格式:

TCP-Header 

UDP-Header

TCP协议和UDP协议的差别(以表格的形式):

 

  TCP UDP 和流媒体的关系
Header 20 Byte 8 Bytes UDP更好,少overhead
Connection Connection Oriented,在数据传输前需要建立connection。 Connectionless,没有connection需要被建立。 对于Multicast,Connection Oriented是不适合
Reliability 可靠 ACK 不可靠 可靠性比时间延迟(time delay)不重要。TCP会增加延迟
Communication Two-way双向 One way单向

In UDP, RTCP implements the feedback

Errors Error Correction FEC在整个packet Error Correction只在Header Checksum UDP使用较少处理Errors时间
Data flow 控制data flow用于管理下载速度 没有控制

UDP sends to the same data flow as is encoded the media.

Re-transmit 需要Repeat 不需要Repeat Repeat也会产生延迟,不适合实时应用
Delivery Rate 没有预设。TCP将一直增加直到数据丢失或发现堵塞 传输速度和流的编码率相吻合

UDP适应性更好

Client Buffer

Receive buffer
overflow: 如果数据到得太快,receiver发送一个信息给server,使其减慢传输

没有local caching,packet到了媒体播放器直接被处理。

Client Buffers也产生延迟

 

参考:
深入浅出讲解TCP/UDP协议:http://tech.163.com/05/0913/11/1THDB8DO00091589.html
http://zh.wikipedia.org/zh-cn/传输控制协议
http://zh.wikipedia.org/zh-cn/用户数据报协议

2011年3月3日星期四

实时传输协议RTP (Real-time Transport Protocol)

继续完成hanyionet的长期计划,在博客中完成“流媒体技术”系列文章,今天谈谈RTP,其实以前的文章也提到过这个协议。

RTP是一个传输协议,具体制定了数据流如何通过IP网络,并且它是流媒体中最重要的标准。所有的媒体流封装在RTP包。它通常是封装在UDP/IP如下图,并与其他譬如ATM或IPv6协议兼容。

rtp_Location

RTP主要用于实时数据多播(multicast),但它也可用于单播(unicast)(例如,如视频点播单向传输)。

也许我们都有一个疑问,为什么RTP往往是使用UDP,而不是在TCP封装,hanyionet将在以后的文章做一些解释。

 

RTP的特征

RTP提供多媒体应用正确传输所需的信息:时间戳(timestamp),序列编号(sequence numbering),安全(security),内容识别(content identification)和其他机制。这些服务必须在执行应用层(Application level),但它不是RTP所负责。因此,RTP协议只是有助于低层(lower layers)对资源的控制和增加可靠性,流量/拥塞控制(flow/congestion control)与其他机制对于实时信息。

RTP协议传输实时数据包通过网络,这意味着丢失或损坏的数据包将不重发(not retransmitted)。客户端软件要解决这个问题。另一个问题是,如果连接速度(connection speed)比媒体数据传输速率(media data rate)慢,那么传输播放会不佳或者不能播放。

下图为RTP data in an IP packet:

rtp_packet

下图为RTP的Header Format:

rtp_header 

具体说明请查阅:http://en.wikipedia.org/wiki/Real-time_Transport_Protocol

 

RTP是如何工作的?

这其实是我们比较关心的问题。时间戳(timestamp)是实时应用(real-time applications)领域最重要的信息。时间戳将增加,在第一个字节的数据包被传输,并当每一个包被发送它也将增加。接收器(receiver)使用它来重建原始的时间,并且可以使用正确的速率来播放数据。时间戳也可用于同步不同的数据流,不同的时间属性,如音频和视频数据在MPEG中。

另一个重要域是序列号(sequence number)。UDP不提供数据包在一个时序(in timely order),所以有必要使用序列号,是接受的数据包放置传入正确的顺序,用于数据包丢失时的检测。此外,例如,一些视频格式,当一帧分割成几个RTP包,它们都可以有相同的时间戳。

负载类型(payload type)编码/压缩格式(encoding/compression format)是必要的负载识别码(payload identifier)。但是,一个RTP发送者每次传输只可以发送一个有效载荷类型,虽然负载类型(payload type)在传输过程中可能会发生变化,例如,调整网络拥塞。

MTU“最大传输单位”(Maximum Transmission Unit)。也就是通过TCP/IP协议所传输的数据包最大有多少字节,MTU值越大,封包就越大,理论上可增加传送速率,但MTU值又不能设得太大,因为封包太大,传送时出现错误的机会大增。
考虑MTU很重要,不要超过它。因为如果一个RTP包超过MTU,它会被路由器分割,这个过程被称为分裂(fragmentation),如果其中之一丢失了,所有剩余的也将丢失。分裂(fragmentation)也会增加资源的使用。MTU是因网络类型而定,譬如以太网为1500字节。

 

参考资料:
http://www.ietf.org/rfc/rfc1889.txt

2011年2月28日星期一

什么是一顿优质的早餐

前几天很偶然地翻阅了一本杂志《时尚健康女士》2011第一期,有一个关于早餐的专题,觉得还不错,这里做一个非常简单的记录。
什么是一顿优质的早餐,其实很简单:

1.早餐要占全天能量的1/3
从能量供应的角度,早,中,晚餐的合理比例应为,30:40:30,也就是说,早餐的能量摄取应为1/3。其中,碳水化合物最好为50%,蛋白质为15%,脂肪为35%。

2.保证摄取3类以上的食物
谷类,蔬菜和水果,鱼肉,奶类和蛋类。
如果有以上几类中的3类,那么这样的早餐是达标的。

3.落实4种营养搭配原则
其实就是:有干有稀,有荤有素,有粗有细,有菜有肉。

中医专家推荐养生的早餐法则
1.早起不适合吃寒性水果
因为中医的观点,清晨,身体的阳气是和太阳一样逐渐生发的,吃寒性水果会抑制体内阳气生发。大多数水果是寒性的,例如香蕉,西瓜,李子等等。其实可以吃吃中性的苹果,热性的水果例如木瓜其实就很适合做早餐的搭配。
2.早餐的组合中如果有一碗粥,很养生

2011年2月12日星期六

将Qt Application Project改成Qt Library Project

很久没有写一些关于Qt的东西,今天介绍一个小方法将Qt Application Project 改成Qt Library Project。
换句话来说,如果原来使用的是Qt项目,生成exe,后来想要将这个项目生成DLL,那么简单的改变方法如下(在VS2008中):

在project的设置里(没有什么特别的步骤,唯一请注意第三部):

1) 定义一个macro 对于Qt,DLL export,写一个头文件(但是也是可以直接使用Q_DECL_EXPORT,类似和Qt的DLL project自动生成头文件一样。

#ifndef MYGLOBAL_H
#define MYGLOBAL_H 

#include <QtCore/qglobal.h> 

#ifdef MYLIB_LIB
# define MY_EXPORT Q_DECL_EXPORT
#else
# define MY_EXPORT Q_DECL_IMPORT
10 #endif 
11
12 #endif // MYGLOBAL_H 

2) 将Project的Configuration Tpye改成Dynamic Library (.dll)

3) 修改Prprocessor Definitions设定:
MYLIB_LIB
QT_DLL

4) linker-->Ouput File 改成生成.dll

5) 在我们想要export的class加入上面写的头文件
和一般dll export类似,只是我们这里使用的是我们定义的export的macro

1 class MY_EXPORT MainWindow : public QMainWindow 

 

附注
如果只是简单的使用__declspec(dllexport) ,而不是使用Qt的export DLL的macro,如果使用生成的DLL会出现类似这样的错误。
error LNK2001: unresolved external symbol "public: static struct QMetaObject const XXX::staticMetaObject"
非常简单来说,Qt的object比较特殊,不能直接通过常用的__declspec(dllexport)进行export。

2011年2月10日星期四

数字图像处理笔记(2)

继续记录Digital Image Processing一些重要的概念,关于图像解析度,以实用知识为主。

逐行扫描(Progressive scan):每一帧图像由电子束顺序地一行接着一行连续扫描而成,这种扫描方式称为逐行扫描。
隔行扫描(Interlaced scan):每一帧图像通过两场扫描完成则是隔行扫描,两场扫描中,第一场(奇数场)只扫描奇数行,而第二场(偶数场)只扫描偶数行。隔行扫描技术在传送信号带宽不够的情况下起了很大作用,逐行扫描和隔行扫描的显示效果主要区别在稳定性上面,隔行扫描的行间闪烁比较明显,逐行扫描克服了隔行扫描的缺点,画面平滑自然无闪烁。在电视的标准显示模式中,i表示隔行扫描,p表示逐行扫描。[1]

 

有用小常识:
a) 视觉惰性(视觉暂留特性):每秒换帧24次,人会产生连续感。
b) 图像的闪烁感:人在较低频率的光脉冲刺激下,会产生一明一暗的闪烁感,这是有光和无光在亮度感觉上的差别所致。把闪烁的频率提高到临界闪烁频率(45.8Hz)以上,由于视觉惰性的作用就感觉不到闪烁了。电影的帧频为24,其实也写成24p(电影胶片),利用光活门,使每帧画面闪亮两次,达到每秒闪亮48次,超过临界闪烁频率。
c) 场频率:如使用隔行扫描,就会有场频率一说,就是一帧图像分两场传输,常见的60Hz,50Hz对应的帧频率就是30,25。
d) 我们常见的1080i50就是1920×1080像素,每秒50个场的速度交织编码(25帧)[3]。
e) PAL和NTSC
50i(PAL):全名为逐行倒相 (Phase Alternating Line)。每秒25帧,隔行扫描的电视广播格式。[4]
60i(NTSC):属于同时制,每秒60/1.001场。但存在相位容易失真、色彩不太稳定的缺点。NTSC标准的帧幅为每秒30帧。[5]
f) 数字电视,传统的PAL和NTSC陆续被淘汰,取而代之的是数字电视,数字电视其实就是将画面信号经数位化处理后,变成一串数据资料,再经数位调变传送到家。
简单的说,数字电视的成功,主因是视频压缩技术的发展。国际统一的压缩标准是MPEG-2,在传统无线电视台600万赫兹频宽的电视频道中,可传送1080条水平扫描线的高画质电视(HDTV高清晰度电视)。它同时也提供杜比的AC3级高级音响效果。

 

高清的播放分辨率有 3 种:
768i (i 表示隔行扫描)
1080i(i 表示隔行扫描)
1080p(P 表示逐行扫描)

 

HDTV高清晰度电视(High Definition Television)的扫描格式共有 3 种[2]:
1280×720p
1920×1080i
1920×1080p
中国采用的 1920×1080i/50Hz。
全高清分辨率为1920×1080的高清信号。

例如,不做任何压缩:
高清640*480的彩色图像,每秒30帧,则一秒钟的数据量为:
640*480*24*30 = 221.12 M
NTSC视频信号720*480,每秒30帧,则一秒钟的数据量为:
720*480*24*30 = 248.83 M
高清1920x1080的彩色图像,每秒30帧,则一秒钟的数据量为:
1920*1080*24*30 = 1492992000 bit =  1.5 G
-->
必须对视频信号进行编码压缩[2]。

 

注意,我们有可能搞混的是
a)在描述数据传输时的计算如下(In some cases when used to describe data transfer rates bits/bytes are calculated as in the metric system as follows):
1 MB = 1,000,000 bits/bytes
1 kb = 1,000 bits/bytes
1 bit/byte

b)在描述数据储存是的计算如下(In the cases when used to describe data storage bits/bytes are calculated as follows):
1 byte = 8 bits
1 kilobyte (K / Kb) = 2^10 bytes = 1,024 bytes
1 megabyte (M / MB) = 2^20 bytes = 1,048,576 bytes
1 gigabyte (G / GB) = 2^30 bytes = 1,073,741,824 bytes
1 terabyte (T / TB) = 2^40 bytes = 1,099,511,627,776 bytes
1 petabyte (P / PB) = 2^50 bytes = 1,125,899,906,842,624 bytes
1 exabyte (E / EB) = 2^60 bytes = 1,152,921,504,606,846,976 bytes

附注:在数据通信中, 1 kilobit 是 1000 bits。它通常用于测量是在一秒钟两个通信点之间传输的数据量。千比特每秒,通常缩写为Kbps。

 

下一篇笔记将关于,数据冗余,编码压缩。

 

参考资料:
[1] 逐行扫描与隔行扫描: http://baike.baidu.com/view/115294.htm
[2] 数字图像处理(第2版),Rafael C.Gonzalez / Richard E.Woods,电子工业出版社
[3] 高清晰度电视: http://zh.wikipedia.org/zh-cn/高清晰度电视
[4] PAL制式:http://zh.wikipedia.org/zh/PAL制式
[5] NTSC制式:http://zh.wikipedia.org/zh/NTSC制式

2011年2月8日星期二

数字图像处理笔记(1)

最近的一些研究涉及了数字图像处理。这里我准备开一个小小的系列,放入我最近的一些学习的笔记。


Digital Image Processing是一个很有趣的领域。接下来我按照我的喜好,记录一些重要的概念。

我们大概都知道,在计算机中,静态的图像有两种表达形式:
矢量图,vector based image
位图,bit mapped image,(位图里又有灰度图(grap scale image),彩色图(color image))

矢量图,顾名思义,也就是可以用计算机的指令来描述的,图像中的每一的元素都可以使用数学表达式来实现。所有一个矢量图会由很多的数学表达式来进行描述。我们常常使用最简单的visio就可以做矢量图,当然了adobe illustrator是一个做矢量图的利器。
矢量图有很多优点,1.可以进行不失真的缩放,2.可以容易的移动复制,甚至旋转,3.矢量图产生的数据量比较小。
矢量图的一个很明显的缺点是使用场合有所限制,因为很多复杂的图像无法使用数学表达式来描述。

位图,计算机中最广泛使用,其实就是一幅图由很多的像素(也可以说是由像素矩阵)组成的。
每一个像素pixel其实在计算机里就是由一定长度的数字值来表示它的颜色和亮度。如果单位面积内的像素越多,那么分辨率就越高,所显示的图像就会接近于真实物体。
如果图像的深度越高,或是图像的分辨率越高,那么位图的大小就越大。
色彩深度,色彩深度又叫色彩位数,即位图中要用多少个二进制位来表示每个点的颜色,是分辨率的一个重要指标,例如16位(增强色),24位和32位等。
例子:
例如一个图像,RGB三个分量,每个8位,一共就是24位,像素的深度为24,每个像素就是2的24次方就是16777216的一种,其实人是无法分辨这么多颜色的。

位图常用的编码方式有:
RGB,红、绿、蓝三原色的光学强度。
CMYK,用青、品红、黄、黑四种颜料含量来表示一种颜色

常常还有Alpha通道,也就是增加像素的透明度信息。

 

我们常常见到的图像格式有:
BMP(Bitmap Image File or Device Independent Bitmap (DIB) file format or simply a Bitmap)
GIF(Graphics Interchange Format)
PNG(Portable Network Graphics)
JPEG(Joint Photographic Experts Group),附带提一下它是基于Discrete Cosine Transform离散余弦变换,转换到频率空间,JPEG有选择地选择数据来压缩文件,会丢弃一些数据,使用是有损压缩。

参考资料:
http://zh.wikipedia.org/zh-cn/%E5%83%8F%E7%B4%A0
http://zh.wikipedia.org/zh/%E4%BD%8D%E5%9B%BE

http://zh.wikipedia.org/zh/Jpeg
http://zh.wikipedia.org/zh/Bmp
http://zh.wikipedia.org/zh/Png
http://zh.wikipedia.org/zh/GIF

2011年2月2日星期三

年末随笔 -- 我也来谈谈“真正的学习”

前几天,我看了武志红的一篇文章《真正的学习》。看完之后真是非常有感触。
里面谈到了顿悟,模仿学习永远是跟在别人的后面,而顿悟,却永远是崭新的。即便你顿悟到的一个发现可能是无数人都发现的,但对你而言,这是崭新的,而且真的是你自己发现的。

其实我一贯成绩不佳,特别是高中尤其差,高中的时候几乎从来没有完成过作业,我其实非常讨厌做题,做的也非常慢,高中的时候几乎一半的作业要么没有写,要么就是抄的。对于我无法理解的知识,我是无法通过记住题型,或做大量的练习掌握。而且很多知识,如果我不知道有什么用,其实我更本就不想学。高中的物理我是学的极烂的,我永远搞不懂例如那些什么小车啊,上面有小球啊,推来撞去的计算。但是凡是我知道的东西,1是靠慢慢理解它的本质,2是靠悟出来的。但是我掌握的知识,无论是什么时候总是可以信手拈来。这也许就是理解本质的学习,和悟出的知识的好处吧,也许永远不会体现在分数上面。

后来到了德国,遇到了几个很好的教授,他们就是先告诉你这个知识以后有什么用,工业上有什么东西是用了这个技术,先给你一个最直观的概念和描述,然后在从最本质的公式,以及实验推出来这个知识,这就是本质的学习,学的是什么呢,就是学事物的本质。以前读研究生,其实很多精深的知识,是非常难通过“悟”来理解的,然而确是可以通过本质的学习达到真正的掌握。

然而慢慢去理解它的本质,其实远比靠悟出来的知识少了那份成就感。但是理解本质的学习也是真正的学习的一种,上面提到我的高中物理很差,但到了大学物理我继续通过“本质的学习”,我的大学物理就学得很好,其实这是因为,越到高深的知识越需要高层次的学习,也就是需要“理解本质的学习”。我现在号称在读博士,博士不仅需要“理解本质的学习”同时也需要一些“悟出知识”,这样才有可能到达“创造知识”的阶段。悟出知识,其实书创造知识的一个准备阶段,或是可以说是一个训练的方法。

我个人认为的学习的"档次":
模仿学习 << 理解本质的学习 << 悟出知识

我个人认为的进阶:
学透了之后--->“创造知识”

上面说过很多精深的知识很难通过悟来掌握,因为过于“精深”。然而,编程确可以通过“悟”来学习,学习编程语言的过程,其实是一个绝佳的悟的过程,我还是比较愚笨的,以前学指针和类的时候,很是一头雾水,比起其他同学来说,学的非常慢,但是突然有一天,脑子里突然间有一个“啊哈”的感觉,哇,原来如此,顿悟一下,突然间发现编程的世界是如此的广阔,这个广阔的天地是自己发现的,自己会迫不及待得想要在这个自己创造的新天地里施展一番手脚。这就是顿悟的乐趣。也是学习编程的乐趣。顿悟之后,这个知识似乎已经融入自己的血液,有一天有一个朋友问我说,哇,你的面向对象的设计和使用得非常好,看不出来你只有两年编程经验,我的回答是,类的设计和使用的很多要点其实是我自己“悟”出来的,呵呵,这是悟出知识的好处。

 

------ ------ ------ ------

最后祝大家,新年快乐,健康如意。这里没有假期,大年三十还是要上班,呵呵。很想念国内的家人朋友,唉,每逢佳节....今天随手写一些东西吧,用类似微博的方式。

正如工作了才体会工作不易,其实无论工作生活,每个人都有自己的辛酸之处,网上有一句话说的很好,每个人的幸福其实是活在其他人的眼里。

年纪大了,常常也会得到一些生活的感触,如何让自己生活得更快乐一些,其实也就是爱自己的生活,爱关心你的人,爱自己的工作,常常感恩。

问问自己,去年真正学到了什么,其实不是什么所谓的高深的知识,而是简单的四个字,活在当下,去年的博客中我也常常提到这个。如果能够真正的活在当下,听听自己的内心,唤醒真我,这样才可以从自己的心智牢笼里挣脱出来。如同《活在当下》这本书中谈到的,在我的开悟之旅中,我也正在学习不认同自己的头脑,不再把心智的内容看得那么认真了,其实我们的自我感并不依附它而存在。

摘录《活在当下》一段原文:
当下之外一无所有你可曾在当下之外,经验过、做过、思想过、或感觉过任何事吗?你认为你以后会吗?任何事有可能发生或存在当下之外吗?答案不言自明,不是吗?过去不曾发生过什么;它发生在当下。未来不会发生什么;它会发生在当下。你认为的过去,是一个记忆的轨迹,是一个储存在心智里的前任当下。当你记起过去时,你重新启动了一个记忆的轨迹——而且,你现在就在制造轨迹。未来是一个想象的当下,一个心智的投射。当未来到的时候,它就是当下。当你想到未来时,你是在当下想的。过去和未来显然没有它们自己的实相。正如同月亮本身不发光,它只能反射太阳的光一样。过去和未来也一样,只是永恒的现在的光、它的力量、和它实相惨淡的反射而已。它们的实相是向当下“借贷”来的。

2011年1月30日星期日

周末闲聊电影音乐

很久没有聊一下电影和音乐,这都是美好生活的重要组成部分,今天我这个电子工程师很外行的和大家聊聊电影和音乐。

先谈电影,推荐一部电影《爱情与灵药 Love and Other Drugs》,对我来说,这是我最近看到的最好的一部电影,安妮·海瑟薇和杰克·吉伦哈尔主演,两个人配搭十分养眼。故事改编自杰米·雷迪(Jamie Reidy)的一本名为《强卖:一名万艾可销售人员的演变》(Hard Sell: The Evolution of a Viagra Salesman)的畅销书。我个人评4星,为了安妮·海瑟薇的裸戏再加一颗星(5星啦),充满了性感的张力,却不流于色情,补充一下,她的裸体和她的脸蛋一样美丽,每个部位都充满魅力。

正巧的是我有一个朋友也是辉瑞区域销售代表,电影里的描述还是很有真实性的,销售代表的语言,他们对药品的滔滔不绝,优渥的收入,业绩的压力。Jake Gyllenhaal绝对是辉瑞最近最佳销售代表(辉瑞应该和导演进行了很多的磋商),其实这部影片也如同Tom Hanks在《荒岛余生》中给FedEx做的巨大的广告一样,整部影片充斥着辉瑞的雨伞,笔,钥匙圈,各式的药盒,万艾可的T恤,但是这绝对是影片的最好部分之一,非常真实。各种销售的恶斗,看完之后其实并不觉得辉瑞的“邪恶”,反倒是有另外一种亲切感,这就是商业,不,这就是商业“生活”,商场如战场,任何Business都是这样,辉瑞也不例外。这就是“嵌入广告”的极致吧,至于冯小刚之流应该好好学学。

love and other drugs 

回到电影,他们的感情接受了现实的拷问,但是最后我们看到的是真诚的感情!Jamie对患帕金森病的Maggie情圣一般的告白,还真让人有些感动。

情与欲,灵与肉,沉重无比的爱。很深的悲剧色彩,爱情的本质,责任和同情。很多很多可以使人体会的元素。

很多笑点,附带一些美式的轻喜剧元素,很多温情,一些思考,但是又不是太过沉重,美好的结局,这就是我要的一切。

 

 

接下来聊一下音乐。
其实我非常少听粤语歌,今天很偶然地听到了陈奕迅的《陀飞轮》注1,很有感觉。歌词很有深度,画面。它对简单的描述,但是谈到了很多人生,时间。
但是歌里没有对描述的问题进行回答。
答案是什么呢。

Tourbillon

我的答案是《当下的力量》中的一段话,这是我在脑海里立即浮现的答案,也许不是真正的答案:

时间既不宝也不贵,因为它是个幻相。你所谁知的宝贵,不是时间,而是时间之外的那一点:当下。当下才是既宝又贵的。你专注在时间上——过去和未来——的程度越大,你磋跎掉最宝贵的当下的程度就越多。为什么说它是最宝贵的呢?首先,因为它是唯一的。它是存在的全部。永恒的现在,就是你整个生命展现其中的空间,那个如如不动的因素。生命就是当下。过去从来没有一个不是当下的时间,未来也不会有。第二,当下是唯一一个能带你超越有限心智局限的点。它是你唯一的一个通往无时间、无形式的本体界的点。

你的答案是什么呢。

附上歌词:

过去十八岁 没戴表 不过有时间
够我 没有後顾 野性贪玩
霎眼廿七岁 时日无多 方不敢偷惰
宏愿纵未了 奋斗总不太晚
然後突然今秋
望望身边 应该有 已尽有
我的美酒 跑车 相机 金表 也 讲究
直到世间 个个也妒忌 仍不怎麽富有
用我尚有 换我没有 其实已 用尽所拥有
曾付出几多心跳 来换取一堆堆的发票
人值得 命中减少几秒 多买一只表
秒速 捉得紧了 而皮肤竟偷偷松了
为何用到尽了 至知哪样紧要
劳力是 无止境
活着多好 不需要 靠物证
也不以高薪 高职 高级品 搏尊敬 wo~
就算搏到 伯爵那地位 和萧邦的隽永
卖了任性 日拼夜拼 忘掉了为甚麽高兴
曾付出几多心跳 来换取一堆堆的发票
人值得 命中减少几秒 多买一只表
秒速 捉得紧了 而皮肤竟偷偷松了
为何用到尽了 至知哪样紧要
记住那 关於光阴的教训
回头走 天已暗
你献出了十寸 时和分
可有换到十寸金
还剩低几多心跳 人面胀水晶表面对照
连自己 亦都分析不了 得到多与少
也许真的疯了 那个倒影多麽可笑
灵魂若变卖了 上链也没心跳
银或金都不紧要 谁造机芯 一样了
计划了 照做了 得到了 时间却太少 no~
还剩低几多心跳 还在数赶不及了
昂贵是这刻 我觉悟了
在时计里 看破一生 渺渺

注1,来自维基百科:
陀飞轮(法语:Tourbillon)是由法国著名钟表大师宝玑(Abraham Louis Breguet)于1795年发明,是机械钟表机芯中的一个装置。 陀飞轮装置的设计本身是用于怀表之上,因为怀表垂直的放在口袋中,或挂在颈上时,地心引力会影响摆轮摇摆速度,引致出现误差。陀飞轮的原理基本上是把游丝、叉式杠杆和擒纵系统设计在同一轴上运作,陀飞轮在运行时会不断旋转,以减少地心引力所做成的影响。但随着二十世纪手表的兴起,由于手表并非长时间垂直放置,因此陀飞轮装置对手表的作用已经没有怀表那么大,但陀飞轮装置极其复杂,而且由于制作成本及工艺的要求相当高,因此陀飞轮变成了高档手表的代名词。

2011年1月17日星期一

清扫机器人Scooba 230

最近在研究一些"多机器人系统",对机器人又有了很多新的认识和兴趣,接下来我将会记录一下机器人学习的一些笔记,并提供一些有趣的机器人新闻和知识,(具体为robot新知,robot笔记两个分类)。

今天在focus.de看到一则新闻关于清扫机器人,简要的翻译一下。

irobot_230

清扫卫生间通常不是令人喜欢的家务。最近在国际消费类电子产品展览会(International Consumer Electronics Show)上,美国iRobot公司展示了其生产的Scooba 230机器人,它可以用来执行清扫卫生间任务。

这个Scooba 230只有16.5厘米宽,9厘米高,很适合做厕所和浴室中狭小空间内工作。

该机器人应该能够消除高达97百分之的常见细菌,而且并不会重用脏水。今年初就会在美国上市,大约300美元。

原文出处:
http://www.focus.de/digital/multimedia/irobot-scooba-230-roboter-putzt-das-bad_aid_589204.html

2011年1月5日星期三

如何写好文档

最近做项目的时候需要阅读很多文档,并且需要写一些文档,今天总结一些关于如何写好的文档的个人经验,和大家分享。

1. 文档要服务于受众
请努力做到,使读者读文档时候不会遇到任何困难,例如把该解释的定义解释清楚。如果可以的话,写之前请分析一下读者和要表达的内容。

2. 不要写那些你自己也没理解的东西
我们读一些文档的时候常常感到一头雾水,其实是因为这个文档的作者其实自己也并不是完全搞明白这个东西,文档上的描述其实只是东拼西凑的资料。

3. 使用好的规范,好的格式,你的文档就成功了一半
例如当我们对于一个技术进行描述的时候,我们必须让读者不需要前后翻页,就可以跟上我们的描述。保持格式的一致性很重要。其实不仅需要写规范,而且还需要使用正确的语法,消除错别字。当然了,写中文比较不容易出现这些问题。但是写英文文档就会常常出现这种问题,这就需要认真对待。

4. 使用短句,显示精华
这只是文档,所以不要卖弄文采。长的复杂的句子,并不是知识性文章的标志。

5. 使用常见的词
这样会让读者更容易进入“状态”。还要注意做到统一术语。

6. 只写需要的,并尽可能少写
这其实就是我德国同事常常说的:“so viel wie noetig,so wenig wie moeglich”。这样会让文档的读者尊敬你,因为你让他们节约了时间。