站点更新 Log

虽然过了这么久,还是写一份简单的站点更新日志吧.

访问本站的朋友可能已经发现了站点格局与 UI 的变化:最近把首页从 Blog 那边切换了过来.并且对页面的UI 进行了调整.现在的页面风格我个人感觉还算满意. 原来的老页面暂时还会保留一段时间.随着我把内容逐渐迁移到 MT 中. 旧格式的众多页面就不再保留了:维护太困难. 现在使用 MT 进行后台维护.方便了许多. 交互性更好.

以后站点将跟踪关于 Oracle 与 OpenSource 等相关技术内容.更新相信会频繁一些(但愿这个站点的 IP 不会被屏蔽).目前还有一些内容没有完成:

  • 很多朋友的友情链接还没有加上来. Blogroll 这个插件刚刚使用.模板还需要调整一下.稍安勿躁.
  • RSS订阅地址我已经从在 FeedBurner 上设置为当前的了.可能还是有朋友不知道.
  • 一些内容显示的还有问题(包括相关文章等).旧内容需要一段时间切换过来.
  • Tag Cloud 的输出还做不到.插件测试了几个.都不是很好用.
  • 验证码和自动处理 Comment 的插件还没有完全调试好.

继续阅读

第一个概念性的 Oracle 蠕虫

Oracle 的众多漏洞有被更大范围恶意利用的倾向。10 月 31 日,有一个匿名者在 Full-disclosure(FD) 邮件列表里投递了一篇名为 Trick or treat Larry(很明显是对 Larry Ellison 的一个小玩笑) 的邮件。完全用 PL/SQL 写的蠕虫就这样出现了。专门研究 Oracle 技术安全的专家 Alex 对这个蠕虫结构进行了分析.这个完全用PL/SQL写的代码已经具有蠕虫的基本特征:

  • 1. 利用 utl_inaddr 包得到当前IP地址
  • 2. 查找相同地址段的所有网络地址
  • 3. 通过 utl_tcp 包向 1521 端口发送消息得到 Listener 状态
  • 4. 得到数据库 SID
  • 5. 利用默认密码构建 Database link
  • 6. 如果成功,则在远程数据库服务期创建一个数据对象 (或者其他有危害的操作)
  • 7. 继续第二步循环。尝试感染其它机器

继续阅读

免费的Oracle Database 10g XE

看来真的是免费的午餐越来越多了. 打开 OpenRSS 居然看到一堆和 Oracle 的免费数据库有关的新闻.这是真的! Oracle 居然也推出了一个免费(Free,价格的Free)的 Database 版本: Oracle Database 10g Express Edition .

Oracle 10g Express Edition (XE) 集成了 Oracle HTML DB 2.1 ,便于开发基于 Web 的应用. 当然,这个免费是肯定有功能限制的:只能用于单处理器,最多处理 4G 用户数据.并且支持的内存也不能超过1G. 但是可以肯定Oracle将会逐步放宽这些限制. 联想到 10 月份 Oracle 收购芬兰的数据库技术开发商 Innobase , 看起来 Oracle 是对 MySQL 这一块中小数据库的市场有兴趣不小: 先挖掉 MySQL的半块墙角,然后抛出个半成品探探开源的路.

目前已经有Linux 平台与Windows平台的 Beta 版本可以下载.

不到一年的时间,Oracle 已经收购了大大小小十多家软件公司了.不知道是不是疯了.什么时候消化整合完都是个问题.不过推出 XE 的这个动作倒是不错.顺便搅搅局. 因为这段时间 MySQL 刚刚发布了 5.0 版本, 最为重要的是据说微软的 SQL Server 要正式推出 SQL Server 2005 了.也是阿,马上就2006 年了.新产品都要抓紧不是?

话说回来, Oracle 虽然野心大,但是也没有 Google 大,最近 Google 的 Google Base 相信会让任何一家潜在的竞争对手坐立不安

Http 1.1 Etag 与 Last-Modified

在 Blog 盛行的今天,一些 Web 应用需要解析大量的 RSS Feed .如何提高效率是个非常重要的问题.在 MagpieRSS 的 Features 中列举了这样的一条: HTTP Conditional GETs
Save bandwidth and speed up download times with intelligent use of Last-Modified and ETag.. 这里的 Etag 引起了我的注意.

什么是 Etag ?

通过阅读 RFC 2616 ,得到了对 Etag 的一点印象:

The ETag response-header field provides the current value of the entity tag for the requested variant……Entity tags are normally “strong validators,” but the protocol provides a mechanism to tag an entity tag as “weak.” One can think of a strong validator as one that changes whenever the bits of an entity changes, while a weak value changes whenever the meaning of an entity changes. Alternatively, one can think of a strong validator as part of an identifier for a specific entity,
while a weak validator is part of an identifier for a set of semantically equivalent entities.

从上我们可以大致得知,Entity tags 本质上说是一种”强校验器”,但是 HTTP 协议提供了一种通过给 Entity tags 打标签的”弱”的机制(类似于内容的校验码).虽然这段话后面通过两种方式进行了解释,但是还是有些晦涩.我看了这段话之后只是得出了 Etag 的 “E” 代表 “Entity” 而已.

Magpie 首页上提到了一篇文章: HTTP Conditional Get for RSS Hackers ,拜读之后清晰了许多.要先说说 HTTP Conditional GETs 的基本原理,很简单,就是说,从 Web 服务器取数据的时候,如果文件变化了,给我新的文件,如果文件没有变化,只需告诉客户端没有变化即可,不必再把文件取回来.这样就可节省大量的网络带宽和资源.

Etag 与 Last-Modified 是从 HTTP 1.0 到 HTTP 1.1 才有的概念.当我们从 Web 服务器获取文件的时候,只需要读取 HTTP 响应头的 Etag 与 Last-Modified 字段即可,这两个字段里面的具体内容是什么可以不管(可能会千奇百怪,RFC 2616 对 Etag 没有具体值的定义),把这两个值 Cache 在本地,下次检查文件是否更新的时候比对这两个值即可.如果没有变化,服务器的响应代码不是 HTTP 200 (OK) , 而是 304.

http.304.png

如上图.目前 OpenRSS 虽然订阅了40 多个 Feed,但是响应速度很不错.在使用 Gregarius 的过程中(Lilina 也应用了 ETag),发现了 FeedBurnrer 烧录的 Feed ,几乎都是用了 Etag 的(否则估计服务器要瘫痪,Hoho).我们再测试一下 HTTP header 的响应情况:

$ curl -I http://feeds.feedburner.com/dbanotes
HTTP/1.1 200 OK
Date: Tue, 25 Oct 2005 11:34:15 GMT
Server: Apache
Last-Modified: Tue, 25 Oct 2005 04:30:12 GMT
ETag: U4q478bDKLqZ8UMMC8A5afZuHug
Content-Type: text/xml;charset=utf-8
$ curl -I http://feeds.feedburner.com/dbanotes
HTTP/1.1 200 OK
Date: Tue, 25 Oct 2005 11:34:21 GMT
Server: Apache
Last-Modified: Tue, 25 Oct 2005 04:30:12 GMT 
ETag: U4q478bDKLqZ8UMMC8A5afZuHug
Content-Type: text/xml;charset=utf-8

在这个期间,我的 Blog 没有更新.所以 Last-Modified 和 ETag 返回的都是相同的值.这样 Gregarius 就不必重新解析了. 国内的 GreatNews 是支持 HTTP Conditional GETs 的,更棒的是还支持 gzip/deflate encoding.而另一个 RSS 阅读工具 POPU (周博通) 就不知道了.

以上是我的笔记,如有理解错误,请指正!

EOF