浏览器User-Agent

一般浏览器的User-Agent能说明很多东西,虽然这个头信息可以伪造。但正常情况下,通过User-Agent还是可以给我们提供很信息的。例子:

IE:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)

IE的UA信息提供了浏览器的版本、操作系统的版本、.Net框架的信息。

IE的UA详细信息查看

Firefox:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2

Firefox的UA信息浏览器版本、内核版本、操作系统版本、运行平台、安全信息、l10n信息。

Firefox的UA详细信息查看

Firefox3 Alpha 4

今天firefox3的最新开发版Gran Paradiso Alpha 4释出了。依然是没有看到Places的影子,这次主要更新了:

  • 引入了FUEL (Firefox User Extension Library)这个东西。也就是为扩展开发者提供一些公共的库,以提高扩展的质量。有机会我也开发一个扩展玩玩Laughing
  • 重新设计的“查看页面信息”,从里面的功能来看,对每个网站的控制力更强了。
  • 至于“离线应用”,我还没搞清楚怎么玩的。。。
  • 还有一些mac的东西和一些bug修复。

按照计划,5月31号发布alpha5版,不知道下面有多少会在alpha5中出现Innocent

  • Web-based content handlers
  • Search engine keyword support
  • New Password Manager
  • First pieces of new Extension Manager (EM) work
  • Places
    • Parity with Fx2 Bookmarks and History
    • Safeguard against data-loss
    • Bookmarks never lost between sessions
    • Sync infrastructure
    • API for extensibility
    • Backup and restore
  • Identity framework (i.e. CardSpace support)
  • nsTextFrame migration to Thebes
  • Growl Integration for OS X

使用301重定向URL

由于我对原来weblog的URL感觉有点罗嗦,而且层次比较深。这样是因为ZF中的URL的映射还是做得不怎么好。前几天在看Django的时候,他的URL映射非常不错。由于这些URL已经被搜索引擎索引,如果不要会有点不划算。这种情况下,可以使用http协议中的301Moved Permanently,将URL永久转移。这样当访问原来的URL的是时候,会重定向到新的URL。由于搜索引擎们的各自的技术不一样,能不能正确这些http头信息就不知道了,反正google是知道的。就算是搜索原来的URL,显示出来确是新的URL。

但愿能在今年内用上Firefox3

今天看到了Firefox3的计划表:

Release Date Description
Alpha 1 December 2006 Developer Preview ("Dogfood") Gran Paradiso alpha 1 release notes
Alpha 2 8 Feb 2007 Gecko 1.9a2 Release Notes, Gran Paradiso alpha 2 release notes
Alpha 3 End of March, 2007 Gran Paradiso alpha 3 release notes
Alpha 4 … End of April, 2007
  • Places
    • Parity with Fx2 Bookmarks and History
    • Safeguard against data-loss
    • Bookmarks never lost between sessions
  • New Password Manager
  • First pieces of new EM work
  • Growl Integration for OS X
  • Search engine keyword support
  • FUEL API support
Alpha 5 End of May, 2007
  • web-based content handlers
  • Places
    • Sync infrastructure
    • API for extensibility
    • Backup and restore
  • Identity framework (i.e. CardSpace support)
Alpha 6 End of June, 2007
  • Places
    • Sync client
    • Unified organizer
    • Starring
    • Tagging
    • Export to other apps
    • Full-text indexing
    • Extended metadata search
    • Improved Performance
  • Download Manager improvements
Beta 1 July 2007 Feature Frozen, including UI. All strings complete avail for l10n
Beta 2 September 2007 First l10n builds. All strings frozen
Additional Beta's and RCs based on need

晕,尽然有alpha6.。。。这还只是计划。。。不过功能非常让人期待。 

使用google.com

前一段时候开始,访问google.com会被重定向到google.cn上面。不过通过几步设置可以避免这个问题。在www.google.cn的首页中,选择Google.com in English,这样会跳到www.google.com的页面,但页面信息是英文的。这时,点击Preferences,在Interface Language选择chinese(simplified)。然后保存就OK了。每次进google.com的时候就不会跳到google.cn去了。 

Firefox3的中头痛的问题

Firefox的nightly版中,已经是Firefox3 Alpha3的预览版了。由于我现在的电脑只有256M内存,跑一会Firefox2会,就占很多内存了,由于想先用用Firefox3版看看。虽然,占用内存并不明显,也并不能确定是否有改进,当然离正式版还有很长时间。

由于Firefox3采用了新的渲染页面的方式,基于名叫Cairo的2D矢量图形库。具体有什么好处可以在网上找一下。

像我这种英语不好的人,所以开个金山词霸很常见。但在Firefox3中,好象不能自动取词了。。。不知道是bug还是因为新的渲染方式造成的。。。。 

转一个自认为不错的帖子

我在邮件列表里找到一个我认为不错的帖子,作者没找到,估计是翻译国外的。跟我的情形很像,从PHP到Zope,也许我永远不会学Java。而且我对PHP4完全没有兴趣,面向对象才是我要学的。如果PHP5不能满足我,那我只有向Python那里跳了, 既有django这种轻量级的,又有Zope这种重量级的东西。

我觉得这个世界上的程序员 可以分为两种:"主动程序员"和"被动程序员"。"主动程序员

"可以自己选择开发方式,开发语言和框架,"被动程序员"被动接受公司指定的语言和开发方 式。其实在现实生活中,这种分类并不绝对,一个程序员可能在不同的时候担当不同的角色,"被动程序员"也可能享有有限的主动权。这么分类并不以程序员本身 的知名度,财富多少,是否自己创业还是受雇于人有关。

  David Heinemeier Hansson 受雇与 37 Signal ,但是仍然可以自己选择建立自己的 Rails 框架来完成项目,他应该算是个"主动程序员"。Firebird 数据库的领导者同时也是 Interbase 数据库的创始人 Jim Starkey 将自己的公司卖给了 Mysql AB 而不得不给 Mysql 干活,从某方面说,他应该是个"被动程序员"。大多数第三世界国家的程序员应该属于"被动程序员",他们编程只是为了一份养家糊口的工作,他们无权选择自 己喜欢的编程语言或者框架,因为这是公司给他选择的,因为如果选了其他,他可能就找不到工作了。曾经有个即将离职的同事让我给他推荐一个比较好的编程框 架,可以很容易完成一个网站的制作,我给他推荐了 Zope, 还有 Rails, 他听我的介绍觉得不错 ,当我告诉他必须学习 python 和 Ruby 编程语言时,他显得很惊愕,"那能找到工作吗?"。这话其实也表达了大多数国内程序员的想法。看看招聘网站就知道,现在最需要的程序员是 Java 程序员,最需要了解的框架是 Struts。如果不会你很难得到面试的机会,所以就算你不会也要在自己的简历中"修饰"一下。

  有些自己创业的人可以自己选择喜欢的编程语言和框架,当然那毕竟是少数。如果我能够选择的话,我肯定不用 Java 来做网站应用。因为它完成一个简单的工作太麻烦了,很难快速适应需求的变化。当然我也不会去用 PHP ,因为我已经习惯了面向对象的编程方式了。 我发现一个奇怪的现象:大多数转向学习 Ruby on rails 框架的人都是来自 Java 阵营的程序员,而转向Python 框架Zope,django 的程序员大多有 ASP,PHP 背景。因为 Ruby 是一个真正的面向对象的语言, 它同时具备了脚本语言的特点,而 Python 首先是一个脚本语言,它具备了一些 OO 的特征。Java 程序员 很难忍受走回头路,所以他们选择了一个比Java更面向对象的语言 Ruby ,而PHP,ASP程序员没有那么重的思想负担,他们选择 Python 可能是因为它的代码更 Beauty ,远比他们以前写的"意大利面条"式的PHP,ASP 代码要干净的多。

  无论是 python, 还是 Ruby 这些非主流程序语言开发的框架,使用起来都异常的简便,他们可谓是真正从程序员角度考虑的框架。为什么 Ruby 一出,搅的 Java 的世界一片混乱,我想原因还是出在 Java 这里,当 Java 程序员想当然地认为程序开发应该如此麻烦的时候,Rails 的出现让他们立刻觉得被这些所谓的 Java 流行框架和 Sun 给欺骗了,这种欺骗是如此之深,以至于他们中间有的人"头也不回"的离开了 Java, 转而攻击 Java 的种种不是。这其中比较有名的人就是 Bruce Tate ,这位老兄写了两本轰动 Java 世界的书,Spring: A Developer's Notebook 和 Better, Faster, Lighter Java (该书可是获得 Jolt 大奖的,恰好我还都读过),随着 Rails 的流行,这位仁兄立刻叛逃出 Java 阵营,写了 Beyond Java 一书,着重介绍了一些非Java 框架,比如 Smalltalk 的Seaside, 和 Rails。

  Java 为什么这么复杂,我想了很久,得出这么个结论:这是因为 Sun 希望它那么复杂。为什么这么说呢?Sun 不是一个好的软件公司,它最擅长做的是制定规范,这很类似Java 编程中的 Interface, 经常编写 Java 程序的人,会发现 Interface 可能是出现最多的一个词汇了,任何框架中都充满了Interface —接口,大多数编程书都推荐面向接口编程(当然这不是Java的错,是设计模式要求的,不过 Java 将此发挥的最好)。首先定义接口,然后针对接口编写不同的实现,至少提供默认的实现。Sun 也是如此,看看 J2ee 的规范包含了多少 J 打头的技术, JDBC,JNI,JCA,JDO,JPA …. ,现在的 JCP 组织更加如此,每隔一段时间,就有大量的规范问世,Draft 的,还是 Final 的,充斥着Java 世界,这是 Sun 希望的, 每定义一个规范,就会有很多厂商来实现它,Java 的软件市场就做大了,这样 Sun 就可以靠授权,认证拿更多的钱,你看 Sun 的股票那么低迷,而却拥有那么雄厚的流动资金,原因再明白不过了,只要 Sun 还拥有 Java ,它就拥有了一切。

  Sun 希望 Java 变得复杂,就如同程序员希望 Perl 代码难看一样,这样做是可以带来好处的。Java 的复杂性也带来了产业链上其他行业的繁荣,比如咨询,在 Php ,Perl 流行 Internet 的年代,网站开发似乎还不需要咨询师,包括 C/S 盛行的时候,企业开发也不需要咨询师,然而随着 J2EE 逐步主宰企业级开发,咨询行业也开始兴旺起来。企业大把大把的把钱投入到开发咨询中,究竟效果如何,不得而知。我想对大多数程序员,尤其是那些有自己想法 的程序员来说,请求咨询公司,还不如自己去了解来得清楚。软件开发咨询师在我看来,有点象是"律师"—"代表贪婪的公司,让这个世界变得更糟糕一些"(中 Alex 的对白)。如果说国外的咨询师是希望通过主观的努力来解决客观存在的开发复杂性的话,那么国内的咨询行业可能把原本复杂的软件开发变得更加复杂了。我不相 信他们,我宁可选择某个软件的培训,而不希望有人来从头到尾指点你如何开发,因为国内咨询师的水平比你从书本上了解的高不到哪里去,公司又何必花费这笔冤 枉钱呢。

  那么如果你是个"主动程序员",你会跟着 Sun 的指挥棒走吗? 我想离开 Java 世界,你选择的机会应该很多,但是前提是:你愿不愿意离开 Java 。因为大多数人觉得改变现状其实并不是个好事情,学习一个新语言和框架意为着你过去所有的经验就消失了,这其中有风险。对大多数程序员 来说,编程其实就是份工作,跟卖盒饭,装机器没什么区别,只要搞好本职工作就可以。试图改变现状的人很痛苦,了解差异的人也是如此,就如同 Neo 在接受红药丸和蓝药丸。

  我在当年学习 Perl 的时候曾经买过一本《Learning perl》,书的作者曾经这么说,学习 Perl 是为了让自己把更多的时间用在去滑雪, PHP 的创始人 Rasmus Lerdorf 也曾经这样表示过,他希望自己能够减少盯着电脑的时间,可是这么多年过去了,他发现自己还是要继续盯着该死的电脑。其实我对选择框架语言也并没什么兴趣, 我只是希望能够以简单的方式完成工作,而把时间省下来去听听音乐,看看电影。实际上我跟不希望改变现状的人没什么不同,他们不希望学习新的东西,因为现有 的东西很熟悉了,学习新框架,还不如把时间放到玩上去,我的目的一样,我学习只是希望自己的工作更轻松一点,这样可以用更多的时间来玩。所以每当我看到各 种技术论坛上充斥着Java, .net , ROR ,Python 之类的争吵,我都觉得很好笑。其实为了维护一个语言而争吵最没有意义。编程语言就和英语,计算机一样,就是个工具,选择它们只是为了尽可能简单地完成工 作,提高生活质量。为了语言而语言,为了框架而框架都是没必要的。"主动程序员"可以选择自己的方式来工作,这是大多数人做不到的。如果有可能,我也希望 做一个"主动程序员"。

译言这个网站我喜欢

由于每个人的英语手平有限,因而放弃了一些或漏掉了一些对自己非常有价值的文章。现在国内有许多团体翻译国外blog的文章,如:blog中文翻译。让我对这些网站非常感兴趣。用Thunderbird订阅他们的feed,真是一件美事。

今天,我在Nicky's blog上找到了译言网,发现里面的内容还挺适合我的。而且,这个网站还提供英文版本,让老外来了解中国。呵呵,非常值得关注的网站。

对Apollo的一点看法

最近,和在做Flash编程的同事聊Apollo的事情。从他那听到,一些做Flash编程的朋友对Apollo兴趣非常之高。从现在的一些信息来看,这个Apollo到底是个什么?

这里的PDF可以给你更深的了解,Mike Chambers

总的来说这是一个平台,当然也是跨OS的。这个平台的主要技术就是Web+Flex,这里的Web是指的是基于浏览器开发的技术。使用的是WebKit Open Source Engine,是apple基于KHTML的一个分枝为基础开发的,在OSX上面已经大量使用该技术。这是该平台两个主要的特征,Flex对大家来说生疏一些,对这个技术我也不是非常了解,但通过同事的演示来看,是一种类似Flash的技术,但比Flash有更多的控件,适合客户端的开发。

Apollo的功能和API:

  • Offine / Occasionally Connected
  • Applications can run in background
  • Network
    • HTTP
    • XML-RPC / SOAP / Rest based web services
    • Binary and XML sockets
  • File I/O
  • Local storage / Settings API
  • Custom Chrome
    • Shape
    • Alpha
  • more

可以说是非常引人注目的,提供高质量的界形输出是肯定的。

那么,主要的竟争对手是,.Net?Java?

如果用Java开发客户端程序,那个界面真是没得说啦…,如果用Apollo来开发的话,界面就是不是问题。就内存来说,我觉得这两个都是内存大户,也是Apollo更大。就开发效率来说,这方面Apollo更有竞争力,支持多项技术开发,并且都是已经很成熟的技术,Flex稍微例外一些。并且,这个两家伙都跨平台,而且Adobe在手机方面也开始发展,在我看来只有服务器方面没有与Apollo正面冲突。

由于.Net只能在Windows上面运行,那就是说Adobe已经向Windows宣战了。就界面来说,两者差不了太多,Apollo有微弱优势吧。内存方面就不好说了,这方面Apollo落败。开发效率的话,Apollo当然比.Net的少多了。不过在手机方面不知道与微软的Windows Mobile有没有冲突。

也许这三家将形成三足鼎立的形式,是否是这样?那只有在Apollo发布已后,看看市场的反映才能知道了 

关于元数据

元数据Metadata可以为各种形态的信息资源提供规范、普遍的描述方法和检索工具,为分布的、由多种资源组成的信息体系提供整合的工具与纽带。

在Plone中,每一个类型都会有一组元数据Metadata,用来描述公有的数据。Plone里使用一种被称为都柏林核心元素集来描述这些元数据,并且这些数据可以直接访问。

在RSS中都柏林核心也被广泛应用,由于RSS中的标记能描述的信息有限,在规范中都允许使用第三方的标记来描述信息。都柏林核心就是被大量使用的例子。

更详细的信息可以访问: