Month: December 2012

  • A world without time, a world without legend

    Palle Yourgrau的A World Without Time – The Forgotten Legacy of Godel and Einstein即将由电子工业出版社出版。

    我是在Kobo上买的电子版本,断断续续的终于在年前看完了。

    先说一段插曲。我在Kobo上买好这本书并开始看之后,突然萌生了要翻译这本书的想法,但是要正儿八经的翻译,需要和出版社合作购买版权。于是我在饭否上发了一个帖子——纯粹是出于无聊,并不指望有什么实质性的进展。猛禽将这个帖子转@给了柏林兄,而柏林兄继续转发并很快有了确切消息:这本书即将出版。

    很好,这样的好书确实应该快一点的翻译过来,因为2005年到2013年是8年了。爱因斯坦广为人知。而哥德尔就不那么为人所知,他的“不完备性证明”很少为人知,他从爱因斯坦的相对论出发证明存在着“不存在时间的世界”更少为人知。物理学界、哲学界同时选择对哥德尔这一“未能找出任何错误”的结论却一致选择了沉默和忽视——甚至是贬低。

    Yourgrau之前已经写过若干比较深奥的、专门针对业内人士的关于此话题的著作,比如:Godel Meets Einstein: Time Travel in the Godel Universe (1999)The Disappearance of Time: Kurt Gödel and the Idealistic Tradition in Philosophy (1991)。这本书是他为了面向非业内人士而撰写的。

    本书基本有两个部分:第一部分是讲述哥德尔和爱因斯坦之间的友谊。说老实话,这两人的友谊在那个圈子内应该是很出名的,但是我还真的是第一次知道这么多的关于这两人友谊的轶事;第二部分则基本进入关于哥德尔的不完备性证明和“不存在时间的世界”——哥德尔宇宙的论述。最后,作者大声疾呼要为哥德尔正名,他在过去几十年里遭遇的不公平待遇是到了结束的时候了。

    ====

    我不是哲学家,也不是物理学家、逻辑学家,所以对于哥德尔是如何从相对论出发得出证明,以及这个证明对我们这个世界——我们这个世界是不是“哥德尔宇宙”?——到底有怎样的颠覆性的冲击不甚了了。但是,时间作为我们日常生活中最直观就能感受到的一个“概念”(东西?),如果被证明只是存在于我们的主观中,就算是我这样的榆木脑袋也知道这将意味着物理公式里的t失去了客观意义,而只是我们方便量度而认为设置的一个间隔罢了。而人又是如何几乎无缝的将主观时间T与物理公式中的t挂在了一起,是什么内在的连结起到了这个作用?

    总之,如果我们不能正视这些问题,我们也就不会得到问题的答案——或者被证明没有答案。

    ======

    最近好像关于哥德尔的书出了不少。比如《这本书叫什么?》《哥德尔、艾舍尔、巴赫——集异壁之大成》,还有这本即将出版的《没有时间的世界》。看书也可以循着这样的轨迹。于是你看的书会越来越有互相之间的联系,而形成一个圈子。在这个圈子外的书就有可能永远被无视了……这是一个没有书的世界。 这也是一个不再有传奇的世界。大能已死,有事烧纸。

  • 和老彼得下五子棋

    根据老彼得的回忆,我们两个开始下五子棋是从他加拿大回来后“正式”开始的。说“正式”,是说养成每天晚上来几盘(3-5盘)的习惯。

    我们用的规则不是最严格的比赛规则,即所谓开局定式、五手两打的规则,只是加入了先手禁双三的规则。

    一开始他还是很不行的,每次都被我后手击败。

    一直到上个月底,他突然长进了。

    首先是执黑的胜率开始显著回升,现在基本上可以有40-50%(他自己说有50%多)。这个胜率已经保持了很久了,我现在和他后手下也需要很用心。他也掌握了一些基本的规律和下法。

    然后从上个月开始,他能后手击败我了——我们的约定是,只有他先手击败我后,才能在下一盘执后手。然后就一发不可收拾,后手胜率也能有个30%左右了——这个是很显著的进步了。

    IMG_0186

  • HP Microserver

    家里的福珑2F服务器终于不行了……经过5年的辛勤服务(主要是hg repository,还有一段时间的面向外网的WEB服务器),它终于倒下了。留一张照片,作为永久的纪念吧:

    福珑2F

    另外一个不得不抛弃它的原因是2F的源一直没有找到好的,所以支持它mips的架构的软件一直无法更新……再次强烈BS春阳的不作为。

    和pMq聊天的时候谈到HP有一款小型服务器,于是就委托他下单了。 根据聊天记录:

    me: 我只要低配的那个就可以了。 PM 猛禽: N36L是吧?好的 me: hoho PM 猛禽: 有不带内存和硬盘的版本,1999。如何? me: 可以考虑。不够这个差价好像不够大啊 猛禽: 2G/250G的2200 差200 PM 是不够大 就看你要不要那个250G的硬盘了 2G内存不过几十块 就硬盘值点钱 貌似也差不多,硬盘也就200出头 me: 那行吧。让他送个2G的U盘……我就认了……

    结果拿到手的时候,发现:2G的U盘在,插在机箱里的USB里;2G内存在,250G的硬盘也在……根据BT群的一贯原则,这是肾上(和BT群)RP大爆发的结果:

    HP

    边上的是我的路由,这个服务器还是很小巧的。 由于250G硬盘肯定要被拿走,所以我没有装很多软件,只是装了一些基本的东西,跑了几次apt-get来测试一下而已。

  • SF2中使用createNativeQuery和ResultSetMapping

    任氏有无轩”的后台中有一个统计是得出每天对书籍详情页面的访问数量,结果集很简单:一个日期,一个该天的访问次数。

    在原生SQL下,这个并不复杂,如下的语句就可以完成: select count(v.bid) vc, date(from_unixtime(v.visitwhen+15*60*60)) vd from book_visit v group by vd order by vd

    但是这个语句稍作变动(将book_visit改为FQN的引用)在SF2中用常规的createQuery将不能执行,提示date函数不被支持。

    解决这个问题有两种方法,一种是quick-and-dirty的纯原生SQL:

    $q = $em->getConnection()->prepare('select count(v.bid) vc, date(from_unixtime(v.visitwhen+8*60*60)) vd from book_visit v group by vd order by vd');
    $q->execute();
    return $q->fetchAll();

    这个方法简单明了,适合初学者使用。

    作为SF2和Doctrine的推荐方法,我们要使用所谓的ResultSetMapping和createNativeQuery。

    我们可以这样简单的理解,ResultSetpMapping提供了一种映射机制,将原生SQL返回的字段映射到结果集的域,从而使得Doctrine可以以此构造返回的结果集,然后执行SQL语句,并将结果返回。

    应该说,即使你不使用createNativeQuery,而只是用createQuery,Doctrine也还是会隐含的做一个ResultSetMapping的,只是不用显式调用罢了。

    代码如下:

    public function getVisitCountByDay()
    {
    $em = $this->getEntityManager();
    $rsm=new DoctrineORMQueryResultSetMapping;
    $rsm->addScalarResult('vc', 'vc');
    $rsm->addScalarResult('vd', 'vd');
    $q=$em->createNativeQuery('select count(v.bid) vc, date(from_unixtime(v.visitwhen+15*60*60)) vd from book_visit v group by vd order by vd', $rsm);
    $res=$q->getResult();
    return $res;
    }

    这个调用中,最关键的其实是两个addScalarResultvc是标量结果很自然,但是vd为什么是标量结果?Doctrine的文档对此语焉不详。

    我的理解是,一旦结果集中包含了一个标量结果(vc),那么所有其它结果也自然要变为标量结果。STOP。

    本文收录于[go4pro.org]

  • 在Symfony 2中使用原生SQL

    在任氏有无轩站点中,有一个页面是用来给我自己看书籍详情页面的访问记录的,这个页面中需要做一些统计,比如:最近访问的是哪些书籍?访问量最大的是哪些?每天的访问量有多少?

    前两个功能都很容易实现,我也以为第三个功能也很容易实现。

    但事实并非如此。

    第三个功能的实现用原生SQL来做很简单:select count(..), date(from_unixtime(...) ... group by ...就可以了。

    但是SF2中的Doctrine不支持date/from_unixtime函数——这点很奇怪!

    所以必须使用所谓原生SQL,而在SF2/Doctrine下使用原生SQL,按照官方文档,需要进行所谓ResultSetMapping,这是一个技术活。

    我在SF2的官方论坛发帖求救,终于得到了解决:

    public function getVisitCountByDay()
        {
            $em = $this->getEntityManager();
            $q=$em->getConnection()->prepare('select count(v.bid) vc, date(from_unixtime(v.visitwhen+24*60*60)) vd from book_visit v group by vd order by vd');
            $q->execute();
            return $q->fetchAll();
        }

    这真是意料之外的种种无奈啊!