Blog

  • 二十年弹指一挥间

    去年(2012年)劳动节的时候,交大1992届我们系的同学进行了一次大聚会。全系150人,到了130多个,对于20年没有碰头的同学聚会来说,已经很不容易了。

    我一直没有写关于这次聚会的东西,一来是因为聚会之后还有很多工作需要跟进(主要是照片整理、聚会纪念册制作),二来是觉得自己浑浑噩噩,根本不能代表我们系那一届,写出来的东西也是贻笑大方罢了。

    今天整理邮箱,发现从交大寄来了两份校报、一份校刊。其中一份校报上登载了我们本次聚会的捐赠10万元;校刊上登载了聚会的报道。我扫描了一下,展示出来:

    校刊报道

    捐赠记录

    还有我代表本班发言的一张照片:

    IMG_1650

    20年弹指一挥间,我们已经有同学去世了。

    人生无常,莫过于此。

  • 我想要的手机操作系统——兼谈其他

    前几天在新浪微博上被516(@TMall莫涯_醉白虾)点名,他让我去看的链接是Ubuntu宣布将推出基于Ubuntu的手机。516要我提炼一下,写个1234出来。我想了一下,这个任务可以完成。于是就有了一下的文字。 它的宣传标语很有意思:

    (more…)

  • 苹果有毒

    看完A world without time,有一个细节令人震撼。 书的作者提到:哥德尔非常、非常喜欢看“白雪公主和七个小矮人”。哥德尔谈到自己的这个爱好的时候,这样说到:

    “Only fables,” he said, “present the world as it should be and as if it had meaning.” “只有寓言(注,这里哥德尔可能搞混了寓言和童话的区别),”他说,“才展现了这世界应有的样子,而且还好像有意义。”

    这是一个非常悲观而且非常“黑暗”的论调。

    (more…)

  • 2012年Windows 8最佳应用

    CNet.com同时也评选了2012年Windows8的最佳应用。原始链接:http://download.cnet.com/2701-33163_4-2051.html?tag=rb_content;main

    • 音乐类:iHeartRadio
    • 相片类:Fhotoroom HDR
    • 实用类:Metro Commander, Start 8。前者是一个Metro界面下的左右分栏文件管理器;后者为你重新显示Start界面……
    • 教育类:Khan Academy
    • 新闻阅读类:News Bento。这个不错。不过内置的站点RSS比较少,不过你可以直接加RSS进去。
    • 食物类:Allrecipes。这个作为单独一类,我表示意外。这个应该是Reference类的吧?
    • 游戏类:Violet Storm for Windows 8。完整版价格在26元,可以试试。
  • 2012年iPad最佳应用

    如约而至,推出了2012年iPad最佳应用评选。原始链接:http://download.cnet.com/best-ipad-apps/

    • 娱乐类:Netflix, GarageBand, Spotify
    • 照片类:Snapseed, iPhoto
    • 社交类:Facebook, Google+
    • 游戏类:Angry Birds Star Wars, Minecraft Pocket Edition Lite
    • 新闻类:Flipboard
    • 效率类:Paper, Evernote
    • 旅游/导航类:Google Maps for iOS——选这个一定是故意的!
    • 邮件/消息类:Gmail, Trillian
  • A world without time, a world without legend

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

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

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

    (more…)

  • 和老彼得下五子棋

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

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

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

    (more…)

  • HP Microserver

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

    福珑2F

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

    (more…)

  • 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

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

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

    (more…)