Category: 小小草

IT 技术领域学海无涯。其实任何领域都学海无涯,无非 IT 发展太快了,让我有更多嘘唏。希望我掌握的技术有如小小草,虽然渺小,却有旺盛的生命力。

  • Zend_Db ignore default charset of Mysql

    While I set my Mysql database default character set as UTF-8, Zend_Db_Adapter does not pick up the setting. Zend_Db write to Mysql using its own default character set (I guess it’s ISO-8859-1), unless it is specifically told by

    $dbAdapter->query(“SET NAMES ‘utf8′”);

    before

    Zend_Db_Table::setDefaultAdapter($dbAdapter);

  • 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点停机。

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

  • Luzern小镇静悄悄

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

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

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

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

  • 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?

  • From Apache to Nginx

    我感觉配置 nginx 渐入佳境了。配置 nginx 时应该用不同 apache 的思维,最主要的不同点是:

    apache 是 fallback 式配置,比如有两个 <directory> block,分别是 mydirectory 和 mydirectory/subdir。mydirectory/subdir 可以重写 mydirectory 的 directives,但 mydirectory/subdir 没有提到的 directives 就沿袭 mydirectory 的 directives。

    nginx 是 parallel 式配置,location 只能按优先规则取其一。

    另外,我觉得有人批评 apache 层层检测 .htaccess 造成效率低下的一个原因。我感觉这种说法并不妥,很多 apache 发行版默认 allowoverride none,用户只要根据需要在确实需要启用 .htaccess 的那一层启用 allowoverride,这并不造成效率损失,反而带来配置的灵活性。当然,nginx 不需要这种灵活性,因为它不是面向 share hosting 的产品。

    除了内存占用大是 apache 的硬伤,其他 nginx 的优势并不明显,apache 同样可以优化配置达到相应的效果,尽管很多配置不是 apache 的默认配置。(这只是我的总体感觉,我并没有深入去比较,欢迎探讨。)