Author: 芳草苑主

  • Bonjour is not virus

    Bonjour bundled with Sarifi
    Bonjour bundled with Sarifi

    不知道 Bonjour 是怎么进入到我的电脑的,我不用Sarifi已经好多年。我不喜欢Apple的东西,装Sarifi只是为了测试,测试完毕重装系统也没再想着把Sarifi装回来。

    第一次注意到 Bonjour 进程的存在着实让我担心了一把,还以为是什么病毒,Google 了一下才知道是 Apple 开发的一个玩意儿才打消了我的顾虑。今天我再次安装Sarifi,里面提到 Bonjour,因为事先跟 Bonjour 有过接触,所以注意到了,拷屏下来告诉初识 Bonjour 的人,Bonjour 是无害的(但我也没意识到 Bonjour 有什么好处)。

  • Run Magento on GAE

    Google App Engine 不久前开始支持第二种语言 Java,我当时听到这个消息马上开始期盼什么时候 GAE 支持 PHP。

    今天看到 Quercus 项目,它可以让 PHP 运行在 Java 环境,我才意识到不用再期盼在 GAE 跑 PHP 程序,这已成为现实。这下我有事情做了——怎么把 Magento 跑在 GAE 上?

  • Skiing knowhow

    今天一天在瑞士 Titlis (铁力士) 雪山度过。

    在雪山当然是滑雪。我们一组18个人请了个教练,教了我们2个小时,教到后来我都饿了,没力气学了。于是吃饭,我胃口不错,大块大块的蹄膀也对我的胃口。雪山上的餐馆的价格反而比山下的便宜,倒出我意外。另一件意外是终年积雪的山顶并不冷。

    吃饱了有力气了就自己练习,我从山坡上往下滑老是摔跤,摔了很多引人注目的跤,差不多到最后一刻收工才领会到滑雪最基本的技巧:要想不摔跤,就要克服心理障碍,因为从山坡上加速下滑时,人本能地想控制住速度,希望通过重心后移来减速,但事实上,重心后移就会摔个人仰马翻,只有顺势前倾,才能不倒。我只在最后时刻成功地优雅地下坡两次,就听有人喊,赶快下山,缆车5点停机。

    哇,错过缆车末班车怎么办?听说也不要紧,有雪道可以从山顶一直滑到山脚。但是凭着我刚掌握的下坡动作恐怕还做不到这一点,还是赶紧跟着大部队坐缆车下山吧。

  • 轻触米兰

    在有限的天数内游历尽可能的地方,这种旅游思维还是有很多支持者的。我们的旅游团有一个可选的项目就是用一天时间顺访意大利米兰,结果90%的人都选择去。

    我们在报名的时候就选择去米兰,现在想想,倒有些后悔——既然来了瑞士,应该留在瑞士多看几个城市,何必又跑出瑞士去意大利呢?旅游团行程中没安排日内瓦和苏黎世,我们就可以趁今天空档自己去。不过想太多也没用,反正钱已经交了,意大利也没去过。

    还没下车,导游提醒说,米兰扒手多,要我们小心钱物。我们想到上个月在巴黎地铁遭遇女扒手的经历(她们偷窃未遂),旅游中就带着小心,或多或少影响了兴致。一个城市要是不能给游客以安全感,那是整个城市的悲哀。

    米兰在我眼里没有什么可圈可点的,看了一圈,算是来过了。足球场是应该去看看,可是听说去一趟挺费时间,就作罢了;时尚品牌店满地都是,但是这么贵的价格,不符合我的购物理念(我喜欢 Boxing Day 品牌打折时的那种疯狂),所以啥也没买。

  • Luzern小镇静悄悄

    这次行程中没有安排苏黎世(Zurich)和日内瓦(Geneva),不过看过卢塞恩(Luzern),我也能想象瑞士其他城市的风格——安静平和。

    Luzern 6万人口(据说这是市中心人口,不包括乡村人口,他们也分城市和农村,挺有意思),人不多,但地方很小,游客更多,看起来也很热闹。Luzern的标志性建筑是河中央的一个八角小塔,曾经是瞭望塔兼监狱,现在开放,市民可以租来开 Party。

    离市中心不远有座高山 Pilatus,中文叫皮拉图斯山,海拔2,120米,它是阿尔卑斯山脉的前部。我们坐索道上去,索道分三段,前两段连续运行,中途可以上下乘客,第三段必须换乘。第二段开始就可以看到积雪,我就是没想明白:山并不高,气温也不低,怎么还能积雪到4月?

    Pilatus 相对高度只有585米,要是有时间,我倒愿意和很多当地游客一起徒步爬上去。

  • 终于明白英吉利海峡还没有汽车隧道

    今天下午2点在 Brighton St Giles 上车,开始第二次欧洲大陆之行。上一次欧洲游还是上个月的事情,有意思吧——来英国好多年都没去欧洲其他国家玩过,一月之隔却游历两次。

    这次是 Discovery 的团,48人,大巴49座,基本坐满。Discovery 老板亲自带团,挺会做生意的。

    一路坐车,经 Eurotunnel ,两个司机轮班倒,要赶在明天清晨8点到达瑞士 Luzern Youth Hostel International。我们旅客也是很辛苦,要在车上待十多个小时,虽然一路风光很好,也看得人昏昏欲睡。

    上次去欧洲坐的是 Eurostar,这次是走 Eurotunnel。我这才明白 Eurotunnel 不是让司机驾车开过去的,而是把大大小小的车辆全都塞进一节节的闷罐车厢,由火车拉着跑的。一节闷罐车厢可以塞进一辆大巴和两辆轿车。说它是闷罐,是因为这么大车厢,每边只有四五个很小的车窗,不过隧道里没什么风光,大车窗也是摆设。

    晚上在瑞士、德国和意大利三国交界的加油站小憩,领教了瑞士的高物价。

  • DtDdWrapper in Zend Framework

    我尝试着用 Zend Framework 重写了一个程序。在 Zend_Form 上徘徊了好久,研读了 Programmer’s Reference Guide N 遍,还是没有融会贯通。比如说,我想去掉默认的DtDdWrapper,用

    $element->removeDecorator(‘DtDdWrapper’);

    只对某些element起作用,对 Zend_Form_Element_Text 怎么也不起作用,最后发现用

    $element->removeDecorator(‘HtmlTag’);

    倒可行。

    问题是解决了,但还是没摸清 Zend Framework 设计思路。很累。

    续:

    其实,用$element->removeDecorator(‘HtmlTag’); 问题并没有完全解决。后来我用

    var_dump($element->getDecorators());

    查看了默认加载的装饰器以及装饰器的参数,发现对于 Zend_Form_Element_Text 来说,它的 dt 和 dd 并不是由 DtDdWrapper 加载的,事实上 Zend_Form_Element_Text 默认不加载 DtDdWrapper,难怪

    $element->removeDecorator(‘DtDdWrapper’);

    是不起作用的。

    那么,Zend_Form_Element_Text 的 dt 和 dd 是哪里来的呢?我仔细看了 var_dump 的结果,发现

    • dt 是由默认的 Label 装饰器默认的 dt 参数带来的
    • dd 是由默认的 ViewHelper 装饰器默认的 dd 参数带来的

    如果想要 Zend_Form_Element_Text 不套用 dt 和 dd,应该对症下药,修改 Label 和 ViewHelper 默认参数。

    上次用 $element->removeDecorator(‘HtmlTag’); 并没有去除 dt 和 dd,只是误打误撞让页面呈现出视同没有 dt 和 dd 时的效果。

  • Generate a UTF-8 encoded Actinic site

    I don’t like the way of Actinic tackle the problem. For example, if the web server set default charset as UTF-8, it will cause page rendering issue for Actinic. Especially for the pound sign. All the support knowledge from Actinic is redirecting people set the server using default chareset as ISO-8859-1. Then, my question is – why should I use ISO-8859-1 while UTF-8 has far better applicability, especially for multi-national sites?

    Nevertheless, can Actinic generate an UTF-8 encoded site? The answer is yes and no.

    Yes is because I have already achieved it; No is because Actinic can not make it happen for you (at least I won’t know how to control it), so you must do something outside Actinic. Here below is my detailed steps.

    • First, rewrite all requests to actinic generated files to index.php.
    • Second, create a bootscript, name it as index.php. This idea is inspired by Zend Framework. Make sure:
      1. The bootscript should be in utf-8 encode.
      2. The bootscript should be able to include actinic generate files according to request uri.
    • Third, in actinic templates, change meta tag charset to utf-8.
    • Last, at web server, adddefaultcharset utf-8.

    The most tricky part is actinic upload its files in iso-8859-1 encoding, but bootscript is utf-8 encoded. A normal include or require by php will not render pound sign correctly. I use output buffer to hack the problem.

    <?php
    ...
    ob_start();
    include($actinic);
    $utf8out = utf8_encode(ob_get_contents());
    ob_end_clean();
    echo $utf8out;
    ?>
    
  • Zend Framework lack of datagrid component

    Zend Framework is evolving quickly. Some while ago, it did not have Zend_Paginator, but now it’s there. But a component of paginator is enough for me. I want something like Zend_Datagrid. It’s not there yet.

    pao.fresco has developed Datagrid for Zend Framework. It looks good, but I am not confident using unofficial code.

    Magento also implement its own datagrid, but I do not know how to utilise as part of code outside of Magento.

  • Magento needs more features of ajax

    I can not blame Magento for its slow. It is such a big system aim to fit in all sectors of business. After all, after optimisation, Magento can achieve a decent speed on a entry level of server. However, I think Magento developers should bring more features of ajax into Magento. Fore example, when adding a product to compare, Magento give a success message “Product brah brah successfully added to compare list”. Magento currently reload the page to show the message. It is absolutely not necessary. Why not use ajax?