Category: 编程、软件、技术

  • 编程的乐趣

    这两天,和狗屎皮群在讨论一个小应用的编写。作为这个主意的提出者,原型的编写当然应该是我来做。

    在选择原型开发语言时,我还是踌躇了一番。从将来(必然的WEB)扩展来看,用python或者PHP似乎更好,但是我对这些脚本语言的OO特性一直掌握的不好。所以,在挣扎了20分钟后,我还是觉得用C++更“顺手”一些。

    我编程是从来不会先写什么流程图的。在脑海中将应用的框架做了一番YY后,自然就知道了要有哪些底层的类。然后简单的测试例程应该如何写也就清楚了。

    终于今天完成了一个最最最基本的原型。前令狐已经写好了针对Linux,minGW,VC,BCC的makefile,这样不同的开发平台都可以对这个原型进行编译了。我个人测试了BCC和Linux的编译,代码的兼容性应该是不错的。只有在Linux下出现了两个无关痛痒的warning。

    感觉很有成就感。当我看到程序的测试输出和我的想象一致的时候,我还是很兴奋的。

  • 【一日一得】Paamayim Nekudotayim

    在OO的编程语言(如C++)中,有一个很重要的符号:::,即双冒号,一般称其为Scope Resolution Operator,范围解析运算符。

    在C++中,我们可以这样写:

    class Base
    {
        protected int i;
        public showI()
        {
            cout showI();
            //感谢指正,用脚本语言多了,忘记在C++中是没有GC的
            delete d;
            d=NULL;
        }
    }

    (more…)

  • Smarty中用section完成主从表循环

    在我的“任氏有无轩”WEB界面中,有一个是读书页面。这个页面列出了我非但读过、而且写过相关评论的书籍,各个评论将链接到对应的BLOG文章去。 显然,这是一个很典型的“一对多”的主从表循环。原来我是简单的用嵌套循环,现在既然用了Smarty引擎,我就改用了Smarty中的section语法。

    =======================

    Smarty中的section语法说来不复杂——特别是在不嵌套的时候:

    <?php
    //从PHP脚本中assign()一个数组给Smarty:
    $data = array(1000,1001,1002);
    $smarty->assign('custid',$data);
    ?>
    输出数组的模板:
    {* 本例将打印出$custid数组的所有值 *}
    {section name=customer loop=$custid}
    id: {$custid[customer]}
    {/section}
    {*  逆序打印所有$custid数组中的值 *}
    {section name=foo loop=$custid step=-1}
    {$custid[foo]}
    {/section}

    语法是自明的,这里不多做解释。如果牵涉到主从表的嵌套循环,那么语法会稍微复杂一些:

    {section name=reading loop=$readings}
        //循环显示外层循环的内容
        {section name=reading_detail loop=$reading_details[reading]}
        {$reading_details[reading][reading_detail].reviewid} <a
          href={$reading_details[reading][reading_detail].uri}>
        {$reading_details[reading][reading_detail].title}
        </a>
        {$reading_details[reading][reading_detail].datein}
        {/section}
    {/section}

    可见,外层循环(主循环)还是保持基本语法不变,内层的语法中需要特别注意loop=$reading_details[reading]这个loop变量的控制,以及循环显示内层循环的内容时对索引的引用控制。 当然,我使用的是一种最直截了当的方法。在对应的PHP文件中,对各个循环变量可以使用一个类似的嵌套循环来赋值:

    $i=0;
    $arr1=array();
    $arr2=array();
    foreach ($result1 as $master)
    {
        $arr[$i]['aField']=$master['aField'];
        // 更多的外层赋值
        $j=0;
        foreach ($result2 as $detail)
        {
            $arr[$i][$j]['anotherField']=$detail['anotherField'];
            // 更多的内层赋值
            $j++;
        }
        $i++;
    }

    这样就可以完成两个循环变量的初始化,然后再用Smarty赋值给模板变量即可。 Smarty中的section是非常强大的循环控制语句。任何需要使用Smarty进行模板操作的人,必须掌握其语法。也许,它的唯一不足也在于此:对于一个MVC完全隔离,前端界面可能由根本不懂计算机编程的设计人员完成的前端来说,section的语法还是稍微复杂了一些。

  • 换皮了!

    今天换了一个WordPress的皮肤。

    本来想用Aeros皮肤,但是怕被BS,所以换了一个比较中性的Google Chrome的皮肤……感觉还是很清爽的,字体大小也比较适中……

  • “任氏有无轩”改版进程

    今天完成了“读书”界面的改版,前台全部用Smarty,后台是PHP。

    之所以搞了比较长的时间,是因为在读书页面中,牵涉到一个主从表的循环。主表的很简单,而从表的就不那么简单。我足足想了差不多一个礼拜构思数组(数据集)的构成,又用了差不多60分钟完成了代码的编写。

    现在的任氏有无轩已经基本上由Smarty驱动了。

  • 站点后台改版近况

    到目前为止,还是很有收获。很多页面都已经改造到使用Smarty引擎,而且有两个页面(http://www.rsywx.net)和各本书籍的详细情况的页面——后一个页面无法直接访问,需要进入书籍列表后点击一本书籍后进入)使用了XAJAX技术。我个人认为后一个XAJAX技术的应用更加“有用”:我可以在不刷新页面的前提下完成添加一本书的TAG的任务。

    Smarty的速度还是可以信赖的,它的模板编译功能很强大。而XAJAX也很易用,我不用再去学习jQuery或者别的什么ajax框架。

    现在还有读书页面和杂项页面需要改动。然后就要开始加入一些XAJAX的示例页面了。

  • 【一日一得】Ubuntu的版本代号

    Ubuntu很好玩,从4.10开始,就给发行版本起一个名字,一般是“怎样怎样的动物”的结构,而且还必定是相同头声母的修辞法(在英语中称为:alliteration,不过我不赞成翻译为“头韵”)。 列表如下:

    • Ubuntu 4.10 (Warty Warthog):多瘤的疣猪
    • Ubuntu 5.04 (Hoary Hedgehog):灰白的刺猬
    • Ubuntu 5.10 (Breezy Badger):活泼的獾
    • Ubuntu 6.06 (Dapper Drake):整洁的公鸭
    • Ubuntu 6.10 (Edgy Eft):急躁的蜥蜴
    • Ubuntu 7.04 (Feisty Fawn):活泼的小鹿
    • Ubuntu 7.10 (Gutsy Gibbon):有种的长臂猿
    • Ubuntu 8.04 (Hardy Heron):坚强的苍鹭
    • Ubuntu 8.10 (Intrepid Ibex):无畏的野山羊
    • Ubuntu 9.04 (Jaunty Jackalope):快乐的野兔

    ==============

    这个起名方式很好很强大。

    【注:本BLOG开辟新栏目:一日一得。每天都要学习新东西,然后把它记下来。】

  • 新的拓扑结构

    网络调整后,拓扑结构如下:

  • Google出了浏览器

    诡异诡异真诡异,

    Google出了浏览器。

    ===========

    今天BT群一上线,前令狐就公布了Google Chrome发布的信息。作为群内的活跃小白鼠之一(注意!是之一!之一!!),我就让前令狐打包后给我发一份来(我为什么不自己下载?因为公司不允许下载!)

    ==========

    感觉界面比较简单,但是速度确实很快。打开任氏有无轩、狗屎皮都比同样条件下的FireFox快了一些。

    ================

    不过,春阳的问题问的好:支持网银吗?支持支付宝吗?

    当得知是不支持时,春阳说:看来下场会和Google Talk一样……

    -_-||

  • 2F使用感受

    入手2F有段时间了,一直没有时间写使用感受。今天就写一写吧。

    先上照片。

    第一张是全景:

    边上那个白白的小胖墩是我最喜欢的NetGear的SC101。从这张照片可以看到,2F是很小巧的。

    正面:

    正面从左到右分别是好多按钮、指示灯和接口。可惜我一个都没有用。

    背面:

    背后是S端子,DVI端子,网络,VGA接口和电源。由于这个机器是作为服务器运行,日常操作均通过SSH完成,所以只有网络和电源接了。

    ======================

    使用了一段时间后,我的感受如下:

    • 声音和发热量都是可以接受的;
    • 运行速度很快;
    • 缺点是缺少一个额外的网络接口。因此,2F只能接在路由的出口,而不能象我想象中的那样:一头接到WAN,然后另一头接到路由的WAN口。这样2F将可以作为一个proxy和gateway存在;
    • 支持软件已经比较丰富。由于有内部关系,即使少一些什么模块,也基本可以在第一时间搞定。

    我爱2F,严肃考虑再买一个给老彼得用。