Blog

  • Never use Kwik Fit

    很多年前,我去 Kwik Fit 修车前问过一个朋友:“Kwik Fit 可靠吗?” 他说,“糟透了,千万不要用。”他没讲实例,我也没有亲身体会,所以我并没有形成对 Kwik Fit 的坏感。

    那时,车的排气管坏了,我公司边上有家 Kwik Fit,我早上把车送给他们修,下班去取,觉得很方便。当然 Kwik Fit 的价格不便宜,但体谅它这么大一个公司肯定有很大的管理费用,所以我也觉得合理,毕竟它有地缘优势。

    那次修车还算顺利,所以接着的年检和保养我又想到 Kwik Fit。恰好 Kwik Fit 又在搞年检和保养优惠促销,我就决定去 Kwik Fit 做年检。年检没有通过,Kwik Fit 要我更换一堆零件,包括全部轮胎和电池。我从未被要求一次更换那么多零件(之后也没有过),有点犹豫不决。考虑到去其他地方重检,可能还是得更换,Kwik Fit 又说只要我在它那里换了零件,年检就过了。还是为了方便,我就咬牙让 Kwik Fit 换上了全部轮胎、电池和其他配件。

    之后我想,可能我的车到了那个时间就得大量换零件了,所以并未觉得 Kwik Fit 有什么出格之处,只是之后再也不用它了。

    后来有一次,车胎破了,拉到一个修理厂,技师怎么也卸不下那个轮胎,最后动用锯子锯断螺钉。技师说,是螺帽拧得过头了。哎,最后一次是 Kwik Fit 拧的。但我还没形成对 Kwik Fit 整体的坏感,只想 Kwik Fit 运气不好,雇了一个不称职的员工。

    最近我觉得电池蓄不住电。今天,我在车内听收音机,所有的灯都是关闭的,只有五分钟,竟然连收音机都放不了了。这才几年啊,又要换电池?!当年我不熟悉行情,现在发现 Kwik Fit 的杂牌电池比 Euro Car Parts 的名牌 Bosch 电池要贵一倍多。贵就贵吧,竟然还是这种质量。

    终于,我跟 Kwik Fit 的缘份全面崩溃,愤愤不平地写下以上文字警示后来人。

  • Play Blu-ray ISO images on Fedora 20

    买了新电视 SAMSUNG UE46F6100,总想试一下它的 3D 效果。我没有 Blu-ray player,也没有 Blu-ray disk,于是下载了一个 Blu-ray ISO 镜像格式的文件。怎么放呢?

    我一开始想在 Sony NSZ-GS7 机顶盒上播放,可是没有可用的 App。Windows 下倒有很多解决方案,可惜它不是我的首选。

    我想的是怎么在 Fedora 20 下播放 Blu-ray disk?如果可行,就可以用 Fedora 20 配一台 HTPC 去客厅播放 Blu-ray disk。

    做之前,我以为这有点难,不太会有现成的 yum package。事实上,很简单。

    首先得有 libbluray,用 yum install 一下就可以。但我的机子也装有 libbluray,不知是 Fedora 20 默认安装的库,还是我装别的软件时带进来的。

    然后加载 rpmfusion repo,装一下 vlc 就可以用 VLC 来播放 Blu-ray disk。

    
    yum install vlc
    
    

    HTPC 又多一个新功能。但是 SAMSUNG UE46F6100 电视的 3D 效果实在一般,要令我赏心悦目的 3D 技术还没有到来啊。

  • TV from France

    春节到了,家里的电视机要升级换代了!我在 Pixmania 网站上订了一台电视机,SAMSUNG UE46F6100 – 46″ 6 Series 3D LED-backlit TV,才 £459.00,including VAT, free delivery, Pixmania’s 24 month commercial warranty。

    samsung-ue46f6100-1

    Image 1 of 5

    当然还有更便宜的 46 寸电视,比如,SAMSUNG UE46F5000 LED TV,£384,同样 including VAT, free delivery, Pixmania’s 24 month commercial warranty。但它不是 3D TV,也不是 200 Hz Clear Motion Rate,相当于我多花了 £75 买这些功能。两年前 B&B 买了一批 3D TV,但这功能在 B&B 客房成了一个摆设。我虽然有兴趣体验 3D TV,但没有合适的时间和地点,现在可以在家里体验了。

    我没有要 Smart TV 功能,因为我不会考虑非 Android 的 Smart TV。英国市面上找不到基于 Android Smart TV,两年前我有关注此类产品,未能如愿。之后买了一堆 Android 机顶盒和电视棒,现在成了鸡肋。我深刻体会到 Android 是以娱乐为主的系统,而我真正想要的是兼顾工作(学习)和娱乐的系统。而且要有深度定制的功能,Android 的定制有软件和硬件双方面的要求,不是我辈玩得起的,在 Android 系列产品中寻找解决方案有点缘木求鱼。HTPC 应该是最适合我的产品。

    2天前下的单,今天凌晨 2 点收到 Pixmania 的通知邮件说 order is dispatched。我迫不及待地追踪了一下,发现这台电视机是从法国发货的,我非常羡慕这种电子商务运作方式。

    TV order UPS tracking result
    TV order UPS tracking result
  • FreePBX working with an unstable router

    办公室里的 FreePBX 经过多次调试,初步可以稳定运行。无奈物业管理公司配送的 ZyXEL AMG1302-T10A ADSL router 是个家用系列产品,用起来非常糟糕:设置了一批端口转发至 FreePBX,但会莫名其妙地失效。这种失效是个别端口转发失效,最要紧的是 Asterisk bind port 失效,这样外网的 SIP 分机就注册不了,运行若干天定会发生这样的事故。联想到外网分机通话时经常出现的单向语音或干脆无语音,估计也是路由器无法稳定地转发 RTP port 造成的。

    物业管理公司外包 IT support 给一个外地的公司,虽然离得不远,但英国公司本身就效率低下,又不是在同一个城市,根本就指望不上。本来我也不指望别人来做 IT support,但物业管理公司和 IT support 公司不愿告诉我 ADSL 上网密码,我就无法换掉它的路由器;它也不愿告诉我路由器管理密码,搞得我在路由器端口转发失效的情况下,也无法远程重启路由器。

    我已经跟物业管理公司要求独立装宽带,并自己管理。在没有得到答复前,怎么解决外网分机无法在特定端口注册的问题?我想了个办法,就是开启多个 Asterisk bind ports。严格地说,Asterisk只能有一个 bind port,而多个 bind ports 的效果,其实是在 FreePBX OS 层面的防火墙上达到。

    iptables -t nat -A PREROUTING -i eth0 -p udp --dport (another port number) -j REDIRECT --to-ports (original port number)
    

    这条规则把 (another port number) request 转给 (original port number)。我一口气添了 10 条同样的规则,这下有 11 个 SIP 注册端口可用,希望 ZyXEL ADSL router 不会一夜全坏掉吧?!

    /etc/init.d/iptables save
    

    保存路由规则,让重启后不丢失。

    顺便说一下,我对 ZyXEL 的质量没有信心,它的家用系列产品不稳定不是个别现象,它的商用系列我也不敢去尝试。

  • Aptana Studio 3.4.2 crashes on JDK in Fedora 20

    最近重拾 Aptana Studio,下载了最新版 3.4.2,可一编辑代码就无故崩溃。Fedora 20 提示 JDK crashed。

    我一开始没注意到我用的是 OpenJDK,Aptana 说不支持 OpenJDK,赶紧去下 Oracle/Sun JDK,还换了两次版本,1.7.0_51、1.6.0_45 都试过,都不成。

    搜了一下此类问题,给我感觉 2010 年以来在各版本的 Aptana Studio 和 JDK 时有发生,坏也不知道什么原因,好也不知道什么原因。大概我之前人品好,没碰到此类问题。

    换用 Netbeans,当前环境没有问题,但实在不熟悉 Netbeans,仍纠结着想用 Aptana Studio。想了个办法,切换回 Oracle/Sun JDK 1.7.0_51,安装 Eclipse 4.3.1,再装 Aptana Studio plugin for Eclipse,嘿,不再无故崩溃了。

    Eclipse with Aptana Studio plugin
    Eclipse with Aptana Studio plugin
  • Change MySQL socket path for FreePBX

    FreePBX 12 alpha 如果掉电重启,已多次发生 DB error,改装 FreePBX 11 仍有发生。虽然我已查明这是 MySQL socket 被锁定造成的,删除 /var/lib/mysql/mysql.sock 即可,但嫌 MySQL 不能自行修复,于是想到将 socket 移入内存 /dev/shm,掉电即不复存在,重启时每次都是重新生成 socket,不再有被锁定之忧。

    怎么更改 MySQL socket path 呢?其实也不复杂,只需更改三个文件。

    1. /etc/my.cnf
    MySQL 自身的配置文件

    socket=/var/lib/mysql/mysql.sock
    

    更改为

    socket=/dev/shm/mysql.sock
    

    2. /etc/freepbx.conf
    告诉 FreePBX socket 的新位置

    $amp_conf['AMPDBHOST']  = 'localhost';
    

    更改为

    $amp_conf['AMPDBHOST']  = 'unix(/dev/shm/mysql.sock)';
    

    你可能觉得 ‘unix(/dev/shm/mysql.sock)’ 的写法很奇怪。我摸索了好久才找到 PEAR DB 所用的 dsn 字符串中 MySQL socket path 的格式。

    3. /etc/amportal.conf
    告诉 asterisk socket 的新位置

    AMPDBHOST=localhost;
    

    更改为

    AMPDBHOST=unix(/dev/shm/mysql.sock)
    

    重启 MySQL 和 asterisk,确认 FreePBX System Status 是不是一片优雅的绿色(主要看 Server Status 块中的 Asterisk 和 MySQL 是否正常)?

    FreePBX server green status
    FreePBX server green status

  • Change Grub timeout seconds

    Grub menu
    Grub menu

    Changing Grub timeout seconds is not as many people said, by edit /etc/default/grub. At least with Fedora 20, I can proove it is not the right place to make the change. The corresponding file is /boot/grub2/grub.cfg. In the file look for

    set timeout=5
    

    5 seconds is the default timeout. Change it to any seconds you want it to be.

    set timeout=0
    

    0 seconds means no waiting at all.

    set timeout=-1
    

    -1 means wait infinite seconds until you make a choice.

    (My updated knowledge on 06 Feb 2014) /boot/grub2/grub.cfg 是针对 BIOS systems 的,UEFI systems 要修改 /boot/efi/EFI/fedora/grub.cfg。修改 grub.cfg 文件后直接生效,但是不建议直接修改 grub.cfg 文件。grub.cfg 的文件头上就有一段这样的提示:

    #
    # DO NOT EDIT THIS FILE
    #
    # It is automatically generated by grub2-mkconfig using templates
    # from /etc/grub.d and settings from /etc/default/grub
    #

    因为系统在某些情况下会覆写 grub.cfg 文件。这样又回到之前很多人说的 /etc/default/grub 文件,在这里修改参数是对的,只是修改后不直接生效,还要运行一遍

    grub2-mkconfig -o /boot/grub2/grub.cfg
    
    

    grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
    
    

    覆写 grub.cfg 才生效。

  • FreePBX alpha-6.12.65 DB Error: connect failed

    FreePBX alpha-6.12.65 (已升级至 release 3)两天两次出现这样的错误,我想有必要做一下笔记,解决方法很简单,但找解决方法花了不少时间。

    FATAL ERROR
    DB Error: connect failed
    Trace Back
    /var/www/html/admin/libraries/db_connect.php:63 die_freepbx()
    [0]: DB Error: connect failed
    
    /var/www/html/admin/bootstrap.php:103 require_once()
    [0]: /var/www/html/admin/libraries/db_connect.php
    
    /etc/freepbx.conf:9 require_once()
    [0]: /var/www/html/admin/bootstrap.php
    
    /var/www/html/admin/config.php:111 include_once()
    [0]: /etc/freepbx.conf
    
    
    FreePBX DB Error screenshot
    FreePBX DB Error screenshot

    解决方法就是删除 MySQL socket 文件。

    rm /var/lib/mysql/mysql.sock
    

    如果觉得每次发生 DB error 去删除 socket 文件比较麻烦,可以参考一个一劳永逸的办法:Change MySQL socket path for FreePBX

    还有一点值得注意,如果发生这个错误,外网访问是看不到这个错误提示的,甚至内网的子内网也看不到,看上去就像 httpd 未启动。而且,发生了这个错误后,启动时其他服务也受影响,sshd 就不再启动(在我看来逻辑不应该是这样)。

  • FreePBX alpha-6.12.65-2 and CSipSimple

    FreePBX 出了新版。我下了 “64bit ALPHA-6.12.65-2 Release Date-01-15-14 FreePBX 12, Centos 6.5 Asterisk 11 or 12” 来装,装好以后发现多了一个 PJSip,搞得我晕乎了一天。

    了解了一下 PJSip,发现它并不是什么新鲜玩意,只是 FreePBX 刚把它整合进来。其他 Sip 相关软件,如 CSipSimple,已经用 PJSip 很久了。

    之前的 FreePBX 只有一种 Sip,现在 Sip Settings, Sip Extensions, Sip Trunks 都分为 PJSip 和 Sip。有时显示为 Chan PJSip 和 Chan Sip,但又不一致,象我这样的新手误以为 Chan Sip 不是原来的 Sip,因此琢磨到底是该用 PJSip 还是 Sip,浪费了不少时间。

    现在 FreePBX 把 PJSip 放在 Sip 前面,PJSip 沿用常用的5060 端口,Sip 则另开了 5061 端口,大有 PJSip 取代 Sip 的意思。而我一开始也没发现 Sip 改端口了,使劲注册分机都是徒劳。

    FreePBX 创建了 PJSip 分机,我用 CSipSimple 去注册,CSipSimple 端显示在线,但在 FreePBX PBX Status 里看不到可用分机线。我想是 FreePBX 在应用 PJSip 时有 bug,所以不要强求,用 Sip 已然不错。

  • Fix WangWang link

    在 Windows 下刚装了最新版的淘宝旺旺,但是点击网页上的卖家,总是打开网页版的旺旺。

    这真有点滑稽:以前在 Linux 下,没有旺旺可用,可点击网页上的卖家,总是先企图运行旺旺 exe。

    言归正传,解决办法是手动注册 AliIMX.dll。

    regsvr32 "C:\Program Files (x86)\AliWangWang\8.00.05C\AliIMX.dll"
    

    以后版本不同,AliIMX.dll 位置可能会有变化,该改就改。