用 WordPress Shortcode API 实时输出你当前的年龄

包括我在内的很多朋友有这么一个困扰:计算自己年龄不方便,每天要用计算器计算自己今天几岁了,然后到博客的“关于”页面进行更新。今特写一插件,解决我们共同的烦恼。插件启用后,WordPress 会教导 PHP 帮您进行各种复杂生日计算。

<?php
/*
Plugin Name: Wait... How old am I right now?
Plugin URI: http://jiehan.org/tech/output-age-with-wordpress-shortcode-api/
Description: Shortcode that outputs your current age in case you forget.
Version: 250.000 (significant three)
Author: Anonymous
Author URI: http://jiehan.org/
License: GPL2
*/
 
define( 'MY_BIRTHDAY', '1994-12-12' );  // put in your birthday here
                                        // (best in YYYY-MM-DD)
 
function tell_the_world_how_old_i_am( $atts ) {
  date_default_timezone_set( get_option( 'timezone_string' ) );
  $time_i_have_been_existing = date_diff( date_create( MY_BIRTHDAY ), date_create() );
  date_default_timezone_set( 'UTC' );
 
  return $time_i_have_been_existing->format( '%y' );
}
add_shortcode( 'age', 'tell_the_world_how_old_i_am' );
 
?>

然后怎么用?先去 wp-content/plugins/ 下面创建一个文件,把上述内容拷贝进去,然后启用这个插件…

然后呢?然后去改你的页面啦,把 hardcoded(中文不太吉利)的年龄替换成 [age],比如我的:

我是郑界涵。现 Peddie School 十年级学生,今年 [age] 岁了...

将自动被替换为,

我是郑界涵。现 Peddie School 十年级学生,今年 17 岁了...

当然,这个 Shortcode API 在文章页面也适用,你可以随时告诉别人你几岁了。另外,如果不是在文章或页面中,比如在主题的某个地方调用你的年龄,可以写 echo tell_the_world_how_old_i_am( null ); 哦。

注:由于时间原因,当前生日缓存、生日分布式计算、AJAX 或 Comet 真正实时年龄输出将在未来实现。

已知问题

  • 如果你出生地和博客服务器所在地之时区不同,则输出的年龄会有偏差。
  • 如果你博客服务器时间设置不正确,则输出的年龄也会有偏差。
  • 如果你生日写的不对,则输出的年龄也会有偏差。

中文版本 WordPress 功能意见征集

更新:由于收到的反馈极差,因此决定近期不考虑发布此功能。我会将精力重点放在提升翻译质量和将中文补丁的功能拆分成插件上面。

新的设置页面

新增“中国工信部 ICP/IP 备案编号”功能。正在测试当中。此功能将默认关闭。

显示效果:

显示效果

显示效果

有任何意见或问题,欢迎留言提出。请注意,WordPress China 添加此选项的目的是方便中国用户,并不能表明我对我国这个备案制度的立场。这件事情还没有决定,希望大家踊跃提出意见,也许你的意见就是关键性的一票哦。

蛋疼研究之使用 rsync 快速分享文件

今天要传个截图,然而 XMPP 的传文件功能又不太靠谱,因此就想到干脆传到 HTTP 服务器上吧。特写蛋疼脚本一个,供各位看官参考指正:

#!/bin/bash
 
# This is a bash script written by Jiehan Zheng, for synchronizing his file on
# his laptop with the US1 server using rsync.
 
LOCKDIR="/var/lock/rsync_with_us1"
 
cd "$( dirname "$0" )"
 
if mkdir "${LOCKDIR}"; then
    notify-send -u critical -i info "Starting to Sync" "Syncing with US1 using rsync..."
else
    notify-send -u critical -i error "Sync Aborted - Parallel Run" "Lock ${LOCKDIR} is present. Please wait until another process ends, and try again. Exiting."
    exit 1
fi
 
rsync -r -t -v --delete . us1.jiehan.org:~/jiehan.org/statics/public_html | tee rsync_log
 
rm -rf "${LOCKDIR}"
notify-send -u critical -i info "Rsync with US1 Finished" "`cat rsync_log`"

今后这个脚本不再在博客更新了。如需查看我最新的脚本,请访问 http://static.jiehan.org/SYNC

那个 cd 不属于蛋疼范围之内,因为我把这个脚本加入到快捷键里面了,每次按 Windows 徽标键 + ` 就可以自动同步啦。然而在 gnome-keybinding-properties 里面的命令没法使用“当前目录”,因此只好先 cd 到包含它的目录。哪位同学可以帮我找到运行这些命令是在源代码中哪个文件实现的?

至于 notify-send,估计不少人用过,你可能比较好奇这个 -i 参数是怎么回事。没错,是指定图标,那图标可以从什么范围内指定呢?我也一直不知道,直到今天偶然看到某国外论坛帖子有人用这个 notify-send,提到了一个 -i 的值,并且可用,我就用 locate 命令查那个值,终于找到了,你可以使用这个目录里面的图标:

/usr/share/icons/

好吧就说这么多。另外有个问题比较烦人,就是 WordPress 会把文章里的 > 全部改成 &gt;,由于代码是包裹在 pre 里面的,这个 WP-Syntax 插件就会显示出 &gt; 了。你没准知道可以给 pre 加一个属性 escaped="true" 来避免 WP-Syntax 再转义嘛,可是呢,在切换到可视化编辑器以后,这个 escaped="true" 会被吃掉的。

用 Ubuntu 做 AirPrint 服务器实现 iOS 无线打印

本文教你在 Ubuntu 配置 Avahi 和 CUPS,使你的 iPhone、iPad、iPod touch 可以使用 AirPrint 功能打印到连接在 Ubuntu 上的打印机。步骤在下面,完成只需 5 分钟,不骗你哦。

我正在很努力的补作业,前段时间又是忙申请,又是忙 TOEFL,还回老家什么的。眼看着几个小时前已经开学了,现在只能补作业。补作业呢,最重要的就是效率,怎么保证效率呢,那么就是借鉴和参考答案的时候别老前后翻,太慢,得想办法不用翻来翻去的才好。

怎么办呢?聪明的你大概想到了,那复印吧!复印,太 out 了吧,复印多麻烦,你得先把作业本上的笔拿下去,起身,开门,打开书房的门,把一体机的扫描盖子打开,作业本打开到答案那页折个死褶,盖上盖子按复印。多麻烦。

看来最优方案应该是这样子的:坐在椅子上,翻到答案那页,拿出你的 iPhone,给答案照张相,AirPrint 无线打印出来,再抄起无绳电话请你妈妈把答案给你从打印机上拿下来,送到你屋里。你的移动距离为 0。

于是呢,就搜索呗。家里买的是便宜打印机,肯定没法实现直接 AirPrint。用英文搜索,确实有一些解决方案,但是找到的都很麻烦,自己要改的配置文件比较多,而且不详细。那我就拿中文,把几种方法结合在一起,给大家推荐一种比较方便的 Ubuntu 作 AirPrint 服务器的方案吧。不要害怕哦,听我的,你是绝对不会碰到可怕的、黑黑的终端的。

Ubuntu maverick 本人亲自测试通过,一会儿有插图。

Ubuntu 有个零配置的网络工具,叫做 Avahi,用它可以方便地创建各种 IP 服务。牛人 Ryan Finnie 告诉我们,AirPrint 大概和 IPP 广播差不多,除了多一个 _universal subtype 和一个 TXT 记录。

你可以只通过向 Avahi 配置文件夹添加 .service 文件的方式,来添加网络服务。另一个牛人 tjfontaine 制作了 Python 脚本,自动搜索你所有设为共享的打印机并创建 .service 文件。

  1. 先在 System > Administration > Printing 通过右键菜单把你的打印机共享,然后在 Server > Settings… 里面勾上 Publish shared printers connected to this system,其它几项根据你的情况选择,但是这项是必须选的,和我们一会儿编辑配置文件有关系。
  2. 然后要调教一下 CUPS 打印服务,其实我也不知道为什么要这样做,但是不做这一步就只能找到打印机,但打印不出来。大概是因为 AirPrint 指定的主机名有问题。按 Alt-F2,输入:

    gksu gedit /etc/cups/cupsd.conf

    回车,输入密码或刷指纹,在很靠前的位置,注释“Allow remote access”的下面,添加如下一行(其实你也不一定加在它下面,只是美观整齐一些…):

    ServerAlias *

  3. 然后来折腾 Avahi,先从这个地址下载 airprint-generate.py 文件,然后扔到你方便的地方,右键,Properties > Permissions > Allow executing file as program 打勾,然后保存。
  4. 双击它,选择 Run in terminal。之后桌面会多出来一个或多个文件,这是它生成的你所有共享打印机的 .service 文件。如果没有,或出错,请安装源里面的 python 包。
  5. 按 Alt-F2,输入

    gksu nautilus /etc/avahi/services/

    回车,来启动一个 root 权限的 Nautilus 文件管理器来拷贝配置文件。把刚刚 py 程序生成的 .service 文件们拖进去。

  6. 好啦,剩下就是重启 CUPS 让刚刚第 2 步的配置文件立即生效啦,Alt-F2:

    gksu service cups restart

好了,剩下的任务就是打印和抄作业了。谢谢大家。

选择打印机和份数

选择打印机和份数

开始打印

开始打印

哦耶,开抄

哦耶,开抄

Ear Candy

日志

PulseAudio 有个软件叫 Ear Candy 可以帮它调音量,比如你在 Rhythmbox 放音乐,然后 Pidgin 来了个消息,它会自动降低 Rhythmbox 的音量… 比如你在 Flash 看视频,也可以设置它自动淡出正在播放的背景音乐。不过 maverick 源里的 0.5 有 bug,Pidgin 来消息它就自动崩溃了,natty 的 0.9 应该修复了…

后来我还是删了这个软件,等 natty 吧…

更新:直接从这儿下载吧!

中国视频嵌入测试

本人预计在 WordPress 3.1 版本中加入用户需求较多的“中国视频网站的嵌入支持”。在 WordPress 3.1 中文版本中,用户将只需在文章中另起一段,写入视频网站的播放网址,即可轻松嵌入视频。

更新:这个功能我已在昨天添加至 3.0.5 版本

如下作为测试和调试之用,不过您愿意欣赏的话也可以哦。呵呵。

下面一段将被替换为视频播放器:

http://v.youku.com/v_show/id_XMjQxMjc1MDIw.html

下面段同时含有 URL 和其它文字,将不会被替换:

文字 + http://www.56.com/u21/v_NTgxMzE4NDI.html

文字 + http://www.56.com/u21/v_NTgxMzE4NDI.html

但是,只插入 URL 是可以的:

http://www.56.com/u21/v_NTgxMzE4NDI.html

我们也将支持土豆网,最后的 trailing slash 是 optional:

http://www.tudou.com/programs/view/o9tsm_CL5As/

最后感谢 Jimmy Xu 同学的帮助。

关于互联网审查的演讲

上回不是说了么,这周五要做关于“Internet Censorship”的演讲。刚刚做完,回来写两句。

N 个周五之前,Yifu 问我要不要去 SDP 讲一讲 GFW,这是个好机会呀,我欣然答应了,于是这周 5 天的晚上基本都在准备这个 —— 因为我们是要用英文讲…

我主要就是用两个实验,和大家一起研究 GFW 究竟是如何屏障网页内容的,同时证明了 GFW(路由黑洞部分)是在中国完成的。

屏障网页内容部分,先给大家讲了 TTL 是怎么回事,然后在 Google 搜索一个正常关键词,用 Wireshark 查看结果,重点注意来自 Google Search 服务器的回应的 TTL;然后再搜索一个被屏障的关键词,查看收到具有 RST flag 的包的 TTL,证明它不是发自 Google 的服务器。

这里有个小的致歉:就是在搜索正常关键字的时候,我发现包很多,就让 Wireshark 停止捕捉包了,然而在搜索被屏障的关键词的时候,忘了打开… 导致无法看到有 RST flag 的包(但实际肯定是有的)。那这可怎么办呢,因为我们都知道,在被发有 RST flag 的包之后,在接下来的几分钟里,是没法再打开 Google 再搜索的,所以呢,我只好使用前一天准备好的 backup 方案 —— 先打开前一天晚上抓到的包。不过希望大家知道的是,不论是现抓的包,还是之前抓的包,结果肯定是一样的。

然后我讲了如何证明 GFW 的位置。又补充 traceroute 的原理(TTL = 0 时,路由器就会返回一个错误消息)。通过 traceroute 两个位于美国的 host,查看包是在何处被 drop 的,然后再 whois 最后一个得到的 IP 地址,得出所属的 ISP 和地理位置。

最后是我们新的 Google Docs 幻灯片,中国或许无法访问https://docs.google.com/present/view?id=dhhzk6c_580d3nxzxw9

关于中国互联网审查的投票

我,我们组,将在本周五学校 SDP 课程上介绍并评论“中国互联网审查”,需要做出一些调查。您的投票将会与人人网上相同内容的投票(12)结果相加之后被展示。请支持 :)

你上网时可曾翻墙访问一些在国内被封的网站?

  • 我平时上网经常翻墙 (70%, 91 Votes)
  • 我平时上网偶尔翻墙 (26%, 34 Votes)
  • 我平时上网不需要翻墙 (4%, 5 Votes)

Total Voters: 130

Loading ... Loading ...

你认为我国政府封锁一些网站合理吗?

  • 不合理,此举剥夺了网民的一些权利 (94%, 124 Votes)
  • 合理,应该大力控制网上信息 (5%, 6 Votes)
  • 封锁网站与我无关 (1%, 2 Votes)

Total Voters: 132

Loading ... Loading ...

非常感谢!