今天升级了我的维客后台。我用的是DokuWiki。
感觉界面清爽了不少。
另外,安装了一个插件:MarkDownExtra。有了这个插件,只要我创建的页面后缀设置为md,就可以直接用MarkDown的语法了。
给大家看个效果:
这么一来,可以基本解决Wiki没有离线编辑器的困扰。
今天升级了我的维客后台。我用的是DokuWiki。
感觉界面清爽了不少。
另外,安装了一个插件:MarkDownExtra。有了这个插件,只要我创建的页面后缀设置为md,就可以直接用MarkDown的语法了。
给大家看个效果:
这么一来,可以基本解决Wiki没有离线编辑器的困扰。
这两天在试着看Go语言,Go语言的文档很丰富——但是是英文的,我看当然没有问题,但是有几次恶作剧的想,能不能修改一下把各个内置库函数的说明改成中文呢?
我随便找了一个proc.go文件,将其改为UTF 8编码,然后修改其文档为中文,在命令行下效果是这样的:
这个当然不好。我搜索了一些站点,在这里找到了解决方案:
http://pjq.me/wiki/doku.php?id=tips:enable-utf8-cmd
最终效果是:
好吧,我忏悔:今天的内容很少,根本不是一天的内容。但是,考虑到今天是周末啊…… 今天我只是开始做一些分页构件的准备工作。
========
分页当然很重要。但是在Symfony 1.4之前,其提供的Paginator构件其实并不很恰当:它融合了相关数据集返回、构造实际的导航条这两个本来一个属于M,一个属于V的工作。按照Quick-and-Dirty的原则来说,这样做也无可厚非,只是会破坏Synfony一直推崇的MVC分离的原则。
所以,回头一想,如果开发者要自己开发一个Paginator就会很简单:获得相关的数据集由M去完成。这个步骤中的一个关键是获得符合筛选条件的总记录数,我们当然不能傻乎乎的将所有记录返回然后count一遍,应该在数据库服务器端就完成这个统计。由于今天我们不是做M端,也不是做V端——啊?那我们今天讲虾米?!——所以我会另开一文。
今天只是准备工作:测试。
按照TDD的思路,在实现一个功能之前,就先描述好这个功能应该获得什么输入,得到什么输出是非常好的习惯。
在分页模块中,有一个功能是必须实现的,即:已知总记录数(n),每页显示记录数(rpp),需要知道总共要多少页(p)。 一般的算法就是p=ceil(n/rpp)。但是这样的算法对不对?比如,如果总记录数正好是每页记录数的整数倍,那会不会出问题? 对于这种验证,用单元测试就会很方便。 首先编写Paginator类,其中有一个函数是getTotalPages:
// srctrrsywxBundleUtilityPaginator.php
namespace trrsywxBundleUtility;
class Paginator
{
private $page;
private $total;
private $style;
public function __construct()
{
$this->page = 1;
}
/*
* var recCount: the total count of records
* var $rpp: the record per page
*/
public function getTotalPages($recCount, $rpp)
{
if ($rpp == 0)
{
$rpp = 20; //This is forced in this. Need to get parameter from configuration
}
$r = ceil($recCount / $rpp);
return $r;
}
}
然后创建对应的测试单元软件:
// srctrrsywxBundleTestsUtilityPaginatorTest.php
namespace trrsywxBundleTestsUtility;
use trrsywxBundleUtilityPaginator;
class PaginatorTest extends PHPUnit_Framework_TestCase
{
public function testGetTotalPage()
{
$paginator = new Paginator;
$r = $paginator->getTotalPages(1, 0);
$this->assertEquals(1, $r);
$r = $paginator->getTotalPages(10, 20);
$this->assertEquals(1, $r);
$r = $paginator->getTotalPages(20, 20);
$this->assertEquals(1, $r);
$r = $paginator->getTotalPages(21, 20);
$this->assertEquals(2, $r);
$r = $paginator->getTotalPages(100, 20);
$this->assertEquals(5, $r);
$r = $paginator->getTotalPages(110, 20);
$this->assertEquals(6, $r);
$r = $paginator->getTotalPages(110, 10);
$this->assertEquals(11, $r);
}
}
在命令行中,运行如下命令:
phpunit -c app srctrrsywxBundleTestsUtility
如果一切顺利,那么就会得到:OK (1 test, 7 assertions)这样的提示。否则,就一定是某个用例下出了问题,需要针对这样的问题进行处理。
【本文收录于[go4pro.org]】
只放效果图:

从左到右分别是:
看来主要问题还是出现在Calibre对ePub的转换上。其它来自Office的PDF文件都非常清晰。
今天继续加深书籍详细信息页面的构造。
在G+上95对我的进展发了一个评论:
再加上点自动抓取网上共享章节的功能
对这个要求,我只能说我只能实现一点点。我将在详细信息页面中构造一个显示豆瓣对应书籍的信息的部分。
另外,我要实现一个功能是在这个页面中编辑书籍tags的功能。
重构进入第二天——熟悉我风格的人都知道,这不是真正的第二天。
今天主要进行书籍详细信息页面的创建,以及对书籍封面的处理。
页面的创建继续使用Bootstrap来完成,用到的元素包括Hero Unit,Table等。我这里不进行详细的展开。
相较之前的页面,我准备在新的页面中加入书籍的封面。这里的一个问题是:不是所有我收藏的书我都扫描了封面——以后也许会的,但是目前的话,我觉得用一个类似缺省封面的设计是比较好的。