無標題文檔

支持中文的动态文字替换(Dynamic Text Replacement)

前几天看见 iVane 的 Blog 有篇文章 是介绍如何动态文字替换的。但是结尾很遗憾的说这个功能强大的软件不支持中文。

我当时就答应下来帮他 Hack 一下。过了几天我差不多把这个事情给忘记了,直到他今天下午「催」了我一下,我才记得有这回事情。iVane 兄弟不好意思啦。

对了,让大家久等了。这就是支持中文的动态文字替换(Dynamic Text Replacement)。需要有几点要说明:

  1. 页面(HTML)的编码要是 utf-8 的(我使用这个编码测试的,其他的编码没有测试过)
  2. 字体文件尽量使用英文文件名,以免造成不必要的麻烦
  3. 第一次运行由于需要生成图片,所以效果在第二次运行的出现
  4. 调用的时候使用文件名(UNIX 主机请注意大小写),比如文件名为 jianyy.ttf 则在 css 中设置名称为 jianyy (参看 DEMO 的 CSS 文件)。
  5. 由于使用缓存机制,请务必将 dtr/cache 目录设置为可写
  6. 经过测试,虽然此程序使用了缓存机制,但是占用的服务器运行资源还是比较多的,请谨慎使用
  7. 最后就是注意下字体的版权问题,DEMO 中的字体为「简 YY 体」版权未知

最后 DEMO 在这里 ,打包的文件可以在 这里下载 ,相关的教程可以参看 iVane 兄弟的 相关文档

如有任何问题,欢迎留言。

闻 Angelived 团队解散

清早忽闻 Angelived 团队解散了,这对我来说是莫大的遗憾,因为 Angelived 中文翻译 Blog 是我每天必读的 Blog 之一。

https://friable.rocks/_/2007_11_20/1195525048.jpg

根据 官方所言 ,解散的原因是因为「制度不健全是导致团队越来越没有积极性」。我本人对此也深有感触。回想即将过去的 2007 年,我已经听闻不少的团队要么停滞、要么就是解散。七月份的 fcitx 事件 至今都没有恢复回来。

这使我陷入深深考虑中,为什么一切开始都是激情的团队在一段时间以后就会逐渐的冷却,甚至是冻结。我想正如 Angelived 所说「制度不全」是原因之一。从微观上讲,开源或者是公益的项目本身也是项目的一种,但其比传统的公司式项目开发要灵活很多。成员可以随时选择加入,也可以随时选择离开。这就需要一定的制度来健全人员的分工合作等等问题。

其次,基于网络的项目往往自身是没有任何报酬的。这点可能会涉及到成员的个人利益问题。刚加入时是一种激情,而长期以往无论精力还是时间上,没有任何人有义务去做这些无谓的花销。这就是理想和现实之间的差距。

再次,每天重复的劳动也会产生一种疲劳感。项目成员除了牺牲自己的业余时间、自身的精力和时间外,还需要处理各种不同的问题,比如成员之间的沟通合作等等。可以想象 Angelived 的成员每天都会「机械」的翻译国外的文章然后相互校对,我以前所参与的 fcitx 项目 也会在编写代码的同时,每天都要处理使用者反馈的 bug 、改进意见等等。

要改变这种情况,不是一朝一夕的,健全制度是一种可行的办法。同时对于团队的成员来说,保持激情的同时,有目标乃至有一定的报酬(无论是精神上还是物质上的)也是同等重要的。国外对此就做得非常的好,开源和公益项目除了有各大公司支持以外,他自身也有一整套自我盈利的系统。比如 Mozilla 基金会Linux Kernel 团队 等等,这都是我们国内相关团队可以值得借鉴的地方。

最后, Angelived 所言「博客暂时停止更新一段时间,不过我不会放弃它的」,这也让我感到深深的触动。作为其团队的受益者之一,我看见他们还是执着着自己的理想和激情。我认为这样的团队是不可能被暂时的困难所击倒的,我期待 Angelived 回来的那天。

我看好鲜果阅读器

第一次知道 鲜果阅读器 是在今年五月底的时候。那个时候我并不怎么在意,因为我一直是 Google Reader 的忠实用户。我一直以为鲜果是 抓虾 的 Copy 而已,并没有怎么的在意它。而近期无意间关注了下鲜果阅读器,我发现发的界面有很多的改变,功能也比刚上线的时候增强了不少。

这下有好戏看了,我要看看抓虾怎么对于这个用户群完全一样的对手了。我当初在选择在线阅读器的时候在抓虾和 Google Reader 之间犹豫不决。虽然我最后选择了当初只有英文版本的 Google Reader,但是我一直很期待 Google Reader 能像抓虾一样有一个 RSS Feed 的共享社区。

曾经有一段时间我每天上抓虾看下是否有其他「更精彩」的 Blog,然后将其拉回 Google Reader。我之所以那么「执着」的使用 Google Reader 是因为它出色的兼容性和易用性。从兼容性方面来说,Google Reader 几乎可以在任何的浏览器上使用(甚至包括了移动版本的 Opera Mini);其次从易用性方面来说,Google Reader 几乎可以不用设置,你直接将 Rss 的链接加入 Google Reader 以后就可以了。之所以依赖 Google Reader 也部分其他的原因,就是 Firefox 能直接将 Rss 扔到 Google Reader 中。要知道,使用 Google Reader 的大部分用户同时也是 Firefox 的使用者。

说道这里似乎有点离题了,我所以看好鲜果是因为它清楚的市场定位。鲜果近期推出了「博客认领」的功能,它可以将博客和其作者对应起来。这个功能意义是非常巨大的,它摆脱了以前单一的 读者 - 读者 共享方式,使 Blog 的作者 - 读者 之间有了一个直接的交流。

鲜果的「热榜」功能则能直接的给出相应分类下订阅量最多的博客。订阅者的「羊群效应」是明显的。设想一下,刚了解怎么使用 Rss 的用户保证会满天下的寻找 Rss Feed,最终他们往往「相信」的是订阅最多的 Blog。

鲜果的「雷达」软件是在线阅读器的衍生。它可以让用户在桌面端随时知道自己的 OPML (Rss 订阅列表)更新。这是一个非常不错的功能,鲜果的确是想用户所想。

说了那么多,但是我目前还是处于观望状态。对于我「这些」原本就使用某阅读器的用户来说,适应也一种过程。Rss 阅读器本身就是一种粘性非常强的产品。

目前的鲜果已经可以用「优越」两个字来形容了,但是我个人认为还有一些细节可以考虑一下。比如用户的自身的阅读趋势。这点在 Google Reader 中本人使用的非常的频繁,因为它可以迅速知道哪些频道是许久未更新哦,哪些频道是自己最常看的。其次,将推荐或收藏(Google Reader 中称为「加注星标」和「共享」)自身生成一个 Rss Feed,这样可以被 Feedsky 等进行 Rss 合烧,让更多的读者知道我们(Blogger,内容的产生者)每天在阅读那些条目。

https://friable.rocks/_/2007_11_19/1195483711.gif

最后,发布一张我的 Rss 订阅比例,虽然 Google Reader 还是是以「压倒性」的优势占据了大部分的 Rss 阅读器市场。不过我有理由相信,依据目前鲜果的发展态势,完全可以有更好的作为。

有关 PHP 和 MySQL 时区的一点总结

由于暂时使用国外的空间,在我发布 Blog 的时候发现时间总是不对。依据我以前编写程序的经验,这是时区的问题。这个问题解决起来并不难,写下我的解决途径以便日后参考。

PHP 脚本端的市区设置可以在 php.ini 下设置 date.timezone 键的值为 'Asia/Shanghai' 即可。但是通常共享虚拟主机本身没有修改 php.ini 权限。这个时候就应该在程序公共部分加入

ini_set('date.timezone','Asia/Shanghai');

动态修改 php.ini 的设置。之后可以测试一下时间是否正确:

var_dump(date());

如果服务器的本地时间是正确的,那么一般就能解决问题了。附,PHP 5.1 以上提供了专门的函数修改对应的时区:

date_default_timezone_set('Asia/Shanghai');

建议使用此函数,因为更通用一些。对应 'Asia/Shanghai' 其他可以使用的大陆时区还有:Asia/Chongqing 、Asia/Shanghai 、Asia/Urumqi (依次为重庆,上海,乌鲁木齐);港台地区可用:Asia/Macao、Asia/Hong_Kong、Asia/Taipei(依次为澳门,香港,台北);还有新加坡:Asia/Singapore;其他可用的值是:Etc/GMT-8、Singapore、Hongkong、PRC;老外好像把北京漏调了。

但是,在我修改成功 PHP 端的时区以后发现日期并没有正确的记录下来。这个时候我考虑是否是数据库的问题。果不其然,因为程序插入的函数并没有调用 PHP 的时间,而是直接使用 MySQL 的 CURRECT_TIMESTAMP。这个时候就要考虑是否能修改 MySQL 方面的时区。

参考了 MySQL 的文档,发现一个可行的 SQL 语句为:

SET GLOBAL time_zone = '+8:00'; 

其中 '+8:00' 是东八区的表示方法,其他的市区依次类推。而我在数据库模型中插入改语句发现权限不够(该死的虚拟主机提供商)。接下来我调试了很多语句,比如:

DATE_ADD(UTC_TIMESTAMP(), INTERVAL 8 HOUR);

显示时区的 SQL 语句:

SHOW VARIABLES LIKE 'system_time_zone'

等等。而由于 MySQL 权限的限制并没有彻底的解决方案。我 Google 了下,发现老外这个有 一个非常好的解决方案 。但是他需要修改每条插入数据的 SQL 语句。这样的方案并不是非常的有效,一旦数据库时区改成正常,那么相应的 SQL 语句又要改回来。

而我考虑既然 PHP 端已经可以正确的解决时间的问题了。MySQL 数据库方面虽然可以使用相应的函数解决,但是如果日后迁移到别的主机环境又要改回来。而相应的字段是一个 TIMESTAMP 类型的,默认的值为 CURRECT_TIMESTAMP,当然是可以指定时间的。

那么我的做法就是让 PHP 插入当前正确的时间,这样虽然程序方面需要做相应的修改。不过日后配置修改起来只要修改一处就可以了。最后插入数据库的时间注意一下格式:

date('Y-m-d H:i:s')

这样就可以解决问题了。附,一些非常好的参考资料:

  1. http://www.modwest.com/help/kb6-256.html
  2. http://topic.csdn.net/t/20060503/07/4728521.html
  3. http://www.phpchina.com/5173/viewspace_5132.html
  4. http://www.phpx.com/pth110355.php

更新:由此 wiLdGoose 兄说他也碰到同样的问题,但是无法解决。结果经过种种的假设和判断以后,到最后发现原来是 Zend Studio 的时区配置问题(我狂汗ing)。看来除去运行环境,开发环境也是需要注意以下的。

无聊会议中的涂鸦

有时候技术人员就是怕开会,毕竟有些东西我们是不关心的。但由于「种种」的原因我们不得不参加这样的会议。而在「浪费」无聊人生的同时我们伟大的技术人员就会做些「无聊的事情」,比如在会议上随手涂鸦。我 「有幸」参加了这样的会议,于是乎我就做出了些和公司「不兼容、不和×谐」的举动。

https://friable.rocks/_/2007_11_16/1195209773.jpg

咳咳,这个是无敌猪!它身披铠甲,手持作战武器,HP 为惊人的 1e10(这辈子都不用喝红了)。但是它唯一的遗憾就是没有头发。

https://friable.rocks/_/2007_11_16/1195209923.jpg

下面出场的是无敌猪永远的对手 -- 金刚猫。别看它弱小的身体,但是它尾巴上的蝴蝶结已经出卖了它。它那间不可摧的牙齿似乎能咬掉一切东西(沙丁鱼罐头、肉末粉丝、蟹糊酱等)。

https://friable.rocks/_/2007_11_16/1195209429.jpg

谁说开会的时候就不能泡妞了?!下面是两只栗子的爱情故事。他们在一个阳光明媚的早晨,迎着乌鸦的叫声(淫×叫?!)。栗子哥哥终于按耐不住心中澎湃的心绪拖着一朵小花(竞猜时间:到底栗子哥哥拿的是什么花呢?猜中将本人初吻一个),向栗子妹妹表白。

https://friable.rocks/_/2007_11_16/1195209446.jpg

上面是放大的版本,但愿栗子哥哥能成功!有关后续,Gracecode.com 会陆续报道请持续关注本 Blog!最后,在议会上涂鸦是非常不道德的行为,它破坏了公司的纪律、公司的发展以及公司对你的期望。请各位看官切勿模仿,否则被自己伟大、纯真、善良的主管看见了后果不堪设想。

附,上述涂鸦大图 打包下载

我的照片

嗨!我叫「明城」,八零后、码农、宁波佬,现居杭州。除了这里,同时也欢迎您关注我的 GitHubTwitterInstagram 等。

这个 Blog 原先的名字叫 Gracecode.com 、现在叫 「無標題文檔」 。 其实无所谓叫什么名字,作为码农知道取名是件很难的事情。最后想到的这个名字,其实都没啥特别的含义,系统默认的文件名而已。

作为八零后,自认为还仅存点傲娇式的幽默感,以及对平淡生活的追求和向往。 为了免得对号入座和不必要的麻烦,声明本站点所持观点仅代表个人意见,不代表自己所服务公司的立场。

如果您想联系我,可以发我邮件 `echo bWluZ2NoZW5nQGdyYWNlY29kZS5jb20K | base64 -d`

文章

项目