Archive for September, 2006

2006年6月大学英语四、六级考试查分方法公布

Friday, September 1st, 2006

既然Title 里都有个 Cet 就不能不放 CET 的消息了。。。。。。 :)
各位考生:

2006年6月大学英语四、六级考试及大学日语、俄语、德语、法语四级考试的考试成绩将于2006年9月1日上午9:00正式发布,查分方式如下:
免费查分网址:
cet.etang.com
收费标准:免费

收费声讯查分电话:
16839946 (全国统一号)
收费标准:每分钟1元

收费短信查分方式:
中国移动手机用户:发送准考证号到335546
中国联通手机用户:发送准考证号到935546
小灵通(中国网通)用户:发送准考证号到1935546
小灵通(中国电信)用户:发送准考证号到985546
收费标准:每次查询1.5元

收费短信查分预定方法:
中国移动手机用户:发送0到335546
中国联通手机用户:发送0到935546
小灵通(中国网通) 用户:发送0到1935546
小灵通(中国电信) 用户:发送0到985546
收费标准: 每次查询全部预订资费共计1.5元

全国大学英语四、六级考试委员会
2006.8.28
[转自http://www.pigso.net/]

頁面多個swf呼叫ExternalInterface問題

Friday, September 1st, 2006

http://kyle.jolin.info/tt/rserver.?mode=tb&sl=399
一直在做页面里一个 和 js通信,还没有试过多个的,偶然看到这篇文章就自己收藏一下,以后用得到时就不用再找了。

What’s New in Python 2.5

Friday, September 1st, 2006

1.1. 新的,改进的及不再赞成使用的模块
象以前一样, 标准库变得更强更健壮. 这里列出了大部分值得注意的变化, 按模块名字母序排列. 请参考源代码树中的 Misc/NEWS 文件以了解更完整的变化列表, 或者通过 SVN 日志了解所有的细节.

gc 模块新增了一个 get_count() 函数. 它返回一个 3-元素 tuple: 内容是当前三个 GC 生成器的垃圾收集数目. 这是垃圾收集器的统计信息,当这个数值到达一个指定值, 就会执行一个清扫动作.原有的 gc.collect() 函数现在接受一个可选的 生成器 参数 ( 0, 1, 或 2 )以指定由哪个 生成器 进行收集.
heapq 模块中的 nsmallest() 和 nlargest() 函数现在支持一个新的关键字参数以提供类似 min()/max() 和 sort() 的功能. 这里有一个例子:

      >>> import heapq
      >>> L = ["short", 'medium', 'longest', 'longer still']
      >>> heapq.nsmallest(2, L)  # Return two lowest elements, lexicographically
      ['longer still', 'longest']
      >>> heapq.nsmallest(2, L, key=len)   # Return two shortest elements
      ['short', 'medium']

      (贡献者: Raymond Hettinger .)
itertools.islice() 函数现在接受 None 作为 start 和 step 参数. 这使得它与 slice 对象更兼容. 你现在能够象下面这样写代码了.:
s = slice(5) # 创建一个 slice 对象 itertools.islice(iterable, s.start, s.stop, s.step) (贡献者: Raymond Hettinger .)
operator 模块的 itemgetter() 和 attrgetter() 函数现在支持多个域了. 类似 operator.attrgetter(’a', ‘b’) 会返回一个拥有 a 和 b 属性的函数经.结合这个新特性及 sort() 方法的 key 参数,你能够很容易的使用多个域对一个列表进行排序.

os 模块有了很多变化. stat_float_times 变量的默认值变成了 true, 这意味着 os.stat() 将以浮点数的格式返回时间值.(这并不是说 os.stat() 就一定返回带有小数点的时间数:因为不是所有的平台支持这样的精确度.)

增加了os.SEEK_SET, os.SEEK_CUR, 和 os.SEEK_END 常量; 这些都是 os.lseek() 函数的参数. 用于 locking 的两个新的常量是 os.O_SHLOCK 和 os.O_EXLOCK.
增加了两个新函数: wait3() 和 wait4(). 它们的行为类似 waitpid() 函数: 等待一个子进程退出并返回一个元素为进程的 ID 及 退出状态的 tuple.不同之处在于 wait3() 和 wait4() 返回更多的信息. wait3() 不接受进程 ID 参数, 它等待任何子进程退出并返回一个 3-元素(进程id,退出状态,资源使用)的tuple. 类似 resource.getrusage() 函数的返回值. wait4(pid) 接受一个进程 ID 作为参数. (XXX 贡献.) 在FreeBSD上, os.stat() 函数现在返回精确到十亿分之一秒的时间, 并且返回的对象现在拥有 st_gen 和 st_birthtime 属性. 只要平台支持,st_flags 成员也是可用的.

2.0 以来就不再推荐使用的陈旧的 regex 和 regsub 模块, 终于从标准库中删除了. 其它删除的模块还有: statcache, tzparse, whrandom.
以前用来包含那些类似 dircmp 和 ni 等古老模块lib-old 目录,也被删除. 除非你的代码显式的添加了这个目录到 sys.path, lib-old 不再位于默认 sys.path 内.这应该不支影响到你的代码.
socket 模块现在在 上 支持 AF_NETLINK 了, 感谢 Philippe Biondi 的patch. Netlink sockets 是 平台上的用于用户空间进程与内核的通信的专有机制. http://www.linuxjournal.com/article/7356 是一篇它的介绍文章. 在 代码中, netlink addresses 被表示一个由两个整数组成的 tuple(pid, group_mask).

getfamily(), gettype(), 和 getproto() 方法用来得到 Socket对象的 family, type, 和 protocol 值.
新模块: spwd 提供了访问 shadow 口令库的一系列函数(在支持的平台上).
tarfile 模块中的 TarFile 类现在有了一个 extractall() 方法以释放出 tar 包中所有的文件到当前目录.当然你也可以指定一个不同的目标目录, 及指定解包哪些特定文件.

一个 tarfile 的压缩格式可以通过使用模式 ‘r|*’ 自动检测. (Lars Gustäbel 贡献.)
unicodedata 模块做了更新,现在使用 4.1.0 版本的 Unicode 字符数据库了. 某些平台需要版本 3.2.0, 因此可以用 unicodedata.db_3_2_0 使用这个老的版本.
xmlrpclib 模块现在支持XML-RPC 日期类型返回datetime对象. 需要提供 use_datetime=True 参数给loads()函数或Unmarshaller类以允许这个特性.

1.1.1. 13.1 ctypes 包
ctypes 包的作者是 Thomas Heller, 这个包被加入到标准库中. ctypes 使你能够调用共享库或DLL中的任意函数.

将来发行 2.5(正式版或BETA版?)时 , 我会添加一个简短的关于如何使用这个模块的介绍.

1.1.2. 13.2 ElementTree 包
用于处理 XML的 ElementTree 库(作者:Fredrik Lundh )的子集被添加到标准库中,名字为 xml.etree. 可用的模块有 ElementTree, ElementPath, 和 ElementInclude (ElementTree版本 1.2.6).

将来发行 2.5(正式版或BETA版?)时 , 我会添加一个简短的关于如何使用这个模块的介绍(约一页长). 完整的 ElementTree 文档在http://effbot.org/zone/element-index.htm.

1.1.3. 13.3 hashlib 包
添加了一个新的 hashlib 模块以替换掉 md5 和 sha 模块. hashlib 添加了更多的安全 hashes (SHA-224, SHA-256, SHA-384, and SHA-512)支持. 只要可能,这个模块就会使用 OpenSSL 进行快速的平台优化的算法实现.

旧的 md5 和 sha 模块仍然以 hashlib 封装器的形式存在,以提供向后兼容性.新模块的接口非常接近旧模块,但不是一模一样.最大的不同在于创建新哈希对象的构造函数 的命名不同.

# Old versions h = md5.md5() h = md5.new()

# New version h = hashlib.md5()

# Old versions h = sha.sha() h = sha.new()

# New version h = hashlib.sha1()

# Hash that weren’t previously available h = hashlib.sha224() h = hashlib.sha256() h = hashlib.sha384() h = hashlib.sha512()

# Alternative form h = hashlib.new(’md5′) # Provide algorithm as a string

一旦创建了一个哈希对象, 它的方法就和以前相同: update(string) hashes指定的字符串到当前的 digest 状态, digest() 和 hexdigest() 以一个二进制字符串或16进制字符串的形式返回 digest 值, copy() 返回一个同样digest 状态的新的哈希对象.

贡献者: Gregory P. SmithThis

1.1.4. 13.4 sqlite3 包
pysqlite 模块(http://www.pysqlite.org), 一个嵌入式数据库 SQLite 的封装器, 被加入到标准库中, 包的名字是 sqlite3. SQLite 是一个 C 库,在不需要一个独立服务器进程的情况下实现了一个支持 SQL的全功能数据库. 它将数据保存为一个单一的磁盘文件.pysqlite 由 Gerhard Häring 完成, 提供了一个 兼容 DB-API 2.0 的SQL 接口.这意味着你可以用 SQLite 来书写你的应用程序的第一个版本, 在必要时将数据库切换到一个类似postgreSQL或Oracle的大的数据库, 这种切换将是相当的轻松.

如果你是自己编译 , 要注意源码树中并不包含 SQLite 代码, 而只有封装模块. 你必须在编译 之前安装 SQLite 库和头文件, 之后 build 进程才会编译这个模块.

将来发行 2.5(正式版或BETA版?)时 , 我会添加一个简短的关于如何使用这个模块的介绍.

转至http://www.woodpecker.org.cn

模型-视图-控制器

Friday, September 1st, 2006

1. 模型-视图-控制器
ModelViewController 简称为 MVC

2. 简介
本页介绍 MVC (ModelViewController) 模式并演示其在中的实现方法

http://c2.com/cgi/wiki?ModelViewController 可以了解更多关于MVC的信息, 你也可以察看MVC的一种演化模式 ModelViewPresenter

3. 原理
(原文出处 http://mail.python.org/pipermail/python-list/2006-January/319314.html by has)

MVC模式关注于内容的分离。

Model(模型)负责管理程序中的数据(私有数据和客户数据)。View/Controller(视图/控制器)负责为外界提供与程序中的客户数据进行交互的手段。

模型提供了内部接口(API),允许程序的其他部分与之交互。模型/控制器提供外部接口(GUI/CLI/ form/high-level IPC/等等),允许程序外部的世界与程序进行交互。

模型负责保持数据的完整性,因为数据一旦被破坏,所有的东西就 game over 了。模型/控制器负责保持UI的完整性, 确保所有的文字视图显示的都是最新的数据,使不适用于当前焦点的菜单失效,等等。

模型不包含视图/控制器代码;没有GUI窗口类,没有对话框布置代码,不接受用户输入。视图/控制器不包含模型代码;没有URLs验证和SQL查询代码,也不包含数据原始状态: 窗口中的任何数据仅仅是为显示目的而存在,而且也仅仅是模型中数据的真实反映。

如何验证真正的MVC设计呢?如果程序不存在视图/控制器部分,它也应该具有完整的功能。当然,这种情况下外部世界与它进行交互会存在困难,但是 只要知道适当的模型API,程序应该能够正常的保持和操作数据。

为什么能够达到这种效果?最简单的答案:都是因为模型与视图/控制器层之间的弱耦合关系。但是这并不是它的全部内容。MVC模式的关键是 这些连接的走向:所有的指令都是从视图/控制器指向模型的。模型从不告诉视图/控制器去做什么。

为什么呢?因为在MVC中,允许视图/控制器对模型有一些了解(特别是模型的API),但是不允许模型了解视图/控制器的任何情况。

为什么呢?因为MVC就是要建立一个内容上完整分离的结构。

为什么呢?是为了防止无法控制程序的复杂性,导致你这位程序开发者精疲力尽。程序越大,其部件数量越多。这些部件之间的连接越多,开发人员就越难以控制/扩展/替换各个部件,甚至于无法搞清整个系统如何工作。问问你自己:当你看到程序结构图时,你愿意看到一颗树还是猫爪印?MVC模式拒绝回环连接(B可以连接A,但A不能连接B。在这里,A是模型,B是视图/控制器),从而避免了后者的产生。

另外,如果你够聪明,你会意识到刚才描述的单向约束中有一个问题:在模型根本不知道视图/控制器的情况下,如何通知视图/控制器其用户数据的变化呢?不要担心,这里有一个解决方案,虽然刚开始看起来有一些绕圈子,但实际上它相当的简洁,我们待会儿会讲到它。

在实际项目中,视图/控制器对象会通过模型的API,1. 让模型做一些事情(执行命令),2. 让模型给它一些东西(返回数据)。视图/控制器层向模型层发出指令并从模型层中获取信息。

例如一个 MyCoolListControl 类,应该在需要时能够从下层获取所需的数据。对于list widget的情况,一般意味着询问有多少个值,然后返回每一个值,因为这是完成这种操作最简单最宽松的方式,同时将耦合保持到最低限度。而如果 widget 想向用户展示按照字母排序的结果,那就是它自己的工作,当然要它自己负责完成。

现在,最后一个迷题(也就是我们之前提到的): 在基于MVC的系统中如何保持UI的显示同步于模型的状态呢?

这就是问题所在:很多的视图对象都是状态性的,比如 checkbox 可能处于选择或者未选择状态,文字框可能包含一些可以编辑的文字。但是,MVC规定所有的用户数据保存在模型层中,所以其他层中的为了显示目的而存在的任何数据(checkbox的状态,文字框中的当前文字)必须是模型数据的辅助副本。但如果模型状态改变了,视图中的副本就不再准确而应该被刷新。

但是如何操作呢?MVC模式禁止模型向视图层发出相关信息的最新副本,甚至不允许模型向视图发出消息,表明其状态的变化。

是的,几乎就是这样。Ok,不允许模型层与其他层直接对话,因为这就要求它知道其他层的信息,而且MVC的规定也不允许这样做。但是,如果森林中的一颗树倒下了,而没有人听到,那么它发出声音了吗?

答案就是建立一套通告系统,为模型层提供一个空间,让它可以发出通告,说它已经完成了一些有趣的事情。其他层可以向通告系统发出监听器,监听它们所感兴趣的的通告。模型层根本不需要知道谁在监听(甚至是否有人在监听);它仅仅发出通告,然后就把它抛在了脑后。如果有人听到了这个通告,并且想随之做一些事情 - 比如向模型询问一些新的数据以便更新显示 - 这样就搞定了。模型只是将它所发出的通告列表作为它的API定义的一部分;其他人想拿这个知识做什么事的话,随便。

MVC is preserved,and everyone is happy. 你的应用程序框架可能已经提供了内置的通告系统,你也可以自己写一个(参考 ObserverPattern)。

4. 示例代码
(originally posted by Brian Kelly at http://www.techietwo.com/detail-6332577.html)

Toggle line numbers
   1 import wx
   2
   3 # an observable calls callback functions when the data has
   4 # changed
   5 #o = Observable()
   6 #def func(data):
   7 # print "hello", data
   8 #o.addCallback(func)
   9 #o.set(1)
  10 # –| "hello", 1
  11
  12 Observable:
  13   def __init__(self, initialValue=None):
  14     self.data = initialValue
  15     self.callbacks = {}
  16
  17   def addCallback(self, func):
  18     self.callbacks[func] = 1
  19
  20   def delCallback(self, func):
  21     del self.callback[func]
  22
  23   def _docallbacks(self):
  24     for func in self.callbacks:
  25       func(self.data)
  26
  27   def set(self, data):
  28     self.data = data
  29     self._docallbacks()
  30
  31   def get(self):
  32     return self.data
  33
  34   def unset(self):
  35     self.data = None
  36
  37 Model:
  38   def __init__(self):
  39     self.myMoney = Observable(0)
  40
  41   def addMoney(self, value):
  42     self.myMoney.set(self.myMoney.get() + value)
  43
  44   def removeMoney(self, value):
  45     self.myMoney.set(self.myMoney.get() - value)
  46
  47
  48 View(wx.Frame):
  49   def __init__(self, parent):
  50     wx.Frame.__init__(self, parent, -1, "Main View")
  51     sizer = wx.BoxSizer(wx.VERTICAL)
  52     text = wx.StaticText(self, -1, "My Money")
  53     ctrl = wx.TextCtrl(self, -1, "")
  54     sizer.Add(text, 0, wx.EXPAND|wx.ALL)
  55     sizer.Add(ctrl, 0, wx.EXPAND|wx.ALL)
  56     self.moneyCtrl = ctrl
  57     ctrl.SetEditable(False)
  58     self.SetSizer(sizer)
  59     self.moneyCtrl = ctrl
  60
  61   def SetMoney(self, money):
  62     self.moneyCtrl.SetValue(str(money))
  63
  64 ChangerWidget(wx.Frame):
  65   def __init__(self, parent):
  66     wx.Frame.__init__(self, parent, -1, "Main View")
  67     sizer = wx.BoxSizer(wx.VERTICAL)
  68     self.add = wx.Button(self, -1, "Add Money")
  69     self.remove = wx.Button(self, -1, "Remove Money")
  70     sizer.Add(self.add, 0, wx.EXPAND|wx.ALL)
  71     sizer.Add(self.remove, 0, wx.EXPAND|wx.ALL)
  72     self.SetSizer(sizer)
  73
  74 Controller:
  75   def __init__(self, app):
  76     self.model = Model()
  77     self.view1 = View(None)
  78     self.view2 = ChangerWidget(self.view1)
  79     self.MoneyChanged(self.model.myMoney.get())
  80     self.view2.add.Bind(wx.EVT_BUTTON, self.AddMoney)
  81     self.view2.remove.Bind(wx.EVT_BUTTON, self.RemoveMoney)
  82
  83     self.model.myMoney.addCallback(self.MoneyChanged)
  84     self.view1.Show()
  85     self.view2.Show()
  86
  87   def AddMoney(self, evt):
  88     self.model.addMoney(10)
  89
  90   def RemoveMoney(self, evt):
  91     self.model.removeMoney(10)
  92
  93   def MoneyChanged(self, money):
  94     self.view1.SetMoney(money)
  95
  96
  97 app = wx.PySimpleApp()
  98 Controller(app)
  99 app.MainLoop()

转至http://wiki.woodpecker.org.cn

James Blunt

Friday, September 1st, 2006

实在太喜欢他的歌了,今天查了一下他的资料,原来出身这么……

在2005年的英国乐坛里,出现了一位充满传奇性的音乐人,和一张专辑及一首单曲。这位今年在英国乐坛,让大家惊艳不已的歌手就是上尉诗人 James Blunt,和他的英国冠军专辑《Back to Bedlam》及冠军单曲 You are Beautiful。截至目前为止 James Blunt 的专辑已经蝉连英国金榜专辑榜冠军5周,同时也在单曲上蝉连4周冠军,因此更创下专辑及单曲双榜连续冠军4周的纪录。在如此辉煌的音乐成绩之下,这个低调的歌手,却有着如小说里人物般的传奇色彩。

James Blunt 出生在军人家庭,从英国布里斯托大学毕业后,在推出这张经典专辑之前,他加入军队并一路升到上尉,担任过英国女王亲卫队,也曾被派驻到德国科索沃目睹血腥内战,并成为第一个派遣到普利斯提纳的英国军官,领导三万人的和平部队。在白天,James Blunt 是带领3万人和平部队的军官,但每到夜里,他总是会爬上他的坦克车,在宁静的夜空下,拿着吉他写下这张专辑里的歌曲(转)。

专辑本地在线试听:

James Blunt - You’re Beautiful [MV]
- Back To Bedlam

My life is brilliant
My life is brilliant
My love is pure
I saw an angel
Of that I’m sure
She smiled at me on the subway
She was with another man
But I won’t lose no sleep on that
‘Cause I’ve got a plan

You’re beautiful. You’re beautiful
You’re beautiful, it’s true
I saw your face in a crowded place
And I don’t know what to do
cos ill never be with you

Yeah, she caught my eye
As we walked on by
She could see from my face that I was
Fucking high
And I don’t think that I’ll see her again
But we shared a moment that will last till the end

You’re beautiful. You’re beautiful
you’re beautiful, it’s true
I saw your face in a crowded place
And I don’t know what to do
cos ill never be with you

la la la la, la la la la, la la la la laaaaaa

You’re beautiful. You’re beautiful
You’re beautiful, it’s true
There must be an angel with a smile on her face
When she thought up that I should be with you
But it’s time to face the truth
I will never be with you

James Blunt - High

Beautiful dawn - lights up the shore for me
There is nothing else in the world
I’d rather wake up and see (with you)
Beautiful dawn - I’m just chasing time again
Thought I *ld die a lonely man, in endless night
But now I’m high; running wild among all the stars above
Sometimes it’s hard to believe you remember me

Beautiful dawn - melt with the stars again
Do you remember the day when my journey began
Will you remember the end (of time)
Beautiful dawn - You’re just blowing my mind again
High
running wild among all the stars above
Sometimes it’s hard to believe you remember me

Will you be my shoulder when I’m grey and older
Promise me tomorrow starts with you
Getting high
running wild among all the stars above
Sometimes
it’s hard to believe you remember me
Thought I was born to endless night, until you shine
High
running wild among all the stars above
Sometimes it’s hard to believe you remember me

简介(转)

James Blunt 的首张专辑《Back to Bedlam》,早在2004年时便已发行。不做任何公开宣传行程的他,一个人带着一把吉他,在英国各地的小酒馆一站一站,慢慢地唱出他对生命的体认,也渐渐地打开知名度,在专辑发行将近一年后的今天,专辑里的一首歌 You are Beautiful,就像施了魔法般地,在英国的大街小巷传唱开来,也让 James Blunt 的单曲及专辑纷纷爬上英国金榜销售的冠军位置。

除了音乐的感染力之外,搭配长卖单曲 You are Beautiful 的音乐录影带更是另人无法忘怀。在音乐录影带里,没有花俏的布景,没有大量电脑特效的后制,James Blunt 一个人站在靠海的悬崖边,一句一句真切地唱出邂逅刹那的美丽及感动。唱着唱着,James Blunt 便一件件地退去身上的衣服,及随身携带物品,包括菸盒、鞋子、手表…,就像以最真切最诚实地告白一般,唱出男女邂逅时的感动。当歌曲快结束时,随着歌曲最后一句歌词“我知我不可能再拥有你”,James Blunt 便一跃而下向悬崖边里的海面跳去。

这支音乐录影带在英国引起高度讨论,有人认为他跳下悬崖的原因,是无法拥有心仪女生而有如此表现,但也有人认为这是他对战争的无言抗议,暗指他在任职军官时,被派至科索沃目睹当地血腥内战的伤痛回忆。而歌词中美丽的你指的就是科索沃,在经过内战摧残后,再也不见这块美丽的土地,以一句”我知我不可能再拥有你”来暗指科索沃这块分裂的土地再也难回到之前的美丽。

以单曲 You are Beautiful 连续蝉连英国单曲榜4周冠军,同时以专辑《Back to Bedlam》蝉连英国专辑榜5周冠军的 James Blunt,在英国时间8/14傍晚7点,在BBC电台公布的英国金榜单曲榜里,将面临了来自同门师兄 Daniel Powter 及一样是同门的流行乐坛小天皇Craig David 的挑战,已经蝉连单曲榜4周冠军的 James Blunt,将面临同门师兄在单曲榜上的挑战。全英乐迷都高度关切,这首由 James Blunt 带来,传唱全英的单曲 You are Beautiful,是否可以再次蝉连第五周的冠军,但是已有两年没有新作品的流行乐坛小天皇 Craig David,来势汹汹地在本周推出新专辑首打单曲 All the Way,即将在今天晚上公布的英国金榜可说是备受瞩目。James Blunt 的专辑《Back to Bedlam》将暂定于8/23在台发行。

“我的人生经历是我的创作泉源。”当 James Blunt 在被问到自己的创作灵感时,他会给你这样的答覆,这或许是每一位创作型的歌手在被问到同样问题时千篇一律的标准答案,但是,当你知道他的成长背景,你就会知道他为什么会想把人生经历写成一首首的歌,因为,他有个不寻常的人生,一个让他不得不动笔把自己的所见所闻用歌声抒发的人生,他的歌声让我们听见了60年代叙事民谣歌手用歌声记录自己对周遭事物的感触所产生的感动,一种未过度渲染浪漫的心情分享。

追溯 James Blunt 的血缘,你会发现他的家族血脉相承,拥有近百年投身军旅的传统,大学毕业后,在老爸的逼迫下,他加入军队,他最后升到上尉,并成为第一个派遣到科索沃的英国军官,领导三万人的和平部队。2002年,Blunt毅然放弃军旅生涯,决定当个歌手,2003年9月,他远赴洛杉矶,与Tom Rothrock [*Beck、Elliott Smith、Badly Drawn Boy]、Linda Perry [*Gwen Stefani]展开专辑的录制,他白天录歌,晚上就跑到酒吧,与别人分享自己的人生故事,后来,这些故事就成了一首首具有宿命色彩的歌,像专辑里的结束曲 "No Bravery" ,是他在99年在科索沃的军营中,亲眼目睹血淋淋的科索沃内战后,在寂静的午夜时分所写下的歌。

Blunt 的歌声就跟他的钢琴指法一样沉重,感慨的纪录这历史的伤痛,虽然,Blunt的歌不全然都这样的严肃,但却都是相当扣人心弦的,像是纪录着难以忘情、怦然心动的情感小品“You’re Beautiful”就把爱情世界里的偶然、巧合与失落表达得十分动人,他的经纪人(同时也是Elton John的经纪人)称赞这首歌是21世纪版的“Your Song”,仔细听着整张专辑,还真会让人怀念起 Elton John 刚出道时的乐风,制作人 Tom Rothrock 则认为 Blunt 就像是英国乐界足以与 Beck、Elliott Smith 相抗衡的创作型歌手。James Blunt 不想花太多时间解释每首歌的故事,只希望听者能从他的歌曲中找到人生旅程中的某些段落所会拥有的感觉,一份感同身受的奇妙感觉。

评论(摘)

“You’re Beautiful”属于多听几遍才会让你产生感觉的歌曲.歌者倾诉,听者思考.在循序渐进中,慢慢体会歌曲所表达的意思.你是美丽的,你是坚强的,还有什么你需要的?

清柔中~蕴藏着坚韧,顶~而赏之~

非常喜欢他纤细而高亢的嗓音,独特,令人回味,在《You’re Beautiful》里你可以细细体会,淡淡的吉他伴奏,苍白的声音演绎,让你的心灵为那份极度珍惜却无法得到的感情而揪动,wisemen(智者)和Tears and rain也是相当不错,他的音乐里,没有嘈杂,只有让你感动的音符和内涵

伦敦地铁爆炸案后隔一天我认识这个声音!英雄是时势造出来的吗?还是你创造出的一根漂流木?在沉沦的时刻足以挽救你,像他歌里的天使,在地铁站凝望你,保护你的心。我要推荐这张唱片,聆听的感觉是一场奇妙的经验

James Blunt 他的歌声 仿佛有一种魔力 勾起我们淡淡的感伤 若有似无的愁怅绝赞的专辑 5颗星星满分推荐

早就过了胡乱忧伤掉眼泪的年纪了,但是 James Blunt 就是有那个办法让你掉泪。可以简单的就用他的声音打动你,光是听到第一句:“My life is brilliant”应该就可以让很多人痛哭流涕了吧!第一次听到他的歌 You’re beautiful,出现了一种莫名的感伤,从他的声音,从他的旋律,从他表达的方式,就是这么简单。

就像许多善于结合文字,音符与歌声的前辈一样,James Blunt在指尖弹着滑动着拨弄着生活中,许多过了就忘但捕捉下来就很深刻的火光。词藻不见得华丽,但字里行间都是暖呼呼的真挚,佐以高明的写歌技巧,以及自然的嗓音,敲着跟他有着相近频率的心。

单凭那以钢琴伴奏、颇有经典气味的压轴曲 No Bravery,便已说明当下的 James Blunt 现象,未来还很多可期待。

简单的不可思议 却又澎湃的感动不已 名制作人 Linda Perry 已经帮乐坛挖到一个下届葛莱美得主绝对的经典Debut专辑!

浓郁的情感是JAMES BLUNT最吸引人的地方,偶而一些声音沙哑的处理完全不修饰也感觉得出他成熟的魅力,2005年英国歌坛最佳新进男歌手可以说是非JAMES BLUNT莫属。

他就如同我们这些小人物,在这烦恼爆炸的空间里,带着小小的感动与自我排解的幽默过生活,而这些可贵的元素都放在他的音乐里。

不同的日子里,我们都有不同的体验。不安于室,让我们沉静地体认,音乐带给我们在生活上,甚至是超乎生活上的感动。在这张专辑里,要挑出一首你最爱的一首歌,是不可能的,因为在这张专辑里,所有的歌曲都是一种可能,都是一种体认。

坐在公司的视听间里聆听James Blunt,整个人被他的声音环绕着,心就像被涟漪般一圈圈扩散的振幅给震碎了一层角质,渐渐露出柔软的本质,James的音乐无形中给予了现代人一种珍贵的音乐疗效。

Flash Player 9 for Linux Beta就要发布了!

Friday, September 1st, 2006

Penguin.SWF网站最新消息,Adobe的FlashPlayer 团队打算在2007年发布最终版本的 Player 9 for 前,先发布一个 9 for Beta版,以便寻找出更多的BUG,发布更加完美的版FlashPlayer 9,该消息还特别解释了为什么Adobe没有应大家要求先发布一个alpha版,这是因为当前的版FlashPlayer 9还有一些已知的bug没有修复,而如果未修复前发布alpha版,那么FlashPlayer9 团队就会重复接到大量的这些已知bug的报告,而花大量的时间处理这些重复的报告对于FlashPlayer9 团队的工作是很不利的,所以才没有发布alpha版本。消息的最后,还特别强调Beta版本就要来了,大家请密切关注这个网站

有漏洞的Web 2.0

Friday, September 1st, 2006

作者:英国《金融时报》克里斯•纳托尔(Chris Nuttall)
2006年8月14日 星期一

在病毒编写者与他们的对手——互联网安全公司的较量中, 2.0光辉新世界的黑暗面正在暴露。

这种融合了互联、共享和实时更新的网页技术,被冠以“第二代互联网”的称号,然而,它也成为企图向这个混合体注入恶意代码的入侵者的沃土。

微软一度是最主要的攻击对象,其文字处理程序、浏览器和操作系统中的薄弱环节被利用,但随着入侵者把注意力从电脑桌面程序转向应用程序,谷歌(Google)、雅虎(Yahoo)和MySpace现在也同样可能受到攻击。

浏览器: 2.0主角

2.0环境,许多活动在浏览器内进行。举例来说,谷歌用户可在网页填写电子数据表、进行文字处理,而其日历和电子邮件收件箱的更新方式,与使用基于硬盘的微软Office套装软件相同。

区别在于,信息被不断嵌入网页,这些网页从谷歌服务器传送到用户浏览器,最常用的浏览器是Internet Explorer或火狐(Firefox)。

2.0也代表社会软件(social software),包括维基(wiki)、博客()、简易供稿(RSS)新闻源、标签(tagging)和社区站点。它是一个宽容的社区,用户可以自由地相互借用、添加并混合数据。

尽管这些技术和工具会带来新的自由,但也成为病毒编写者和个人身份信息盗窃者的“新天地”。

2.0对恶意软件(malware)开发者的吸引力,部分在于运行 2.0的后台程序的复杂性。Ajax(异步和XML)是一系列用来使网页更具互动性的技术的总称。运用这些技术,网页与服务器可自动交换少量数据,以刷新部分网页(如不断变化的股价或比分),让网页“活”起来。

“编写代码约有100种不同的方法,火狐和Internet Explorer各有50种,”BreakingPoint Systems的安全研究主管HD•摩尔(HD Moore)称。“问题在于,很难区分善意与恶意代码。”

雅虎遇袭

6月份,一名病毒编写者用雅虎的电邮服务发出了一封隐含某种代码的邮件,使雅虎的网页邮件服务遭到“恶意代码”的冲击。由于雅虎允许网页执行,因此其邮件系统很容易受到Yamanner蠕虫病毒的攻击。

任何打开邮件的人都激活了脚本,这些脚本向用户的地址簿发出请求,然后将蠕虫病毒发给地址簿中的每个人,其目的也许是为散布垃圾邮件而收集邮件地址。

“如果没有Ajax,Yamanner蠕虫病毒就不可能发生,”SPI Dynamics安全研究员比利•霍夫曼(Billy Hoffman)称。

“令人害怕的是,在雅虎看来,没有什么危险的事发生,用户只不过创建并发送了一封邮件。浏览器也一样,发现了某个脚本,就运行了它,而最终用户对此也无能为力。”

上月,谷歌RSS阅读器也发现了类似的缺陷。谷歌采用了技术,以便用户能够为阅读器添加新闻源,而一位安全专家能够向新闻源地址添加数据,从而使浏览器连向另一个网站。如果带有恶意目的,所连向的可能是欺骗用户吐露个人信息的网络钓鱼(phishing)网站。

跨站脚本漏洞

网络安全业内将 2.0网站内的这些编码缺陷,称为跨站脚本(XSS)或跨站脚本漏洞。

近期利用跨站脚本漏洞的最著名事件,是去年10月份MySpace网站遭到的相对良性攻击。MySpace是如今最大的社交网站,用户人数达5400万。

19 岁的洛杉矶软件开发员“Samy”编写了一段蠕虫程序,令他获得了逾100万网上“好友”,直至MySpace使该程序失效。他在自己的MySpace简介里,置入一段代码,这样每个查看简介的人会在不知不觉中执行这段代码。这段代码把他列为该用户的好友之一,而在通常情况下,列为好友需要得到该用户的同意,但他写的蠕虫使用Ajax技术,使之在后台批准他的请求。

接着,该蠕虫会打开该用户自己的简介,把恶意代码复制进去,并把Samy添加到那里的任何英雄列表中,还附上一句话:“但Samy是我最敬佩的英雄”。同样,任何查看该用户简介的人也会被感染,这样Samy的名声和“人气”迅速扩大到100万MySpace会员。

此时,该网站的管理员才发觉大量活动,被迫将MySpace关闭数小时,以清除该蠕虫病毒。

“在后台袭击MySpace、谷歌和雅虎的是跨站脚本,”计算机安全公司iSEC Partners主合伙人亚历克斯•斯坦默斯(Alex Stamos)说。“你可以通过脚本的输入输出过滤来进行阻挡。在传统的 1.0世界里,要处理的只有一大张以标准超文本标识语言()编写的网页,因此要把这些脚本阻挡在外并不难。”

但在 2.0中,插入脚本的方式如此之多,以至于进行阻挡要难得多,他说道。编写应用的人,再也不能只用现成的过滤器了。

“24小时读完一本Ajax的书”

“你必须培训开发人员,”SPI的霍夫曼先生说。“围绕Ajax的炒作正导致一个问题:人们看到了MySpace的成功而纷纷采用Ajax技术。他们24小时内读完一本如何学会Ajax的书,然后创建一个存在安全隐忧的网站。”

此类初创网站得到了Ajax“框架”的帮助,“框架”就是现成的 2.0程序包。“利用Ajax框架的理念就是,你不必理解它如何运行。但我们的观点是,如果不知道它如何运行,你就不知道如何安全地使用它,”斯坦默斯表示。

他的公司探索了一些漏洞,当用户打开多个浏览器窗口,并在一个窗口里访问一个恶意站点时,可能导致在另一个窗口获得信息,并执行脚本。

SPI向一家网上股票经纪商展示了它所创建的恶意软件,该软件冒充会员身份,买卖他们的股票,并清空其银行账户。

程序开发人员将谷歌本地搜索(Google Maps)等应用,与在线分类广告服务网站Craigslist的广告结合起来,给出待售房产的位置信息,此类混合技术(mash-up)意味着,安全问题已扩展到不同的应用程序中。在RSS阅读器中聚合新闻源,并将用户对新闻条目所作的评论包含进去,这种做法也增加了引入恶意代码的概率。

然而,许多 2.0初创网站规模太小,无法把很多时间花在安全问题上。“在 1.0时代,安全性姗姗来迟,并且总是落在后面,这很正常,”斯坦默斯说。

“你不可能找到一个风险投资家,对他说你将拥有最安全的混合技术站点,然后得到2000万美元。你应该说,你将提供最酷的互动方式,这才会使你得到资助。”

译者/朱冠华