Author: 芳草苑主

  • Free parking in London

    Parking restriction
    Parking restriction

    多年来,我想当然地认为伦敦一区是不会有 unrestricted area 可供全天免费停车的。

    但是网上说有,而且很多。年初认识到这个停车地图,因为开车去伦敦市区的机会不多,直到明天才有机会检验一下。

    如果情况属实,特别鄙视布莱顿市政府,停车搞得比伦敦还难,太失败了。

  • Nice delivery of copier paper

    Copier paper delivered
    Copier paper delivered

    我今天收到 ebuyer 两个箱子,是 UKMail 和 Yodel 送的各一刀 A4 复印纸。订单分别是本月 7 号和 13 号(周日)下的,选择的服务分别是 within 5 working days 和 next working day。

    每个箱子 4kg 重,包装一如既往地好,偌大个箱子用了很多 air bags 填满,把复印纸像易碎品一样保护妥当。总之,产品和服务我都很满意。

    每刀纸售价 £1.95 + VAT,free delivery。我是信用卡付的款,再优惠的信用卡费率,银行扣商家不会少于 £0.10 吧;发货是机器人发货,折旧电费总难免,算 £0.10;包装纸箱和 air bags,就算大批量采购,也要 £0.10。最大的成本是送货费,也是我最想不通的地方。目前 RoyalMail 寄封 1st class 平信都要贴 £0.62 的邮票,挂号信要 £1.72,更别说包裹了。 当然你可以说 RoyalMail “国营”的,没有竞争力,价格没有参考价值。那么 UKMail 5kg 以下包裹的公开最低报价是 £4.24 + VAT(自送 depot),超级电商跟 UKMail 的签约价我不敢猜测,但送货员规模效应十分有限,按每小时送 10 件包裹计算,每个包裹的成本也要 £2.00。不含货物成本,各项运营费用相加已达 £2.30,还是最保守的估计。

    ebuyer 赚钱点在哪里?好像也不像赔本赚吆呼——通常博眼球的活动不会持久。Canon 厂家补贴电商赚吆呼?也不像。

  • Disposable printers eco concern

    我支持环保,但是打印机市场的现实情况让我觉得很无奈。

    我发现 £200 以下的低端激光打印机,几乎无一例外,换墨盒不如换新机。比如说,彩打 Lexmark C544dn,时有促销,可以以 £150 的价格拿下,带 2,500 页的黑墨和 2,000 页的彩墨;而如果单买墨盒,即使买超高容量的 6,000 页黑墨和 4,000 页彩墨套装,价格不低于 £400,计算单张打印成本,还不如换一台新机。我就用着一台 Lexmark C544dn,我准备在用完墨粉后,直接扔掉打印机,再买一台新的。本可重复使用的打印机用起来象个一次性打印机。不环保?是厂家不合理的定价策略逼的。要厂家撤销这种定价策略,我估计只有等 WEEE 有关部门发现废弃过多的半新打印机,才能搞个什么政策出来,逼厂家修改这种定价,不过这个又有干涉市场之嫌,该怎么做,留给政府去考虑吧。目前看来厂家的策略似乎是成功的,要不怎么买不到便宜的墨盒?

    准确地说,要买比打印机便宜的墨盒,不是没有,得买高端的。基本是越贵的打印机,越低的单页成本。但是,我打印量不大,追求高端不合适啊。

    Dell 3335dn Multi-Function 38ppm Mono Laser Printer
    Dell 3335dn Multi-Function 38ppm Mono Laser Printer

    凡事都有例外。今天我无意发现一台高端的打印扫描传真一体机 Dell 3335dn 竟然在 ebuyer 只售 £199.99 + VAT,都有点怀疑 ebuyer 是不是标错价格了。考虑到 Dell 还有 £100 cash back 促销,这款机器实际的拥有成本只有 £139.99 inc VAT。横向对比其他大网站售价都高达 £400 – £500 多,我觉得价格上它算是高端中的入门级。

    我判断是否高端的标准:每分钟打印页数是否够快、单张打印成本是否够低、换墨盒的成本是否低于换新机。Dell 3335dn 的指标分别是 38ppm、1ppp、£140 的墨盒可打印 14,000 张(新机配的墨盒可打印8,000张,所以换墨盒比换新机便宜)。

    本无采购计划,但我就买下了 Dell 3335dn,等之前的一台黑白打印机(不是指彩打 Lexmark C544dn)的墨盒耗尽就可以换新机了。以后也不用频繁扔打印机了,在成本和环保能两全其美的时候,我还是非常愿意支持环保的。

    目前还缺一台 A3 激光彩打,等待促销够劲、性能高端、符合我的环保指标的机型出场。

  • Weird procurement

    我觉得我的采购行为很奇怪。

    A ream of Canon 80gsm copier paper
    A ream of Canon 80gsm copier paper

    比如,我本来想买一箱(五刀)A4 复印纸的。但发现有个网站一刀名牌 80gsm A4 复印纸,只卖 £1.95 plus VAT,竟然还是 free delivery。我就想“那它还有多少钱挣?”当然我是不担心它会亏本,我就是想看看它为单独一刀的一个订单发一个件是什么个情况,于是,我下五个单,每次一刀。

    再比如,我本来想买一个 VDSL 路由器的。但在比较价格的时候,发现心仪牌子的 cable/3G dual WAN 路由器(就是没有 VDSL 功能)DrayTek Vigor 2910n,标示全新,£1.99 起拍,没人拍,真是怪事。于是我上,最后 £2.75 竞得。而真正需要的 VDSL 路由器还没着落。

    Won DrayTek 2910
    Won DrayTek 2910

  • Hands on GeoIP for Nginx on Fedora and CentOS

    最近研究了一下如何根据用户的 IP 获得他的地理位置(我只关心 country 级,不关心 city 级),区别性地在 Ngnix 层面做一些限制性访问。这里用到 GeoIP 软件包和 MaxMind 的数据库。

    在 Fedora 20 下,Nginx (目前 1.4.7) 依赖于 GeoIP。等于说,装好 Nginx,ngx_http_geoip_module 自然就启用了,只要在两个配置文件略作修改。

    Fedora nginx -V output
    Fedora nginx -V output

    1. 在/etc/nginx/nginx.conf 里添加

    
    http {
    
    ...
    
    geoip_country /usr/share/GeoIP/GeoIP.dat;
    
    ...
    
    }
    
    

    2. 在 /etc/nginx/fastcgi_params 里添加

    
    fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code;
     fastcgi_param GEOIP_COUNTRY_NAME $geoip_country_name;
    
    

    还有其他参数可用,请自行查手册。重启 Nginx 就可以使用 GeoIP 的信息了。

    在 CentOS 6.5 下,事情要复杂一些。网上说 CentOS 下的 Nginx 同样依赖于 GeoIP,可在我这里事实并非如此。同样是最新的 1.4.7 版,Nginx for CentOS 是不带 ngx_http_geoip_module 编译的。即使我用 yum install GeoIP 安装了 GeoIP 软件包,但 Nginx 不从源码编译就不能启用 geoip 模块。

    CentOS nginx -V output
    CentOS nginx -V output

    着重提一下,我说的 CentOS 6.5 是 VPS 版,Nginx 和 GeoIP 无依赖是不是这个版本特有的?不得而知。我不想为之专门装一次 CentOS 来探究。我也不想从源码编译 Nginx,因为我太喜欢 yum,就为一个 ngx_http_geoip_module 搞砸了其他功能就不值得了。

    退而求其次,CentOS 下不妨用 php 调用 GeoIP,只是感觉同样功能用 php 实现会消耗更多资源。另外,Nginx 能进行全面的限制,而 php 无法利用 GeoIP 信息限制对静态文件的访问。但是,Nginx 的全面限制也只能阻止低级用户,不可能阻止稍有点 IT 知识、一心要绕开地理位置限制来访问的用户,所以 php 对动态文件的限制其实也起到了相同的效果。

    CentOS 下,安装 GeoIP for php,首先要装有 GeoIP,前面已经说了,要单独装:

    
    yum install GeoIP
    
    

    然后,安装  php-pecl-geoip:

    
    yum install php-pecl-geoip
    
    

    哈哈,都是我喜欢的yum。然后重启一下 php-fpm,即可在 php 下获得 geoip 信息。函数有很多,geoip_country_code_by_name()、geoip_country_name_by_name() 等等,请自行查手册。

    顺便提一下,CentOS 6.5 VPS 版安装 GeoIP 后,带来的 country 数据库(GeoIP.dat, 6 Sep, 2011)有 1,183,408 字节,而 Fedora 20 的 GeoIP country(GeoLiteCountry.dat, 18 Jun, 2013) 数据库只有 581,110 字节,从 MaxMind 网站上下载最新的 GeoLite Country 数据库(GeoIP.dat, 每月第一个周二更新)也只有668,134 字节。考虑到 MaxMind 的数据库是分免费和收费的,那么,CentOS GeoIP.dat 这么大,是不是更接近于收费版?我不知道收费版是啥样的,因此无从考证。

  • Newly installed BT Infinity keeps dropping continued

    BT new Home Hub 5 replacement
    BT new Home Hub 5 replacement

    前文说到新装的 BT Infinity VDSL 经常掉线,我拿着 log 向 BT 反映,他们二话不说,给我寄来了第二个路由器。这里还是数据说话,否则 BT 总怀疑用户 IT 能力,肯定要磨叽半天才肯换一个路由器。

    但是,很失望,换了个路由器,仍然掉线频繁。

    我想,该不是 FreePBX 在使用带来的一些通讯流量造成的吧?我是基于这么个假设:BT Infinity 不会如此不稳定,否则怎么推广啊?应该是我使用的某种应用造成的不稳定。大部分用户不会组建 FreePBX,这个问题不会被触发。

    于是我把 FreePBX 服务器搬回家,接在了 ADSL 上。真遗憾,我是为 FreePBX 升级到 BT Infinity,结果还得搬回家继续用 ADSL。不过,两害取其轻,FreePBX 在我家的 ADSL 上并没有造成频繁掉线。

    现在再看没有了 FreePBX 的 BT Infinity,确实稳定多了,偶有掉线(一天一次)。这初步验证了上一个假设。

    然后,我再一次假设,FreePBX 造成 BT Infinity 频繁掉线,不会是 VDSL 方面的问题,而是 BT Home Hub 5 似乎跟 FreePBX 不对口。

    看来得买一个商业级的 VDSL 路由器了。我相中 DrayTek Vigor 2860n Plus,犹豫着要不要买,而且心里有点不爽——我不喜欢基于一堆假设去采购。

  • When to use Magento layered navigation?

    Rcah module for Magento
    Rcah module for Magento

    Although I released a Magento module “Root Category as Homepage“, which enables replacing the default CMS page with the root category as homepage, thus the users can start layered navigation from the very top level of category, the usage of this module should be limited, for the sake of usability.

    In short, use Magento layered navigation only to narrow down the choice of products. Do not use it for the purpose of grouping products by some filter attributes. There are many other ways to group products together.

    I will explain in details when I have some more time.

  • Fixed NextGenGallery 0 images were uploaded error

    Nggallery 0 images were uploaded
    Nggallery 0 images were uploaded

    不知从何版本起,NextGenGallery 插件在我的 WordPress 上就不工作了,主要症状是:

    • 后台无法在 Gallery 里上传图片,显示 “Upload complete. 0 images were uploaded.”(WordPress 自身的 Media 上传正常)。
    • 后台无法批量导入图片,服务器的文件夹根本就不显示。
    • 已有的 Gallery 在前台只能显示第一张图,点下一张图就是 404 错误。

    这个问题困扰了我约有半年。期间发现把 Permalinks 改为 Default 模式能让 NextGenGallery 恢复正常,但我不可能为了 NextGenGallery 修改 Permalinks 啊,只好任由这个问题存在。所幸迄今为止只有 5 galleries,而且都不怎么重要,所以这个问题不突出。

    上个周末突然犟了一下,我觉得不该卡在这个问题无从下手啊,调用 google N 多次,终于在一个角落里给我找到一点端倪,再做了 N 多次试验,得出的结论是此问题在 PHP installed as an Apache module 时不存在,我恰用的是 Nginx,罪魁祸首是 fastcgi_param 没弄好。

    出现此类问题是小概率事件,即使是一个不完善的 fastcgi_param 配置,我的 Nginx 也让大部分 PHP 跑了多年没出其他问题。NextGenGallery 也有一定责任,使用了一种不推荐的环境变量,在 PHP installed as an Apache module 下不会激发这个 bug,但在 Ngnix + 不完善的 fastcgi_param 会。而我用的不完善的 fastcgi_param,我相信很多人都在用,所以有一定的普遍性。

    言归正传,怎么改?

    有人说把 NextGenGallery 的 class.router.php 的 function get_request_uri 的 if (isset($_SERVER[‘PATH_INFO’])) 改为 if (empty($_SERVER[‘PATH_INFO’])),确实能奏效,但我认为不理想。因为:

    • NextGenGallery 虽有错,但大错不在它,而在 Nginx 没配好。
    • 这个问题被反应到 NextGenGallery 开发者很久了,期间 NextGenGallery 升级了无数次,也没见他修正此 bug,可能他认为此 bug 非 bug。

    我认为解决问题的根本办法是在 fastcgi_param 文件里,把通常人用的

    fastcgi_param  PATH_INFO          $fastcgi_path_info;
    

    改为

    fastcgi_param  PATH_INFO          $fastcgi_path_info if_not_empty;
    
  • Newly installed BT Infinity keeps dropping

    Is BT Infinity stable
    Is BT Infinity stable

    BT Infinity 装了四天。前两天每天都会有一两次断线再续上,这离我心目中一个月都不断一次的设想有很大距离,但说实话,这并不影响使用。

    昨天下午开始,我注意到 BT Infinity 频繁断线,一个小时内会断好几次,这下我受不了了。我写了一个检测脚本,从凌晨2点多开始运行,收集到以下数据:

    ip up_time down_time
    86.163.4.231 2014-03-28 02:26:27 2014-03-28 02:31:34
    86.155.231.26 2014-03-28 02:34:02 2014-03-28 03:02:35
    86.163.218.228 2014-03-28 03:05:01 2014-03-28 03:34:01
    86.144.50.27 2014-03-28 03:37:01 2014-03-28 04:03:19
    86.155.228.111 2014-03-28 04:06:01 2014-03-28 04:34:01
    86.163.218.154 2014-03-28 04:37:01 2014-03-28 05:04:03
    86.164.192.9 2014-03-28 05:07:01 2014-03-28 05:36:01
    31.52.209.24 2014-03-28 05:38:01 2014-03-28 06:05:35
    86.144.50.126 2014-03-28 06:08:01 2014-03-28 06:36:02
    86.164.194.59 2014-03-28 06:39:01 2014-03-28 07:06:03
    86.164.194.91 2014-03-28 07:09:01 2014-03-28 07:38:01
    86.144.51.127 2014-03-28 07:40:01 2014-03-28 08:09:01
    86.155.228.111 2014-03-28 08:10:02 2014-03-28 08:31:02
    86.155.230.112 2014-03-28 08:41:01 2014-03-28 09:08:05
    86.149.254.255 2014-03-28 09:11:01 NULL

    我注意到从今天早上 9:11 开始,一直到现在下午 3:55,没有掉过线。我猜是 BT 在大部分人的非工作时间远程更新 Home Hub 5 的韧件,但我也并不喜欢 BT 来操控已经属于我的路由器,更不喜欢 BT 决定更新韧件的时间,是时候考虑买一个正宗的路由器,彻底堵住 BT 的后门。如果这次频繁掉线不是 BT 更新韧件引起的,那更糟糕,BT Infinity 竟然如此不稳定吗?我更换宽带,等了一个多月,等来的是如此结果?我暂不想下这个结论。不管怎样,我已经向 BT 反映了频繁掉线的问题,正等待它的反馈。

  • Publish on blog or social network?

    International social media icons
    International social media icons

    博客出现在 web 2.0 时代,社交网站算 web 后2.0 时代吧(web 3.0 概念不清,我不好拿来用)。

    博客和社交网站的界限模糊,有很多交集,比如博客发展到微博就归入了社交网站。但我这里说的博客,指的是用自主建站的方式,比如用 WordPress  搭建的博客,其他非博客类的 CMS,也可以归入博客范畴;而社交网站,指的是依托第三方的社交平台,通过开设帐号,发布消息。

    社交网站诞生多年,我的使用态度一直不积极。我相对较早使用 QQ ,但 QQ 空间至今没有开通;我也没有新浪微博、腾讯微博,更不要说什么人人网之类的;微信也是开通不足半年,还是被没有微信就活不下去的朋友逼着开通的;我也没有 Linkedin,因为它排不上前三;Facebook, Twitter 虽不缺账号,但也懒于维护;唯一用得比较多的 G+,那也是因为我是 Google 的粉丝,Google 想要在社交网站有所建树,我友情支持。

    我通常对新生事物都是积极尝新的,为什么不喜欢社交网站?我也不懂自己,勉强找了两点理由:

    1. 大部分人在社交网站发的贴没有深度,无非是“今天的大餐好好吃”、“我在公车上看到有人打架”,这些内容当时有人围观,过了一周、一月或一年,没人会关心你那时吃了什么、看了什么,连你自己也记不起来。
    2. 转贴太方便,个个都是新闻发言人,很多都是以讹传讹,即使是真实的也没有出处可循。转来转去,互联网信息急剧膨胀,原创比例急剧萎缩。

    但从商业角度看,不占领社交网站,就会失去和潜在用户联系的机会。怎么合理安排时间和精力维护这么多的社交网站?我草拟了一套方案:

    • 博客为主,社交网站为辅。就是说一定要有自己的博客,然后在时间和精力有盈余时,兼顾尽可能多的社交网站。
    • 内容只发布在博客上,社交网站只转其标题和链接。在内容有错别字或需要更新时,只要更新博客一处即可。虽然有很多工具可以自动同步多个社交网站的内容发布,但是我还没发现一款工具能做同步更新。如果要手动更新各个社交网站,工作量是很大的。而且是重复劳动,我最痛恨。把原创内容直接发布在社交网站上,从 SEO 角度看,是在给他人做嫁衣。
    • 博客要做一些社交网站做不到的事,比如说文章的分类整理、参数查询等等,方便用户记住你的博客,而不仅是你的社交网站的账号。当然你也可以放些广告,赚取额外收益,而在社交网站上这部分收益就不会归你了。
    • 博客要装有分享插件。服务端的分享插件在你发布新贴时,同步标题和链接到你的多个社交网站的账号;客户端的分享插件让用户在浏览帖子时,分享到他常用的社交网站的账号。WordPress 的社交插件有不少,但面面俱到、用起来得心应手的,我还没找到。你若有,别忘了分享给我。
    Chinese social media icons
    Chinese social media icons