C语言小技巧:编译期ASSERT

众所周知,ASSERT一般用于检查运行期的必备条件,它对编译过程没有任何影响,也不能在编译时阻止潜藏的错误。

常见的编译期ASSERT手段是使用 #if…#error…#endif 的结构,但由于#if之中的表达式是在预处理过程中计算,所以无法用到一些编译期才能确定的量,比如sizeof(…)。

无意中在Symbian的SDK头文件中发现一个有意思的宏,实现了真正的编译期的ASSERT:(简化整理后)

#define COMPILE_TIME_ASSERT(expr) typedef char assert_type[expr ? 1 : -1]

它完全可以用于包含sizeof()等静态运算符的检查条件,同时,不会生成任何额外的二进制代码,也不依赖于特定的编译器,使用起来非常简单。但需要注意的是,参数expr只能是静态可计算的表达式,当然如果你不慎使用了非常量的表达式,编译器会阻止程序的编译,同样也起到了确保expr为常量的效果。

走向成熟的Yahoo! Pipes

初识Yahoo! Pipes大概是在2个多月前吧,这个极富创意和实用性的Web 2.0工具引起了我浓厚的兴趣。什么是Pipes呢?不妨拿众所周知的FeedBurner作个参照,如果说FeedBurner是一个傻瓜式的RSS优化和整合工具,它以一个主Feed为轴心,将各种增强元素和辅助Feed友好的聚合在一起,那么Pipes就是一个开发级的RSS构建工具包,借助其强大的逻辑流控制,你可以对Feed进行各种操作,包括汇聚、排序、过滤、运算…… 嗯,基本上就是一当年Authorware的创作风格。

当时注册帐号后,立即就尝试创建了一个Pipe——“All about me” ,把Blog、del.icio.usTwitter、Gallery2聚合在一起。想想很简单的一件事儿,结果实际操作起来才发觉困难重重,一方面是因为Pipes尚在beta阶段,很多功能都不够完善,另一方面是由于各个Feed的输入格式上常常大相径庭,要揉在一起确实还得花一番功夫…… 结果折腾了半天虽然把日期格式都协调一致,并且实现了统一的排序,但不知为何FeedBurner的输入的HTML标签总是被当作文本处理了。实在没搞定,也就扔在那里没管它了。

没想到今天在日志订阅里偶然发现我的Pipe排版已经完全正常了,而且整体看起来也有少许细微的进步。看来Yahoo! Pipes的伙计们一直都在不断的努力改进和优化,值得赞赏!

详细的内容这里就不作更多介绍了,有兴趣的话不妨试试,看看你能用Pipes作出何种创意来~ (:

My Pipe: http://pipes.yahoo.com/pipes/pipe.run?_id=Wl87zzHw2xG0iCtBJhOy0Q&_render=rss

Google日历也支持中国移动了

之前Google日历的手机短信通知一直都声称只支持中国联通,今天看到网友Blog中提到“Google日历”支持中国移动的手机了,抱着试一试的心态,竟然立刻就收到了验证码。

以前一直觉得Google日历不如自己在手机上设置提醒有用,现在看来可以转换一下习惯了。 🙂

Google日历验证短信

E90王者归来,S60一统江湖

Nokia Communicator系列的正统王储——E90,终于抛下了高贵的S80世袭血统,融入了S60的大家族。

回顾历史,Nokia 9210是Communicator系列的开山之作,也是第一款Symbian智能手机。其接班人Nokia 9500沿袭了当时9210独一无二的界面平台——S80,并将Communicator的内涵演绎到了极致。

转眼数年过去了,Nokia终于推出了Communicator的第三代——E90。从名称看,Nokia的智能手机几乎已经完全过渡到了新的命名体系,Communicator理所当然的加入了E系列。但S80的界面平台并未在E90上得到延续,确切的说,Nokia已经将其S80和S90这两个昔日王谢堂前燕融入了目前盛极一时的S60 3rd界面平台,并藉由新的“多级界面规格(Scalable UI)”将以往不同尺寸的屏幕归一而治。

从软硬件规格上看,E90已经集成了Nokia几乎全部最先进的成熟技术以及一些尚未在其它型号中展现的新特性:

  • CPU:ARM11 @ 332MHz
  • GPU:3D图形硬件加速
  • 内存:128M RAM/128M Flash/256M ROM
  • 屏幕分辨率:240 x 320(外屏)/ 800×352(内屏),均为真彩色(24bit)。
  • 摄像头:300W像素/闪光(主摄像头)、30W(次摄像头)
  • 通信网络:GSM(EGPRS)/WCDMA/HSDPA/Wi-Fi(802.11g)
  • 电池:BP-4L(1500mAh)
  • 软件系统:Symbian OS 9.2 / S60 3rd FP1
  • 其它:GPS、立体声扬声器、Bluetooth 2.0+EDR(支持A2DP)、USB 2.0、H.264视频解码

All about Symbian的这篇“E90一日使用体会”将其强大的功能和便捷的操作生动的呈现在我们眼前。文中提到的几点非常有意思,他用E90的浏览器可以直接浏览大部分的Web站点,甚至包括Gmail在内,注意了,这可是实实在在的Web Gmail,而非一般手机上登录的Mobile Gmail。那么大家想必都对E90的Web浏览器非常感兴趣了吧,因为Nokia此前的机型都无法做到直接支持标准的Gmail显示。

透过Nokia的开发者资料,我发现E90(包括其它S60 3rd FP1机型)所内置的浏览器是基于开源的Safari内核开发,支持CSS2和JavaScript 1.5,并吸纳了部分Netscape的特性:

KHTML Rendering Engine from Apple Computer Inc.’s WebCore — This is the oftware used in Apple Computer!’s Safari browser.

除此之外,还包括更多流行的Web特性:Flash Lite 2.0、AJAX、Web Feeds。类似于Mac OS版本的Safari,Nokia的Web浏览器也支持“多窗口”浏览。

除了这些标准的浏览器特性之外,Nokia还针对手机平台作了一些特别的优化设计,比如:缩略图式浏览历史 、快捷键支持、浮动快捷工具栏、快速缩放、基于运营商的Cache管理、多种接入的无缝切换……

从曾经简陋的WAP浏览器发展到如今媲美PC的全功能Web浏览器,Nokia带给我们更多超乎想象的新特性,让智能手机朝着取代笔记本电脑的方向迈进。

虚拟主机新一轮性价比之王:Site5

最近Dreamhost老是出问题,竟然出现一天之内连续4次当机,实在让人莫名火起。最近一个月的Siteuptime统计显示在线时间已经跌倒了99.5%左右。本来都差不多打算继续次年续费的了,看来不得不重作考虑。

Dreamhost首年$22.4的优惠价确实吸引了不少客户,但一年之后面对不菲的续费价格,就不得不开始慎重考虑各种综合因素了。受Dreamhost上述状况的影响,我首先考虑的因素就是可靠性保证,目前不少专业的虚拟主机供应商都明确提出了99.9%的“在线时间保证(Uptime Guarantee)”,所以我首先基于这一条件作了第一轮海选。
继续阅读虚拟主机新一轮性价比之王:Site5

时刻警惕盗链的威胁

今天在查看主机的流量统计数据时,惊奇的发现从5月28日以来,Blog流量呈高速攀升之势,在这两天已达到峰值,日均流量竟然几逾1G!

难道是近日的话题中有什么敏感内容,以致招来大量访客?结果显然不是这样。从日志分析中的“Referring Site Report”来看,music.soso.com这个站点占据了绝对主要的流量,而打开log一看,其中已经完全被下面这样的记录所充塞:

58.16.118.29 – – [09/Jun/2007:00:09:00 -0700] “GET /wp-content/uploads/2006/09/24hrs.mp3 HTTP/1.1” 206 69155 “http://music.soso.com/q?w=94001592c7fa3b44&sc=mus&ch=w.q&sip=202.108.4.105&sport=3118&ty=14&songname=xc8xe7xb9xfbxc3xbbxd3xd0xc4xe3&size=6.6M&sig=xc4xaaxcexc4xcexb5&clz=mp3” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)”

Referring Site Report

原来是因为去年8月的一篇Blog,介绍了Google MP3 Player的保护原理:

http://blog.oasisfeng.com/2006/08/24/always-show-google-media-player/

没想到其中用EMBED标签引用的MP3文件都被腾讯搜搜的MP3引擎给索引了,直接招致如此高的带宽消耗,还好有Dreamhost的海量带宽(2T/月)撑着,站点才不致被叫停……

由此可见,介于国内目前尚不成熟的网络道德,还是需要时刻警惕盗链的威胁。尤其应避免在网站上放置不加盗链保护的媒体文件。另外,养成常常留意日志的习惯也是非常重要的。 (:

Dreamhost用户FTP帐号大面积被黑,所幸未遭殃及

最近两天我在Dreamhost的虚拟主机非常不稳定,今天一天甚至出现了三次长短不一的downtime。看官方的公告等于没说,网上找了一下,竟然发现这个可怕的新闻:《3500个 DreamHost 用户 FTP 帐号被黑,我也不幸中招》 。官方的解释含糊其词,不过从攻击所殃及的用户面来看,显然是服务商存在一定的漏洞或疏忽,无论是技术还是管理层面的。

虽然我没有收到警告邮件,但仍仔细检查了一下,所幸几个主站均未发现可疑的内容,页面中也没有被植入恶意代码。看来保持密码的复杂度还是非常有必要的。

请各位共用虚拟主机空间的朋友务必仔细检查一下自己的站点页面,确认是否有被黑的迹象,以免帐号被黑客利用。

BTW,购买的Dreamhost虚拟主机首年还有两个多月就到期了,最近状况频频,搞得我还真有点犹豫要不要继续使用下去……

限时免费注册:DivX Pro

看来越来越多的软件开始学会用限时免费注册来作推广了,这次的主角是DivX Pro!

DivX Pro是一款重量级的视频解码插件,当年Xvid未出茅庐前曾红极一时,目前也仍然是使用率较高的编码插件之一。

在如下地址下载后,安装过程中会提示输入Email地址,然后就可以收到Serial No.了~

http://www.divx.com/dff/index.php

具体时限尚不清楚,不过经过我亲身验证,截至发稿时仍然有效~ 😉

补充:注册号似乎并非完全版本,具体效果见下图:

DivX Pro Registration Status