昨晚下载了Apple最新的浏览器Safari的Windows版,试了一下,可能是习惯了Firefox,感觉一般,而且中文显示还有问题(也许是我没设置好)。但用是肯定会用的,因为现在不用专门找台Mac或者跑虚拟机来测试网页在Safari上的显示效果了,这算最大最直接的好处了,赞一下。

又搜索了解了一下,发现Safari:

  1. 像Firefox有扩展一样,有自己的plugin平台,PimpMySafar是专门收集和推广Safari plugins的网站;
  2. 像Firefox基于Gecko一样,基于开源的引擎Webkit,btw, Windows上也有个基于Webkit的开源的浏览器Swift(在中文显示上似乎比这Windows版的Safari还糟糕);

但是Safari有Firefox完全没有的优势:iPhone。据说iPhone上的开发将是Web application,而不是提供运行iPhone的MacOS的本地的SDK/API,如果真是这样(也许Jobs过几个月又会改主意),那么Apple的用意也很明白了:利用iPhone的Cool Factor(就像MacBook一样),吸引更多的开发者开发基于iPhone的Safari的plugin,让Safari成为一个平台(嘿,关于这方面针对Firefox我曾经写过类似的)。而这些plugins也会在MacOS和Windows上运行,从而建立起Mac之外Apple的更大的开发者社区和Safari生态圈,像曾经的微软一样,Embrace and Extend。

接下来会怎么样?

Safari的Plugin会像Firefox扩展一样甚至更容易开发么?会不会有软件能移植或者部分转换扩展到Plugin?Firefox的扩展界面是XUL,也就是XML,XML是可以(即使不容易)转换(通过XSLT)的……

业界的开放标准会因此得到推动么?iPhone肯定要存储地址簿和日历的,那么读取和存储页面上的Microformats比如hCard和hCalendar的plugin肯定会有的(如果不是已经集成在Safari之内)……

出版商如O’Reilly会出版Safari Hacks,Safari Cookbook,Safari For Firefox Developer,Manning出版Safari In Action?Apress出版Beginner/Professional Safari?;-)

当然,就算这个策略不成功,Apple也还有像微软提供Windows CEMobile的SDK一样提供iPhone SDK的选择。

如果不能在iPhone上开发,那花那么多钱买iPhone,跟作Apple的凯子有啥区别?:-P

UPDATE: 在O’Reilly Radar上看到这篇XULRunner for the iPhone,Marc Hedlund说:

I suspect that the real and right desire is to connect all of the capabilities of the iPhone to the Internet.

仅仅是Web页面是不能充分做到这点的,只有能够跟iPhone本地结合,才能做到这点,增加更多iPhone的价值,激发更多的想象力,这在Firefox上已经被扩展机制证明了。

Blogging @ 10 June 2007, “6 Comments”

“如果还没有搬过家,那你还不算是个blogger。”

去年网志年会的时候,我引用嘻哈哈的张扬这句话做的开头,刚过半年多,王佩的网志光荣了,幸好他还有另外一个域名,于是挤出写论文的时间,备份和转移之后,还立刻写了一篇《Wordpress整站搬家心得》。建议所有使用Wordpress的朋友们收藏,因为

你不知道要遵守什么样的规矩才能不挨枪子,活着就是你最大的危险,因为你随时随地都可能成为猎杀取乐的目标,朋友缅怀的对象。

王佩

关于blog转移,还有一些大部分blogger们还不了解或者没考虑到的地方,这里做点补充。

  1. 如果你能控制,把Blog的feed的输出设置为全文输出(至少提供一个全文输出的选项),而不是只输出简要。想靠只提供简要而提高点击率和PageView的念头是过时无效的。而且,当遇到要转移Blog的时候,所有大的在线阅读服务(Google Reader, Bloglines, Zhuaxia等)和订阅了你的blog的朋友的桌面阅读器(比如SharpReader, RSSBandit等)都已经读取并保留了你的blog的全文,当你无法通过直接转移数据库的办法迁移blog的时候(大部分使用BSP服务的blogger们),至少还有把RSS文档导入新blog的一个选择;
  2. 如果你用某个BSP服务,而这个BSP没有提供全文的feed输出,这样除了把你拴住,并且利用你来吸引点击率然后赚广告的钱以外我想不出其他理由要这么做,所以想办法换个地方吧;
  3. 使用Feed合烧服务,比如最近被Google收购的Feedburner,国内的Feedsky。为什么要合烧Feed,而不直接提供自己的Feed?不考虑其他理由,只考虑搬家来说,一旦你有了一个烧制的Feed,那么当你从A.com搬到B.com的时候,那些直接订阅你在A.com的Feed的读者就看不到在B.com上的更新了。而如果你用的是合烧服务提供的Feed,那么只要在合烧服务上把B.com的feed加进去,那么,你的忠实的读者们不需要在他们的阅读器里做任何添加或者修改,就能继续看到更新了;
  4. 已经有了一个合烧的Feed之后还没完全结束,因为大部分的blog系统都会在页面里提供类似下面的一段代码,这个代码通常叫做Autodiscovery Link,就是为了实现Feed自动发现机制。

    <link rel="alternate" type="application/rss+xml" title="白板报 RSS Feed" href="http://www.wangpei.net/?feed=rss2" />
    

    这段代码告诉访问这个页面的程序(Feed阅读器和搜索引擎),这个网页的Feed的地址在http://www.wangpei.net/?feed=rss2 (Firefox和IE7就是通过发现这个link才决定在地址栏上显示那个橘黄色的Feed图标的)。这么做的好处是,当我要订阅wangpei.net的feed的时候,我就直接让google reader或者bloglines订阅wangpei.net,而不需要找到最后的真正的http://www.wangpei.net/?feed=rss2这个地址。好,如果你已经改用合烧的Feed,除了把那个合烧的图标和地址放在边栏之外,还可以动手把这个autodiscovery link的href改成你的合烧的feed的地址,这样,读者就不用拷贝你的合烧Feed的地址,直接输入你的网站地址就可以订阅了;

  5. 如果你不打算用合烧服务,却希望能够让订阅A.com的读者继续看到B.com的更新呢?或者你采用了合烧服务但是已经有很多读者已经订阅了你的A.com上自带的feed呢?那么你可以试试看修改A.com上的服务器配置文件(.htaccess),设置重新定向(比如用mod_rewrite的rewrite_rule)把A.com上的feed的地址转向到B.com的feed的地址或者你的合烧Feed的地址上,比如:
        RewriteEngine On
        RewriteRule ^/?feed=rss2             http://www.b.com/feed [R=301,L]
    

    注:R=301表示永久转移,如果是暂时转移,用302。

当然,这些建议对在BSP上写blog的朋友们没有什么帮助,但是这些功能对BSP们来说是能够做到的也应该做到的。这样的要求在2005年的网志年会上已经提出过,可惜,到现在还没有哪家BSP做到或者说愿意做到。

P.S. 对Feed的了解,可以看和菜头的这篇文字里的介绍,提供合烧服务的Feedburner的中文文案也是由他翻译的。

So, people who make conferences: listen up. I think that there are lots of sysadmins and ops people who would go to a conference solely about web operations.

John Allspaw

今年的网志年会已经开始筹备了,这一次,我们能不能做一个真正的有纯技术(开发,运行,维护等)话题和参加者的年会呢?

我个人想感兴趣的话题:

  • 开发的平台,框架和工具,SCM的环境的选择;
  • 网站性能优化;
  • 技术团队的成长;
  • 技术趋势(Atom, OpenID, REST, Microformats等)的演示;
  • 好玩的新技术;

如果真的能够有完全让技术人员感兴趣和交流的演讲和讨论,相信年会的影响力和凝聚力会更大提高,而我也会争取让我们团队和认识的其他程序员一起去参加。

为了更方便阅读网页(“Improves readability”),有人专门针对Lifehacker.com(我每天必看的网站)页面写了个Greasemonkey用户脚本,把多余的页面元素删除掉(“Removes various elements from the Lifehacker site”)。

猜猜看Lifehacker的反应是什么?

It removes too many elements of the site’s design, but this custom Lifehacker user style is still a compliment. You like us enough to mod us!

稍微有点不满意(删除掉太多页面设计元素了),但这对Lifehacker.com还是一个认可,因为用户喜欢Lifehacker到了改装页面(mod的感觉没翻译出来)的地步。

所以:

  • 如果有用户用user script改装你的页面,那这是一件好事情(你提供了他们不愿意放弃的内容),同时也是一件需要考虑的事情(页面设计也许太花哨或者色彩搭配不够好);
  • 页面的mark up不能太复杂,否则user script不好写 ;)
  • 页面的mark up不能经常变动,否则user script会失效;

这就让我想起几天前看到的一句话:

Your Markup is an API. With all the hype about APIs and mash-ups, it’s easy to forget that your HTML is also an API, and your users are experimenting with it right now.

Matthew Magain

但页面设计和编写的重要性绝对不仅仅在为了考虑用户使用Greasemonkey user script(毕竟这样用户比例特别小),在结构化的数据的发布和读取上,尤其是microformats的推广更是证明了“页面是API”。下一个版本的Firefox,Firefox3.0,已经在考虑集成对microformats的支持,这里有一些Firefox3在支持microformats的用户界面设计模拟图,已经包括hCard, hCalendar等格式。

话说回来,无聊一下,如果写Greasemonkey user script来改装网页,你会改装国内的哪个网站?怎么改?

Geek @ 06 June 2007, “No Comments”

My programmer personality type is:

DHSB

You’re a Doer.
You are very quick at getting tasks done. You believe the outcome is the most important part of a task and the faster you can reach that outcome the better. After all, time is money.

自我评论:这个不准,虽然我是很希望自己完全是这样的。

You like coding at a High level.
The world is made up of objects and components, you should create your programs in the same way.

自我评价:差不多吧,Java, PHP, Javascript, C#… 想low level也难不是?

You work best in a Solo situation.
The best way to program is by yourself. There’s no communication problems, you know every part of the code allowing you to write the best programs possible.

自我评价:是这样的,过几天关于这点要专门写一些。

You are a liBeral programmer.
Programming is a complex task and you should use white space and comments as freely as possible to help simplify the task. We’re not writing on paper anymore so we can take up as much room as we need.

自我评价:原则如此,但不喜欢太多和不必要的空白和注释。

REST @ 06 June 2007, “No Comments”

Q: What’s the difference?

A: A mime-type.

Joe Gregorio

Although things have been pieced and formed up together in my mind for months, still have to say, it was one of aha! moments when I read that.

Further reading:

Life @ 01 June 2007, “6 Comments”

小时候,六月一日那天向大人们要玩具耍;

今天,咱自己做玩具玩;

昨晚想到今天奏是六一了俺半宿木球睡鼓捣了个小玩具,丫的能在网页上BIAJIBIAJI地盖上一张甚至N球多张图片。

选择几个简单的选项,然后把代码框里生成的代码拷贝粘贴到你的网页/Blog里奏算成乐。

今个儿一起耍,要不又木机会耍乐。

现成的图片有创作共用的logo,反对RIAA的logo,儿童节快乐的字样,还有黄~丝~~带~~~。