Archive
Archive for the ‘爱生活,爱折腾’ Category

放风筝!

May 16th, 2010 13 comments

五一在奥林匹克公园看到有人卖 30 个一串的菱形小风筝(只有两个巴掌那么大),遂 10 块钱卖下。今天又跑到广安门桥上放风筝去了。之前放过两个沙燕儿风筝,一个是读书的时候买的可拼装的彩绘版,另一个是上个月买的黑色不可拆卸版,两个风筝放飞的结果均不理想。失败两次之后痛定思痛,决定由这种不易平衡的硬翅风筝转到带尾巴易平衡的大三角或者菱形风筝。

别说这风筝只要 10 块钱,比以前买的便宜至少一半,但放飞可是一点儿不含糊。这可能就是民间传说中的“贱一点好养”的缘故。如图是我买的风筝和盘鹰轮。轮子是木材加金属的,有点沉,后悔当时没有买碳纤维的。 >_<

风筝和盘鹰轮

风筝和盘鹰轮

小风筝其实挺好放,因为有尾巴的缘故,不会在天上乱飘或者打滚。只要迎着风把第一只放出来,让它凭着风力把线拉直了,后面的风筝就可以一只一只地鱼贯放上天空。风吹得风筝尾巴呼呼直响的,视觉上也很有冲击力,甚至引来路人围观……

成功放飞

成功放飞

不幸的是,风筝放飞了一次在收回来的时候挂到树上了,奋力扯了回来,结果就是遗留了三五只风筝在树梢上。好在这一大把的,少几个也不影响。

风筝挂在树上

风筝挂在树上

公园里还有专门来放风筝的“老专家”们,骑着自行车,搬个小马扎,风筝都放了上百米高,已然看不见了。比起他们来,我是自愧弗如啊。这次风筝线没有盘好,结果放到一定长度以后绳子缠住了,下次放的时候争取放高一点儿。

放风筝的老人

放风筝的老人

最后一张图是和谐的广安门滨河公园。

广安门滨河公园

广安门滨河公园

收到德生寄来的支撑板

May 4th, 2010 3 comments

07年暑假买的德生 R-9700DX 收音机,前阵子打开支撑板收听的时候不小心把手放上去按了一下,结果“啪”地一声支撑板就断掉了。后来在 BBS 的 Radio 版上求助,又跑到德生论坛骚扰用户服务部门的经理候传,终于在今天收到了德生寄过来的 R-9700DX 收音机支撑板,顺利安上,正常使用如初。(就是图中的那个支撑板)

R-9700DX支撑板

R-9700DX支撑板

如今收音机已经是比较小众的产品了,除了会在地震灾难的时候向灾区投放一点,平时有使用习惯的人不多(当然,堵车倒是普及了交通广播的收听率)。德生在这方面一贯坚持“享受广播 enjoy broadcasting” 的理念,不光在产品上不断地推陈出新,同时也依靠完善的售后服务巩固了用户对于德生品牌的信心,必须赞一下。

南京游记

April 16th, 2010 24 comments

清明节跟熊同学去南京玩了三天(准确说是两天半),写个游记到现在拖拖拉拉地还没有凑全。本来是按时间顺序写的,自己读下来觉得又臭又长,修改了两稿还是交待不清楚要点,像小学生作文的流水账一样:“今天我们先去哪儿,再去哪儿,最后去了哪儿,南京真好玩!Over.”索性来个总结式的,只把去过的地方写一下,感慨抒发一下,就算完事。

交通上的事情就不值得细说了,因为计划得晚(放假前两天),没买到十分称心的车票。去程 D349 动车二等座(传说中的餐车和软座代卧)正点顺利到达南京,回程 1478 新空调硬卧上铺在廊坊待避众多动车晚点1小时45分,酿成了上班迟到的惨剧。

第一天去的夫子庙、秦淮河、江南贡院、雨花台。
夫子庙:夫子庙确有其庙,用来祭奠孔夫子。可惜现在市场环境房价飞涨,大家都信那印有和蔼可亲毛爷爷形象花花绿绿的纸票票,哪还有人信孔夫子,于是只在外面看了一下,没有买票入内。夫子庙一带是跟老北京前门大街一样的步行街商业区,游人如织,店铺以时装、小吃等元素为主。我顶讨厌人多的去处,于是没有心思多逛就去游秦淮河了。

秦淮河:夫子庙前的码头边我们买了船票乘上了仿古的画舫。本来秦淮河的景色当是在夜间游览为胜,我们时间上赶不及,只好白天里来看看,船票上也节省些许。船上人很少,同行的还有其它两人。河面泛青,是水质不好的标志。所以古意里的浣衣嬉戏早已不可能。画舫平衡地驶在河面上,每经历一个有故事的古迹胜景都会有事先录好的播音解说。河面上的桥很多,每一座桥都承载了它自己的故事。总共经历多少孔桥我也记不清了,倒是熊同学在听到“二水桥”与“文德桥”时兴奋异常,非要强加在我身上。“二水桥”本来是取自《登金陵凤凰台》中“二水中分白鹭洲”的句子,熊同学偏偏要将“二”、“水”两字分开,然后各作贬义解释,加到我身上。至于“文德桥”则是听了“君子不过文德桥,过文德桥非君子”之语。传说文德桥这边有好多秦楼楚馆,乃是香艳非常酒绿灯红之地,时常有一些道貌岸然的君子作派的人在晚上偷偷溜过文德桥寻欢作乐来,于是有了上面那句话。今天那些秦楼楚馆早已无迹可寻,只剩下传说,然而我坐在画舫上从此桥穿过,却仍然被熊同学强加这个名号,实在是悲屈也哉…… 河两岸有不少民居以仿古的徽派建筑风格为主,看到那房屋之间高高耸立的马头墙,的确有置身江南的感觉。画舫转了一圈大概有50分钟,又回到了夫子庙的码头。

江南贡院:有一次在某个杂志上看到了江南贡院的介绍,于是心里就记下了。贡院就在夫子庙的附近,我们游毕秦淮河就买了票进去了。贡院的门口有一个牌楼叫做“明远楼”,门口上有一块影壁,上书“人才当义取”,显示了对人才的尊重。过了大门看得到贡院的介绍,原来的规模有号舍上万间,占地面积也十分可观,现在只保留了几十间号舍作为代表,供游人参观。之前从文字上读到号舍长几尺宽几尺,考生的在考试期间的一切行为均在号舍中完成,等亲眼见到号舍的大小时,才明白这是多么不容易的事情。白天考生要在这里答题,晚上要在这里睡觉,区区不到两米见方的空间,实在是辛苦。吴敬梓也曾在这里参加考试,许是受了这科举的种种刺激,才回家写出了古今第一的讽刺小说《儒林外史》。贡院的号舍缩减了不少,所以规模也不似从前,很快就转完一圈出来了。

雨花台:雨花台如此地让人惦记,其一是因为那些美妙圆润的石头,其二就是雨花台的土地上沉浸了烈士的鲜血。雨花台其实是一座烈士陵园,1927 国共分家以后,雨花台就成了反动派屠杀进步人士的刑场,无数仁人志士牺牲在这里。步入正门就能看到一座10余米高的烈士群雕,神情钢毅视死如归,正是当年就义的烈士们的英勇写照。再往园内走,地势就渐渐高了起来,最高的地方耸立着烈士纪念碑,碑后燃有一盏长明灯,纪念烈士们的革命薪火永流传。园内还有方孝孺墓、杨邦乂剖心处、梅园等景点,烈士纪念碑下面的台阶底下,还有一个毛 主席纪念馆,又看到了“人间正道是沧桑”的句子,仿佛回到那个火红的年代。馆里的游人络绎不绝,主席始终活在大家的心里。

总统府:总统府是民国时期的政府首脑办公场所,解放之后就自然成了纪念场所供人游玩了。一百年前总统府不开放的时候,北京的中 南 海却是当成公园向游人开放的;政权更迭之后,总统府和中 南 海的用处正好又倒过来了,不知道在下一个轮回中,形势是不是逆转回来?总统府是一个很精致的园子,中部是大堂、办公楼等国民政府时代的建筑,现在恢复了原貌供游人查看。办公室的阵设都相对简单,一个写字桌,一把椅子,外加几个沙发茶几。天花板上的吊扇、楼内的电梯表明了这个是现代的设施,然而样式现在看来都相当之简陋,可见是有些久远的。东花园和西花园现在辟设了孙中山纪念馆、太平天国历史陈列馆以及国民政府各机构和史料陈列展示。总统府的游人众多,旅游团的小旗子处处可见,将小小的园子挤了个水泄不通,游玩最忌讳人多,我们匆匆看完就出来了。

中山陵、灵谷寺:这两个地方的门票是搭在一起卖的,只好放在一起。旅游的攻略上有人说中山陵挺不值的,因为就是直通通地登上台阶看一看碑亭、祭堂、墓室,转身返回就要耗费八十大元。可是为了这八十元而放弃似乎更傻了,两害相权取其轻,索性看它一看。过了门口题有“博爱”的牌坊,往内走一段便开始沿着三百多级台阶拾级而上。顶上是祭堂,仿宫殿的建筑,门口有三座大门,门上的题字分别是民族、民权、民生,代表了孙中山的三民主义(想起了金门岛上的大幅标语“三民主义统一中国”),室内是孙中山先生的坐像。再进得一重门便是中山先生的墓室,穹顶上有国 民 党的大幅党徽,下方是一个圆形的下陷墓穴,棺木就静静地安置在墓穴之中。棺木由混凝土密封,上覆有汉白玉孙中山卧像。我们围着墓穴缓缓绕行一周而出,算是瞻仰了孙中山先生。

灵谷寺现在已经被改成灵谷公园,但仍以灵谷寺称呼。过了大门可以看到无梁殿,这个殿已经改造成阵亡将士纪念馆,墙壁上刻满了将士的姓名。再往前就是灵谷塔,此塔是八面九层宝塔,也是为了纪念阵亡将士而建,塔身上下遍布了纪念的文字,均是由当时国 民 党内的军政要员所书。沿着塔中间的螺旋形扶梯可以一直上到九层,在这里钟山风景一览无余,极目远眺心旷神怡。

南京长江大桥:南京的长江大桥是万里长江第二桥,由于当时中苏关系恶化,所以南京大桥也是国人自己设计施工的第一座长江上的公铁特大桥,在当时的确是为一穷二白的新中国争了口气。我们从桥下的南堡公园坐电梯升到桥面上,在桥头堡附近照了些像,然后从沿着人行道步行到江的那一边去。桥面风很大,再加上车来车往,人行道又靠边,于是桥面的振动就大到让人有点颤抖,倒是人行道上有不少横突直冲的骑车人驾着电动车从我们身边呼啸而过,他们早已经习惯了。

这次南京之行去过的地方并不算多,主要是时间有限,不过放松心情的目的却是达到了。没有玩到的地方有待下次去南京慢慢看了。看过南京,实在感受到江南是个好地方。特别是当前北京风沙漫天、空气恶劣,对比之下差距明显。另外感觉南京除了来旅游的,其它主要都是本地人,苏南几个城市的经济活跃程度不比南京差;而北京在华北地区一支独秀,造成了外来人口的大量涌入,直接造成了北京市人多车多道路拥挤房价奇高的现象。BBS 上现在逐渐有了逃离北京的声音,我也应该好好审视这个问题了。

风筝放破了

April 11th, 2010 5 comments

上学的时候在天坛那边的红桥市场买过一只可以拼装的彩绘沙燕儿风筝,在西操放过两次,结果死活没有飞起来…… -_-b 大大打击了我放风筝的信心,风筝也扔起来没管了。

上个月在十里河的天娇文化城(这个天娇二字写得太像天桥了,怀疑是有意山寨)又买了一只沙燕风筝,这次吸取教训买了个整体的,按传统画法绘的是蝙蝠(取“遍地是福”之意),颜色黑乎乎的,倒是像一只燕子。

今天带去广安门滨河公园放飞,试飞的时候感觉还是容易左右偏,后来求助于旁边放风筝的老人(感觉都是老专家…… 风筝都是自己做自己画的,骑个自行车搬个小马扎就定在那里放起风筝来),帮忙把风筝线重新系了一下,调整了一下平衡。再度试飞,勉强能飞到半空中,等收回来的时候发现翅膀上的一个突起的装饰坏掉了。用502粘不管用,心一横把两边的都掰断了以保持平衡。再放飞终于能起来了。可惜好景不长,风筝升到一半忽然地就摇晃着掉下来了,满心不解;待收回来一看,发现是糊风筝的纸已经吹破了一个大口子,无法平衡地承受风力,这个风筝就此悲剧了。

这回又不顺,毕竟沙燕这种竹制纸糊的风筝制作上的确没有现在的塑料骨架布面料的风筝好;我似乎更喜欢传统风筝的这个感觉。可是放飞不顺还是太打击人了,下次听从老人的建议弄个大三角来飞一下,期待不要有问题(否则便是人品太差天理不容了……) 对了,还有上次在颐和园十七孔桥上看到老人放飞的风筝饭儿(学名是“线上往复器”云云),实在很赞,下次一定弄一个。

p.s. 此次放飞失败,被熊同学无恶意有预谋地观于目铭于心,给熊同学幼小脆弱的心灵造成了难以磨灭的伤害。本人痛定思痛,决意下次放飞一个能飞起来的大三角,并以照片为证。

QQ域名邮箱原来只是个别名

September 21st, 2009 6 comments

前几天从 cnBeta 上看到 QQ 发布域名邮箱的消息,于是去试用了一下。

域名邮箱页面是 domain.mail.qq.com,首先需要在 QQ 邮箱的体验室里启用,然后按要求设置域名、验证 CNAME 记录,添加管理员账号以后,便完成设置。这些步骤腾讯一直有提示,对于不熟悉的人来说也能很快依照提示来完成。

登录以后才发现,这个邮箱其实就是给你原有的 QQ 邮箱加了一个别名。它们的邮箱存储是完全共享的,对方发一封邮件给你,无论从哪个邮箱登录,都能看到。而且在页面上方显示邮件地址的区域更有一个明显的切换菜单,可以在不同的别名之间切换。

利用管理员账号可以向 QQ 域名邮箱中添加成员,但有一个明显的障碍就是:你必须提供此人的 QQ 号,还得保证此人的QQ 邮箱是开通状态。不清楚这是技术上的原因还是产品策略导致的,我觉得这种别名策略会让相当多的人失望而归。

我满心以为 QQ 的域名邮箱能够像 Google Apps 中的 GMail 那样提供完全独立的邮箱功能。看来这次必然是失望了。腾讯只是玩个了花样,给原来的 QQ 邮箱加个别名,换一套 LOGO 和皮肤便“诞生”了 QQ 域名邮箱。做为一个企业,腾讯还远远做不到 Google 那样的大气和长远,这种浮躁和短浅似乎也是中国很多企业的通病。但愿能在日后慢慢改观。

新买了一对神兽

August 20th, 2009 9 comments
“草泥马”玩具

“草泥马”玩具

如题。工位确定以后,桌子上一直是空空的,除了一个显示器,几本规范,什么也没有了。总觉得要添点什么好,忽然想起网上颇为流行的神兽“草泥马”,到淘宝上搜索一番,果然找得到。(但“草泥马”这词已经被淘宝和谐掉,必须以它的原型“羊驼”为名进行搜索才有结果)

网上售卖这个玩意儿的很多,形象大体上是按照卡通化的羊驼来制作的。但我细细地观察一下,觉得某些型号制作得有形无神,两眼漠然,全然看不到那种恶搞风格里透露出来的诙谐的喜气。后来仔细比较斟酌,选定了比较满意的一款,一共要了两只。分别是棕色款和白色款,二者居然还都有名字,叫做“雷雷”和“萌萌”,果然有当今互联网的特色。价格花费比其它商家所售略高,但其形神兼备,令人蔚为满意。

神兽现在依偎着站在我的桌子上,而我的坐位临近过道,同事每每经过便能看到神兽两只作亲密态,大赞可爱。但能识别此为何物者不多,有人误以为骆驼、绵羊一类。问到我,我也不便直接说出“草泥马”这名字,惟恐谐音让人听了发怒,便委婉地告以“神兽”的大名。若有人追问“神兽”者何,便故作神秘,告之来源于网络,请自行搜索;实乃神兽之名只可意会,不可言传也。

给域名解析添加备份

May 24th, 2009 12 comments

5月19日,国内的免费智能域名解析服务商 DNSPod 遭到大规模的恶意攻击,意外中断服务若干小时。我的博客域名当时也托管在 DNSPod 处,被攻击的时候无法解析域名,幸好自己记得虚拟主机的 IP 地址。当时只好自己在系统中编辑 hosts 文件来手动完成解析服务。

意外发生以后,再考虑到 DNSPod 之前数次被攻击的历史,我决定把域名转移到其它的服务商,更重要的,是给域名添加备份解析服务器。

DNS 作为互联网基础设施,其稳定性是很值得关注的。传统的做法是域名解析服务商(无论是免费解析还是域名注册商提供的解析)提供至少两台服务器用作域名解析服务。比如 DNSPod 就有六台服务器用作免费解析,EveryDNS 有四台服务器。这种设计是为了提高冗余度以增加域名系统的稳定性。对于意外的服务器当机、网络出现故障等问题,这样做是比较保险的。DNSPod 偶尔就有某台服务器要停机维护的情况,但这并不会给正常解析带来什么麻烦,因为有其它的五台服务器正常工作。可是对于恶意攻击,多台服务器的冗余就没有意义了。攻击者在能力足够的情况下(直白的说就是肉机足够多),完全可以利用大流量把所有的服务器同时攻击一遍。而且大部分时候他们都会这么做,要不然只攻击一部分其实没有效果。DNSPod 就这样被大流量攻击打倒,无数的域名便受到牵连。

在台湾网友的博客上看到《如何用xname搭配zoneedit做备援DNS》这篇文章,于是照着做了一下,把自己的域名解析转移到了 ZoneEditEveryDNS。设置上都是大同小异的,简单说一下。

  1. 注册 ZoneEdit 和 EveryDNS 账号,并登录。
  2. 在 ZoneEdit 中添加自己的域名,比如我的就是 xiaoding.org ,然后添加自己的解析记录,包括 A 记录(IP地址)、CNAME 记录(别名)、MX 记录(邮件服务)等等。Nameserver 这个地方,ZoneEdit 会给出自己的两台服务器地址,稍微记一下数字较小的那个服务器的地址。
  3. 域名解析记录添加完之后,选择 ZoneEdit 的 Advanced 页面,打开最下面的“Edit Security Settings”,然后在“Restrict zone transfers to these IP’s”这个编辑框中填入“0.0.0.0/1;128.0.0.0/1;”(不含此处的引号)。注意这个填法将允许所有的区域传送请求,直白的说就是你的域名记录将对所有人公开。这么做是为了方便,因为 EveryDNS 或者 XName 对于他们的区域传送服务器的 IP 说法十分不清楚,而且时间长了也有可能变动。只好图个方便在这里允许所有的人来抓取 DNS 记录。相信一般人在这里也不会藏什么秘密。 :-P
  4. 来到 EveryDNS 的设置页面。左边是添加记录的地方,basic 框中填入你的域名,比如 xiaoding.org ,选中下面的“Make domain secondary using”,然后输入刚才 ZoneEdit 的那个服务器的地址,点击“Advanced”按钮,添加就完成了。
  5. 在 ZoneEdit 的 Nameserver 选项中,把 EveryDNS 的四台服务器地址添加进去。分别是 ns1.everydns.net ns2.everydns.net ns3.everydns.net ns4.everydns.net
  6. 设置到此结束。EveryDNS 的服务器会自动地向 ZoneEdit 的 Master nameserver 同步。等几个小时以后可以查询自己的 DNS 记录以便确认是否同步成功。

使用如下命令查询 DNS 的 SOA 记录:

nslookup -q=soa xiaoding.org ns3.zoneedit.com

查询结果示例:

xiaoding.org
        primary name server = ns3.zoneedit.com
        responsible mail addr = soacontact.zoneedit.com
        serial  = 1242714018
        refresh = 14400 (4 hours)
        retry   = 7200 (2 hours)
        expire  = 950400 (11 days)
        default TTL = 3600 (1 hour)

注意把 xiaoding.org 换成自己的域名, ns3.zoneedit.com 换成自己的域名解析服务器(每个人可能不同)。针对每个服务器都查询一次,在返回的 SOA 记录中比较一下记录的序列号是否相同,如果相同即表明备份 DNS 设置成功。这样无论 ZoneEdit 或者 EveryDNS 哪一家有问题,自己受的影响都会小很多。

Wordpress 手动提速 – 缓存优化

May 19th, 2009 16 comments

由于大多数的 wordpress 博客都架设在与他人共享的虚拟主机上,所以速度和优化便成了 blogger 们经久不哀的话题。为了优化,我也看过不少的文章。看来看去,很多人只是老调重弹地讲了 WP Super Cache 插件;以及有些空泛地提出要去除不必要插件、优化 javascript 等,可惜这只说明了方向问题却没有点明该如何朝这个方向去做。只好依自己生平所学,手动地折腾了一把 Wordpress 优化。

服务器端缓存机制

虚拟主机用户一般无法更改服务器的配置,我们也就不能在这方面有很大的期望。不过“缓存”这一手段仍然是一种相对可行的底层优化方法。Wordpress 有众多的缓存插件来支持这一行为,包括 WP Cache、WP Super Cache、DB Cache 等。

WP Cache 和 WP Super Cache 这样的插件通过生成 HTML 静态页面来降低服务器负荷,达到提速的目的。我个人却不太喜欢这样的方式。其原因有:一,这样做会丧失动态网站的灵活性。特别是那些根据客户端不同会作出不同响应的功能。比如我的主题中有一个 is_bot() 函数,用来针对搜索引擎的机器人作出一些 SEO 的调整。一旦我启用了静态缓存插件,便丧失了这种灵活性。有人说这些功能可以改成 Javascript 实现,但真要改动起来也比较麻烦,有些得不偿失。二,某些个人博客的瓶颈并不在PHP执行这个环节,而是客户与服务器之间的网络线路。甚至我认为,个人博客没有上万的 PV 完全没有必要采用静态化的策略。

DB Cache 插件我觉得可以试试,因为它的原理是缓存数据库查询,特别是虚拟主机中数据库服务器不是本机(localhost)时,这个插件会提高响应速度。但必须注意的一点是很多虚拟主机对于每用户可占用的内存是有限制的,如果这个值太低,那么这个插件也不太适用。

把缓存交给用户

与其在服务器上费力地设置缓存,更好的办法其实是“把缓存交给用户”。我用 Firebug + Yslow 分析自己博客的时候,发现它提示我的博客没有给静态内容设置缓存。于是用 cURL 连接到网站上通过观察 HTTP Header 来分析了缓存的机制。我的博客上 Apache 会发送“Last-modified”和“E-Tag” Header,这似乎也是大多数博客虚拟主机的配置。这样浏览器在请求的时候会发出“If-modified-since”请求,让服务器判断请求的内容(比如图片)是否在某个时间(通常是浏览器缓存的时间)以后发生变化。如果没有变化,服务器返回 HTTP 304 Not Modified 响应,浏览器则可以放心地使用本地缓存,从而降低了 HTTP 请求开销。

Yslow 建议给静态内容设置一个“永久”的缓存。这个永久通常是设置一年甚至更长的缓存期来实现的。设置缓存以后,服务器在对请求作出响应的时候会附加一个 Expires Header,告诉浏览器这个东西在多长时间内不会过期。这样浏览器就可以放心地使用缓存,甚至连 If-modified-since 请求和一个 HTTP 304 响应也不必要了。这样就大大地节省了在网络上的开销。访问者只是在第一次访问时会请求动态内容,接下来则会直接使用缓存的内容,达到了“把缓存交给用户”的目的。

实现方法

要做到这个也是件很容易的事情,对于 Apache 服务器来说,使用 mod_expire 就能轻松地设置缓存期。在 .htaccess 文件中加入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<IfModule mod_expires.c>
# 启用缓存机制
ExpiresActive On
 
# 图片缓存时间为 1 年
ExpiresByType image/gif "now plus 1 year"
ExpiresByType image/jpeg "now plus 1 year"
ExpiresByType image/x-icon "now plus 1 year"
ExpiresByType image/png "now plus 1 year"
 
# Javascript, CSS 缓存时间为 12 小时
ExpiresByType text/css "now plus 12 hours"
ExpiresByType text/javascript "now plus 12 hours"
ExpiresByType application/javascript "now plus 12 hours"
</IfModule>

有人要说,如果我的内容改变了怎么办呢?因为这样设置以后浏览器并不会向服务器询问是否有新的内容,而是老老实实地相信自己的缓存内容了。
如果你的改动是少数的几个图片,那么只需要在图片的 URL 后面自己加上一个任意的 query string 即可。比如说原来的图片 URL 是

http://blog.xiaoding.org/wordpress/wp-includes/images/smilies/icon_smile.gif

现在只需要在原地址后面加上一个 query 参数即可,此参数对于静态内容可以任意构造,我此处写的是 AnyQueryString

http://blog.xiaoding.org/wordpress/wp-includes/images/smilies/icon_smile.gif?AnyQueryString

这样浏览器会认为此时的图片与原来的不同,将再一次下载它。于是我们就达到了更新的目的。

盗版aw的网页加载进度条

May 14th, 2009 8 comments

网页上的加载进度条

网页上的加载进度条

在换这个主题前我使用过 awflasherTES 主题,主题很优秀,特别是左上角的那个“正在加载”的进度条给我留下了比较深的印象。换上这个主题之后,有点念念不忘,所以就想着把这个效果再实现出来。

awflasher 早先发了一篇文章《给页面加上Loading效果最简单实用的办法》。然而这篇文章只是给页面左上角加了一个红色的提示块,在网页加载完成的时候消失,并没有进度显示功能。aw 在后来的 TES 主题中融入了此功能,可是文章却没有更新,我只好半是摸索半是学习地盗版了此功能。

首先要给网页加上进度条的代码。如 aw 所言,进度条的位置很重要。如果你的 <head> 部分要加载的东西太多,导致网页迟迟显示不出来,那进度条也没必要加了。用户可能等不及进度条显示出来就关闭页面了。针对这个问题,我作了手动的优化,让自己的页面在 <head> 部分只加载 CSS 和 favicon,至于 javascript 统统挪到后面。这样打开网页的时候就能迅速地显示出进度条,起到提示的作用。

HTML 代码我加在 <body> 的后面了,内容如下,这个“载入中”的提示也可以用 Javascript 输出(有利于SEO)

1
2
3
4
5
<div id="progressbar">
<span id="progressdone"></span>
<span id="progressing"></span>
<span id="progresstip">载入中&hellip;</span>
</div>

progressbar 用来包含内部的三个 span,并进行统一的定位。内部的三个 span 各司其职,progressdone 用来显示已完成的进度,progressing 用来显示进度条的底色,progresstip 则是载入中的文字提示。

接下来是三者的 CSS 样式,决定了这个进度条显示出来会是什么样子。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#progressbar{
top:0;
left:0;
position:fixed; /* 固定在浏览器窗口的左上角 */
border:none;
z-index:4;
}
#progressbar span{
position:absolute; /* 绝对定位 */
height:1.5em;
opacity:0.6;
}
#progressdone{
background:#888; /* 底色 */
width:100px; /* 进度条宽度 */
z-index:5;
}
#progressing{
background:#454545;  /* 进度的颜色 */
width:6px;  /* 初始宽度 6 */
z-index:5;
}
#progresstip{
font-size:12px;
font-weight:lighter;
text-align:center;
vertical-align:middle;
z-index:7;
width:100px;
color:#FFF;
}

接下来是用 Javascript 来动态地控制进度的显示。由于 js 中并没有一种完善的方法可以判断浏览器加载的情况,所以只好用土办法直接上了。

土办法就是在页面的不同位置加上不同的进度值。比如我的页面在文章显示完后显示为 50%,在评论加载完成后显示为 75%,最后的 25% 留给页面的侧边栏和底部。查看我的页面源代码就可以看到 jQuery 控制的进度值:

1
<script type="text/javascript">$('#progressing').width(25);</script>

没有 jQuery 库也可以直接用 javascript 来搞定

1
2
3
4
5
<script type="text/javascript">
// <![CDATA[
document.write('<style type="text/css">#progressing{width:25px;}</style>');
// ]]>
</script>

这样就实现了对进度的控制,在页面的不同地方放上不同的加载值,这要改一下主题的源文件。

最后在 <body> 前插入一段 js 代码来终止这个进度条的使命:

1
2
3
4
5
6
7
8
9
<script type="text/javascript">
$('#progressing').width(97);
$(document).ready(function(){ // document 加载完的时候
 $('#progressing').width(100);  // 宽度调整为 100px 
 $('#progresstip').html('100%');  // 进度字符显示 100%
 // 停顿 0.5 秒后,将进度条隐藏
 setTimeout(function(){$('#progressbar').hide();}, 500);
});
</script>

没有 jQuery 的版本要麻烦一点:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<script type="text/javascript">
//<![CDATA[
document.write('<style type="text/css">#progressing{width:97px;}</style>');
 
function hideProgressBar(){
 document.write('<style type="text/css">#progressbar{display:none;}</style>');
}
 
function finishMyProgress(){
 document.write('<style type="text/css">#progressing{width:100px;}</style>');
 document.getElementById('progresstip').innerHTML = '100%';
 setTimeout(hideProgressBar, 500);
}
document.body.onload = finishMyProgress;
//]]>
</script>

折腾完毕,Enjoy!

自制了山寨版的评论框表情插件

May 14th, 2009 26 comments
自制的表情选择框

自制的表情选择框

最初在博客中也是用的 mg12 写的 Highslide4WP 插件,主要用途是评论框的那个表情弹窗。因为 mg12 不再更新原来的 WP Grins Popup ,只有这个好用了。

前几天给博客做了一下手动优化,主要是加快页面的载入速度。除了 HTML 缓存这种传统的技术之外,还分析了页面 <head> 部分载入的代码。纯HTML代码无关紧要,无非是给页面定义了一些 meta tag 之类的东西,关键是看载入的 Javascript 和 CSS 代码。最后无奈地发现 Highslide4wp 中用到的 javascript 库居然有 31KB 之大,对我来说这无法忍受,只好把这个插件撤下了。mg12 在 WP Grins Popup 的说明中也写到:

但前提是你正在使用 Highslide JS. 如果你不喜欢 Highslide 那样的效果, 只是为了这个表情图标的 pupop 而浪费 50kB 左右的开销以加载 JavaScript 代码, 会显得有些不值得.

后来换上了 ThinkAgain 写的 Wordpress Smilies,虽然效果不够炫丽,但是网页的开销是降低了不少。由于博客中使用了 jQuery 库的缘故,一直琢磨着用 jQuery 做出一个与 Highslide4wp 类似的表情弹窗出来。今天折腾了大半个晚上,总算是搞定了。

弹窗的CSS样式我没有重写(准确地说俺还不太会创造,只能改改),而是直接借用了主题中的 div 容器效果,协调一点也好。至于动画效果,我琢磨着 Highslide4wp 中的那种 expand 效果比较困难,要在四个边上同时进行移动,自己对 CSS 又不太熟,干脆直接用了 jQuery 中的几个效果,看上去也不错 :-) 至少也是动画的嘛。

感谢 mg12 的插件以及主题作者 yinheli ,借用了不少东西。    :-)  

这等山寨的东西我拿不出手,自己凑合着用就行啦。

PS: 下次写一写盗版 awflasher 的“正在加载”进度条的过程。