Blog

  • 问题(20120904)

    今天老彼得问了两个问题:世界上最富有的人是谁?世界上最便宜的货币是什么? 这两个问题查了百度都有答案:

    于是他接着问道什么叫通货膨胀。

    我简单的解释道就是货币发行量远远超过了社会物质总量。

    于是他接着问为什么在考虑了货币汇率后,美国的物价还是比中国低?

    这个回答分两部分:一部分是通货膨胀的原因;另一部分牵涉到经济学中很复杂——至少我认为很复杂——的东西。比如劳动生产率、本位货币等。我只是简单的给他讲了一下。

    ====

    老彼得提到六年级体育也将成为挑战。有市里的检查,不过他还是很有信心,只是要提高水平:跑的更快、跳的更远等等。

    他还告诉我他当上了语文组长。

  • 和老彼得一起混的日子

    算来和老彼得一起混的日期也不短了,将近7年了。他从“幼幼幼幼园”大班开始到现在的六年级。

    我大概也只能勉为其难称为一个勉强合格的老爸了:我至今不能记住他的衣服在哪里,第二天又要穿什么,做早饭也比较马马虎虎……

    只是我总保证在家的时候和他一起玩、帮他学习。

    今天晚上我们重拾过去的“每周一问”的习惯。他提了一个很“幼稚”的问题:为什么1+1=2?这个问题其实不容易回答——虽然他认为这个问题很简单,我可以简单的回答一下,然后他就可以去玩了!

    (more…)

  • 博客的新主题

    今天给我的博客换了个主题:Suffussion。

    这个主题是在是……太复杂了!!!

    不过效果一流,希望大家喜欢!

  • 老彼得英语学习Wiki

    今天为老彼得开通了一个Wiki专题:小学6年级英语学习

    顺便谈谈我对小学英语学习的看法。

    我自认英语水平还可以。但是我开始学英语是从初一开始的,入门教材是《跟我学》(Follow Me),电视还是9寸的黑白,老师是胡文仲和Katherine Flower,后来是袁士槟。关于这段历史,网上记录不多,但是这篇文章还是讲述的非常详细,值得一看。

    我对中国人学习英语的看法向来一致:不要太早,在中文还没有学好之前(或者说打下一定基础之前),不适合学习第一门外语(一般就是英语了)。

    所以,老彼得在5年级之前,我都没有怎么让他专注英语,只是在假期让他跟着Follow Me的碟片去看。反正这5年来他的英语也没有怎么学,但是考试成绩也还不差,没有低过95分。这次我之所以要开始抓他的英语,一则是他在加拿大呆了100多天,有了和外国人交流、生活的体验;二来是我觉得和我当年学习英语的时间差不多了。如何抓他的英语也费了我一番脑子。最终我决定用Wiki的方式。我给他注册了一个帐号,这样他可以在Wiki上提出他的问题,我也可以针对性的回答。今天一早我和他沟通了一下,貌似他还很接受这样的方式。看以后的情况吧。

  • 重构“任氏有无轩”——第四天

    好吧,我忏悔:今天的内容很少,根本不是一天的内容。但是,考虑到今天是周末啊…… 今天我只是开始做一些分页构件的准备工作。

    ========

    分页当然很重要。但是在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]

  • 重构“任氏有无轩”——第三天

    今天继续加深书籍详细信息页面的构造。

    在G+上95对我的进展发了一个评论:

    再加上点自动抓取网上共享章节的功能

    对这个要求,我只能说我只能实现一点点。我将在详细信息页面中构造一个显示豆瓣对应书籍的信息的部分。

    另外,我要实现一个功能是在这个页面中编辑书籍tags的功能。

    (more…)

  • 重构“任氏有无轩”——第二天

    重构进入第二天——熟悉我风格的人都知道,这不是真正的第二天。

    今天主要进行书籍详细信息页面的创建,以及对书籍封面的处理。

    页面的创建继续使用Bootstrap来完成,用到的元素包括Hero Unit,Table等。我这里不进行详细的展开。

    相较之前的页面,我准备在新的页面中加入书籍的封面。这里的一个问题是:不是所有我收藏的书我都扫描了封面——以后也许会的,但是目前的话,我觉得用一个类似缺省封面的设计是比较好的。

    (more…)

  • 重构“任氏有无轩”——第一天

    按照惯例,这个“第一天”其实是假的:在我而言,利用零零碎碎的时间完成了“第一天”——即一个比较专注于开发这个项目的人可以在一天,甚至半天时间内完成——的内容。

    对于Symfony 2框架,我就不准备多介绍了。一言以蔽之,这是一个全面而强大的PHP框架。

    这次重构有两个重要的目的:

    (more…)

  • 倪匡《卫斯理》系列

    从5月19日开始,到今天(8月5号)为止,终于完成了倪匡《卫斯理》系列的阅读和整理。

    有兴趣的可以移步我的Wiki专题。 进行这个整理有很多出发点。 一来是断断续续看过很多篇;二来是觉得网络上的版本多有错漏,看了之后觉得骨鲠在喉,说不出的不痛快。

    我不敢说我的整理就是“善本”,但是至少有了改进,希望如果有人愿意,可以继续改进。

    放几张封面给大家看看。