« Posts by Justice

闲话多提交按钮的HTML表单

在 Web 应用中,最常用的服务器端与客户端的数据交互是通过提交 HTML 表单实现的。以 HTML 4.01 为例,规定当表单提交时,会将 <form> 元素中的 Successful controls 的当前取值提交到服务器。所谓成功控件需要有以下几个条件(但不仅限于此):

  1. 必须有控件名字,即必须包含 name 属性
  2. 如果表单中有多个提交按钮,只有被点击的那个按钮可以是成功的
  3. 不能是禁用状态,即不含 disabled 属性
  4. 不是 Reset button

现在我们考虑一下这样的场景,在某个表单中我们需要用到多个提交按钮(Submit button),就如同 WordPress 后台写文章那样的表单,我们在编辑完文章内容后,可以选择保存草稿或是直接发布。下面图中所示是一个简化的发布页面,可以填写文章标题、内容之后选某一种提交形式: »Read More

主题更新: SimpleDark 1.3

本想在 6 月份发布的,但是修修改改又拖了很久。

主要修改的部分如下:

  • 表情选择菜单
  • 增加了表情选择菜单,方便在评论中添加表情。
    Smileys

  • 评论编辑

    增加了评论编辑功能,使未注册访客可以在前台快速编辑自己在之前 30 分钟内提交的评论。目前很多博客使用的是 Willin Kan 的 Ajax comments 来提供有关评论的 AJAX 功能,也包括快速编辑功能。但是这段代码实际上是有漏洞的,只要懂点 Web 技术的人可以很轻松地修改使用这段代码的站点上其他任何人的评论。而且经过沟通看样子 Willin 暂时不准备对这个问题进行处理,虽然我觉得这个问题还是需要解决的。我在这里采取的是用评论者发表评论时使用的 Email 地址和 IP 地址进行验证。除此之外,在关闭 AJAX 时,评论快速编辑功能依然有效。
    »Read More

在WordPress中获取指定评论所在分页页码

WordPress 2.7 以后便自带了评论分页功能,那些有很多评论的热门日志页面在开启了评论分页后加载速度就会大大加快,同时也节省了站点的不少流量。但是评论分页以后,WordPress 没有提供一个方法让我们来查询某一条评论位于它所在那篇文章所有评论分页的第几页,这样就带来了一些不便。WordPress 提供了一个 get_page_of_comment 函数,用来获取评论所在的分页数。但这个函数有一个 bug:当嵌套评论选项被关闭,但是数据库中却存在之前未关闭选项时留下的回复的情况下,分页数会计算错误。比如说,本站使用了 mg12 的插件 WP-RecentComments 来显示站内的最新评论,它会在每条评论的作者名字上加上一个指向该评论位置的链接,比如:

http://lync.in/projects/simpledark/#comment-1778

当评论没有分页或者这条评论位于最新的一页评论时,这样没有问题,因为在当前的页面就能找到这条评论。但是如果后面有了较多的新评论,使得这条评论在其他分页的时候,这个页内位置就失效了,上面的这个链接指向的页面也就无法。某篇文章的某个具体评论分页的地址一般还要加上 comment-page-n 或者加入参数 cpage=n,比如:

http://lync.in/projects/simpledark/comment-page-9/

»Read More

少壮不努力,老大做什么?

难得发一篇水文。

都常说少壮不努力,老大做 IT。于是我在 Google 里搜了一下“少壮不努力 老大做”,一看果然有各种各样的答案(当然 IT 还是绝大多数)。写了个程序取了前 50 页的结果统计了一下,发现做设计和审计的朋友们也都自感悲催...但是居然还有“公仆”,我表示无法理解。

先玩一下 Google Chart API:

然后还玩了一下字频图,工具是 Tagxedo,非常有意思,大家可以试试。

字频图

显然数据更多的话会更有趣,还能选则不同的布局图案,下次有时间可以好好介绍一下 Tagxedo。

利用Crowbar抓取网页异步加载的内容

在做 Web 信息提取、数据挖掘的过程中,一个关键步骤就是网页源代码的获取。但是出于各种原因,很有可能网页上我们感兴趣的内容是在 HTML 文档加载完毕后用客户端 JavaScript 输出或是利用 AJAX 异步读取的,这样一来直接使用 POCO 或者 HttpClient 这样的库来下载文档是得不到这些内容的。当然可以选择自己实现 JS 代码的解析执行,不过借助浏览器的功能来完成这些脚本的执行无疑要简单可行得多了。

Crowbar

Crowbar 是 MIT 的 SIMILE 小组编写的一个工具,它利用 Firefox 的 Gecko 引擎执行网页上的脚本,然后将脚本执行过一段时间后的 DOM 重新序列化为 HTML 代码进行输出。

Crowbar 这个词本身的意思是撬棍,用来拔钉子的一种工具,用在这里也是很有寓意,用 Crowbar 来读取本来很难直接获取的异步输出的内容就像用撬棒拔钉子那样容易。不过遗憾的是 Crowbar 貌似在几年前就停止了开发,还没有正式 Release,也许作者已经发现了完成这一任务的更好的手段,但我目前还没有找到。 »Read More