Author: 芳草苑主

  • Javascript bookmark this page in Chrome

    I have a stupid client asked me to add “Bookmark this page” to his web pages. I explained to him how bad usability it is but he did not listen to me. He insisted the majority of web users were as stupid as him, so him wanted to help them bookmark the page.

    Nevertheless, it is not my site and he is my customer. Customer is the God. So I spent some time digging around and found this script.

    <script type="text/javascript">
    //<![CDATA[
    function bookmark_us(){
    var url = window.location;
    var title = document.title;
    
    if (window.sidebar) // firefox
        window.sidebar.addPanel(title, url, "");
    else if(window.opera && window.print){ // opera
        var elem = document.createElement('a');
        elem.setAttribute('href',url);
        elem.setAttribute('title',title);
        elem.setAttribute('rel','sidebar');
        elem.click();
    } 
    else if(document.all)// ie
        window.external.AddFavorite(url, title);
    }
    //]]>
    </script>
    

    However, Chrome browser does not allow us to bookmark any page using javascript. There is no workaround, and I think Google is absolutely right on this.

    My concern is: the above script does not do anything in Chrome. Sooner or later my client will come back to me asking why my script does not work in Chrome. To avoid being questioned, I finally use another solution. It is a jQuery plugin called jBrowserBookmark. It will prompt the correct way to bookmark in unsupported browsers.

  • Set primary display in KDE for Fedora 14

    我用的一台机器的显示卡有两个输出接口,一个是 VGA 接口,另一个是 DVI-I 接口。我以前单用 DVI-I 接口,最近多出一个显示器接在了 VGA 接口,我把 DVI-I 显示在左边,VGA 显示在右边。DVI-I 是主显示器,我也希望 Fedora KDE 桌面环境的 Panel 能固定在 DVI-I 显示器上。

    刚开始用 VGA 时,Panel 仍在 DVI-I,用得很顺手,大概是因为 VGA 是在开机以后才插上的缘故。可是重启后,Panel 死活不肯固定在 DVI-I。登录 KDE 前,登录窗口还是在 DVI-I,可见那时 DVI-I 还是主显示器。可登录后,Panel 就显示在 VGA。我试过很多办法,比如调整 DVI-I 在 VGA 的上下左右各种位置,或者 disable VGA 再 enable VGA,可只要 KDE 探测到 VGA enabled,就把 Panel 移到 VGA。

    怎样在 KDE 里设置某个显示器为主显示器?我查了一下,似乎没有 GUI 可以让我这么做。原因是 KDE 本身不探测哪个显示器为主显示器,而是直接采用 plasma 里的值,而 plasma 本身有 bug(我不确定这个解释对不对)。

    不管原因是什么,我更关心的是解决方案。方法也很简单,run this:

    xrandr --output (primary display name) --primary
    

    其中 (primary display name) 是主显示器名称,可以在系统信息里找到,通常是显示器类型-序号,我的是 DVI-I-1。

  • Lack of EAV framework for php

    最近我在仔细研究 Magento EAV 的机理。

    Magento 的强大跟 EAV module 的强大有很大关系,花点时间去研究很值得。我还发现 Magento EAV module 中一些不足之处,但我无力改进。于是想借鉴一下其他的 EAV framework 是怎么实现的,悲惨的是,如果说到 EAV php implementation,似乎 Magento EAV 就是唯一一个成熟的开源方案。但 EAV java implementation 倒有一些独立的选择。

    这是不是暗示 php 先天不足?尽管 Magento 让 php 在电子商务领域出尽风头,但这很可能是 php 的极致了。

  • Why I love Android

    Many reasons.

    Today I add a new one reason why I love Android – Android never gild the lily “sent from my Android” as iPhone or BlackBerry does.

  • Improve Magento entity setup

    Magento 文档鼓励用 entity setup (Mage_Eav_Model_Entity_Setup) 的方式去定义实体。这个类很强大,但我觉得不够灵活,因为无法用它精确控制 attribute, attribute group 和 attribute set。

    Attribute group 和 attribute set 是在两个维度分组 attribute,这样来组织 attribute 基本够用。但 setup 这个类添加 attribute 时,有不够周到的逻辑:

    如果 $attr[‘user_defined’] == 1 && empty($attr[‘group’]),那么这个 attribute 不会被添加到任何 attribute group 和 attribute set。我觉得更好的逻辑是添加到 general attribute group。

    如果 empty($attr[‘user_defined’]) && !empty($attr[‘group’]),那么 $attr[‘group’] 会被忽略,attribute 总是被添加到 general attribute group。

    没办法,已经这样啦,提供 install entities array 时,就避免进入这两种逻辑吧。

    如果我来重写 setup 类里的 addAttribute 方法,我会:

    1. 忽略 $attr[‘user_defined’] 对逻辑的影响。一个 attribute 的 user_defined 值只决定是否允许用户用 GUI 修改该 attribute。
    2. 增加对 $attr[‘attribute_set_name’] 的检查。如果 !empty($attr[‘attribute_set_name’]),则添加该 attribute 进相应的 attribute set 或 attribute sets。现有逻辑是把 attribute 一股脑地添加进所有的 attribute sets。
  • PAYG handset is not locked to network carriers

    Today, I went into Churchill Square shopping centre. To my surprise, most shops are open on the New Years Day.

    I bought a white HTC Wildfire with an O2 SIM from Phones4u, as a gift for my mother. Phones4u is doing a promotion on 4 or 5 mobiles, and Wildfire is one of them. It is priced at £129.95 with £10 airtime purchase. It claims to be half price, but actually, I find the second cheapest supplier is Tesco, price is £159.97 without airtime purchase.

    HTC Wildfire in white
    HTC Wildfire in white

    Anyway, Phones4u is the cheapest. So I go for it. Then a second surprise – I find the handset is not locked to O2 network. I google for a while, and find it is not just my luck. Pay As You Go handset purchased from independent retailer is usually unlocked.

    This saves me about £10 to buy SIM unlock code.

    I feel very happy for trying to insert an Orange SIM before paying for unlock code.

  • Dataflow profile back to work in Magento 1.5.0.0

    Magento 1.5.0.0 目前还是 alpha2 版,因为安装到第二步就有一个很明显的 bug,本来想等等再用的。

    可是 1.4.2.0 正式版 dataflow profile 跑不起来,一点 “Run Profile in Popup”,出来的 popup 就是空白。我很喜欢用外部编辑器格式化好数据,然后用 dataflow import 到 Magento 数据库。我有很多 modules 也用到 dataflow 来完成初始化,如果 dataflow 跑不起来,会给我造成很大的麻烦。

    联想到 Magento 1.5.0.0 在 release note 里说到它对 dataflow 作了改进,我想很可能修正了 1.4.2.0 带来的 bug。两害取其轻,所以我跳过 Magento 1.5.0.0 的全新安装过程,用 1.4.2.0 的数据库让 Magento 1.5.0.0 跑了起来。果然如我所料,dataflow profile 在 1.5.0.0 下工作正常。

    Dataflow profile back to work in Magento 1.5.0.0
    Dataflow profile back to work in Magento 1.5.0.0
  • SMPlayer can disable screensaver

    刚在 Fedora 14 下用 SMPlayer 看了第一场电影,发现 SMPlayer (当前版本 0.6.9)之前版本恼人的无法阻止进入屏保的 bug 不见了。很开心,电影也好看。

    Linux software 一直在进步。

  • Too early to try Magento 1.5.0.0 alpha2

    Magento 1.5.0.0 alpha2 出来了,我下载来尝鲜。可是,安装到第二步就进行不下去了。提示是:

    There was a problem proceeding with Magento installation.

    Please contact developers with error messages on this page.

    Notice: Undefined variable: params in /path/to/magento/app/code/core/Mage/Core/Block/Html/Select.php on line 142

    这挺令人失望的。

  • I am leaving Zend Server

    Creating domain error after installing Zend Server
    Creating domain error after installing Zend Server

    I used to deem Zend Server is overall a good solution for php website development and deployment. However, over a year’s time I realise it brings so many troubles. It is not compatible with Plesk as shown in the screenshot. I can not solve this problem.

    It stops yum on Fedora. I can solve this problem but, troublesome.

    Do I enjoy any unique feature of Zend Server? None as I can remember. Occasionally I use “debug on server”, but it is a feature of Zend Debug, not of Zend Server.

    Also, Zend Server pulls me back to Apache, to which I prefer Nginx.

    Actually, I have no reasons to love Zend Server. So I decide to leave it.