Blog

  • 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();
        }

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

  • 任氏有无轩一些小的改动

    这几天一直在“小打小闹”的改进我的任氏有无轩。

    今天完成了一个小功能:

    在书籍详细页面显示该书被访问几次以及上次访问的时间。

    由于我对处理文本文件(必然会牵涉到的正则)不是很熟,所以还是用数据库来完成。

    遇到的一个意想不到的问题是如何写日期/时间类型。

    最早我将数据类型定义为datetime,但是在写入时如果用string变量,出现:

    Fatal error: Call to a member function format() on a non-object in G:wwwrsywx2SymfonyvendordoctrinedballibDoctrineDBALTypesDateTimeType.php on line 44

    的错误。

    如果用Datetime变量,出现:

    Can't convert object Datetime to string

    错误。 最后我是用一个bigint来直接存储时间戳的方式解决问题……这个世界清静了……

    效果如下:

  • 看访问记录也是一件有趣的事

    任氏有无轩改版后,加入了从豆瓣获得书籍信息的功能。个人认为,这个功能还是很有用,很贴心的。也由此引发了一点想法:我应该记录下哪些书籍是豆瓣还没有登录的。这个功能应该说很容易实现,然后现在一方面我可以看哪些书豆瓣未曾登录,一方面可以随时访问这个页面看看我的站点——特别是书籍详情这个页面被访问了几次。

    这个感觉还是很爽的,我贴个界面:

    这个还只是截取到今天凌晨3点的访问记录,一天下来数量也还是蛮可观的。

    我表示满足和小小的得意。

  • 任氏有无轩改版彻底完成

    折腾了很久,终于将我的任氏有无轩改版到4.0。

    这次的改版经历了很长时间。

    首先是用Symfony 2.X,这对我是个挑战,因为我之前都是基于Symfony 1.4.X来编写站点的。Symfony的一个最大的特点就是每次大的版本升级都会引入全新的东西,需要开发者去适应,这是闹哪套!

    Symfony 2首先是基于namespace,因此必须有PHP 5.3+的版本支持。我的主机在BlueHost上,应该说BH是很保守的虚拟主机服务商,在外界已经普及使用PHP 5.3的时候,它还死撑着用PHP 5.2。我还为此专门去信询问,回复是他们还要测试。没有这个最基本的平台,我的开发也就没有了动力。

    幸好,BH主机从善如流,一口气开始支持PHP 5.3/5.4,所以我才又重拾开发。

    其次是版面的设计。这要感谢前令狐,在7月份的第一届G4PCC上,他介绍了Bootstrap这个框架。这个框架的存在让我精神一振,因为它可以让一个程序员(而不是美工师)设计出比较优雅、简介的页面。通过简单的摸索,我就已经上手了。

    第三,SF2开始使用Twig模板引擎。这个和之前的基于PHP的引擎完全不同。以前在基于PHP的模板引擎中,可以随时插入PHP代码,但是现在不行,必须要么通过变量传递,要么用Twig内置的所谓filter。当然,Twig引擎本身是非常非常好用的。它支持模板嵌套,支持控制器嵌套——这点至关重要。

    第四,SF2使用的数据库ORM也统一到Doctrine。这个引擎,说实话我到现在也还没有完全掌握。但是确实很好很强大,特别是它的反向工程能力,可以将一个现有的数据库——我的应用中就是这个情形——比较完整的反向映射到mapping,并生成对应的class/Entity。同时,它也支持所谓的Repository,可以统一数据库的操作。很好的实现了M层。

    第五,SF2使用了composer.phar这个鬼东西来管理升级。不知何故,当我进行更新时,总是将DEV版本(而不是Stable版本)拖下来。SF2由于开发速度太快,DEV版本总是有不少bug。而其中的一个bug是,prod环境下第一次生成cache的时候是大小写不敏感的,但是在以后的prod环境下的调用时却是大小写敏感的。因为这个问题,我的站点在发布后出现了很奇怪的问题:我的根目录路径在第一次进入时OK,但是在随后的进入时就会引起500错误。我调了很多次都没有能找到问题,最后是人工降SF2的版本并在dev环境下捉出了这个问题。

    前几天猛禽在G+上说,Drupal也决定将采用SF2作为框架。我对此倒是不意外。

  • 继续吐槽Win8

    继续吐槽Win8。

    别的我就不多说了。说说用到的一些程序。

    首先,肯定一下,兼容性很好。到目前为止,还没有发现不能在Win8下运行(而能在Win7或者Vista下能运行的程序)。

    然后是吐槽开始!

    中文输入法:

    上文中我说过不错,是说界面、联想、词库等不错。但是有两个重大的问题:

    1. 中英文切换取消了Ctrl+Space,而改用要么是Ctrl要么是Shift,这也没有什么——习惯就好了。但是在某些时候,Windows会进入所谓“禁用IME”状态,而禁止用这个热键切换,此时必须用Control+Space再次激活IME!这个就太BT了!
    2. 对于快速拼写的支持很差!很差!比如,我输入zhongyw,在其它任何输入法都应该可以出现“中英文”,而这里会出现“中因为”,我都不知道这是因为什么!

    XBOX游戏

    前几天我下了几个游戏:麻将,Pinball,斗地主,ADERA等。

    首先碰到的问题是好多游戏,要登录XBOX Games!我可以理解微软的用意和良苦用心,但是前几天的XBOX网络严重不通畅啊!我是在中国啊!中国有GFW啊!你不能在当地保存进度吗!然后在网络通畅的时候再同步吗!

    还有斗地主这个游戏实在很极品。如果我在玩的过程中用Win键退出,照理说程序会在后台,保存一些状态啊什么的。可是,等我过一段时间切回去,会重新发牌啊!可怜了我的大小王和4个2啊!

    其它应用

    微软市场简直就是个渣啊!没有什么游戏啊!Where\’s Where\’s My Water? 应用也很烂啊!Flipboard呢? 还有啊,最不能忍受的是渣浪的应用啊!上一个版本进入后不会自动刷新啊!

    界面

    新浪的界面“刷新”按钮在右侧啊!

    可是原生的Mail的“同步”按钮在右边啊!

    这样的时空交错我受不了啊! 最不能忍受的是内置的相片程序啊!导入照片后倒是在主界面可以看到幻灯效果,但是:

    • 点进去不是我在幻灯演示中看到的那张啊!
    • 幻灯演示的时候不会判断是竖排还是横排啊!