Blog

  • Fakes on Taobao

    淘宝最近因假货太多被推倒风口浪尖,我也火上浇油一把。我想很多人跟我一样,对淘宝并无好感,不得已而用之。

    我举报的并不是假名牌的假货,而是假指标/假描述的假货,这应该更好甄别,但淘宝根本不重视。

    首先,据客服说,我举报的假货卖家已经有人举报,所以我无法就同一事宜举报。OK,这是淘宝的规则,很好。但既然有人举报,我作为旁证,希望参与其中,淘宝没有对应的流程让我参与,需要改进;而且,虽然我不是第一举报人,我作为消费者,也有权知道处理结果,淘宝也没有一个自动的反馈,在我强烈要求下,客服答应帮我做一个记录。但这种备注式的记录,很可能是被遗漏的,我希望我的旁证举报也能进入一个自动反馈系统,得到最终处理结果的反馈。

    其次,淘宝上卖家良莠不齐,我要花很多时间去甄别,仍不免失误。而淘宝,掌握大数据的运营方,应该有更好的甄别方案,替消费者把好第一关。别的不说,刷信用成了一种开店的基本伎俩,淘宝就应该扼杀它,淘宝需要花大力气对抗各种作弊手段。就算黑心店主要作弊,淘宝也要提高他们的作弊门槛和成本。

  • Back to MySQL

    不知从什么时候开始,Fedora 和 CentOS 里的 MySQL 都给换成了 MariaDB。我一直搞不懂好端端的 MySQL 为什么还要分出一个 MariaDB,更搞不懂 MariaDB 的优越性在哪里,反正 MySQL 对我来说够用了,倒是 MariaDB 安装和启动时使用了不同于 MySQL 的名称,让我很不习惯。比如

    yum install mysql-server
    

    换成了

    yum install mariadb
    
    service mysqld start
    

    换成了

    service mariadb start
    

    幸好,除此之外,一切照旧,用到 MySQL 的 PHP 程序都能继续在 MariaDB 使用,所以我就一直用着 MariaDB。直到今天使用 Magento2,要求 MySQL 5.6 以上版本,而 CentOS 下把 MariaDB 用 yum update 到最新版本,仍是 5.5.40。

    于是我被逼着去下载 MySQL 5.6。不用不知道,一用发现 CentOS 下安装 MySQL 超级方便,只要安装好 RPM 包——http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm,就可以恢复使用

    yum install mysql-server
    

    执行安装。

    早知如此,我真不该碰 MariaDB——这个并没有给我带来实际利益的程序也花了我一天去熟悉。

  • Twenty Fifteen features West Pier

    WordPress 4.1 发布了,Twenty Fifteen theme 也发布了。

    Twenty Fifteen screenshot
    Twenty Fifteen screenshot

    仔细一看,Twenty Fifteen 用的主题图竟然是我们 Brighton West Pier 的一幅照片。West Pier 的照片我已经见过千千万万了,但被用在 WordPress 上我还是觉得格外出彩。为了赞扬 WordPress 对 Brighton 的支持,我立即切换芳草苑到 Twenty Fifteen 主题,暂且不考虑她是否适合芳草苑。

  • Godaddy .com renewal coupon

    It is getting harder and harder to find a Godaddy .com renewal coupon with big discount, I mean, over 30% off.

    Today I had spent 2 hours searching in vain, and was thinking I had to use some voucher with only 20% off for order over $50. The code is not specific for .com renewal, but general for all Godaddy products. It means all Godaddy products can be marked at least 20% off, and it is a sales technique which I do not like. So I do not regard 20% off as a REAL discount. Anyway, it is off topic.

    At last minute, I came across a .com renewal coupon 35REN414. The person who revealed this coupon said it was 35% off. Actually I got 40% off when I used it today. Since I never got such a big discount on .com renewal before (the biggest I had got was 33% off), I immediately decided to use code to renew .com domains to a maximum length.

    Longer registration period, better SEO result. And domain renewal price is rising. So it is a good investment, I think.

  • NIC is a critical point

    一个网络设备好不好,就拿大文件去测试它。

    LinkSys WRT54GL 路由器就有这样的问题:从 WAN 端口下载若干GB 大小的文件,中途就会断开,路由器也不工作了,它的 web 管理界面也访问不了,非得重启才能恢复。

    今天发现我的网络硬盘 WD MyBookWorld 2TB 也有此类问题:在拷贝两个20多GB大小的文件过程中,中途也被断开,再也访问不了 MyBookWorld,重启后恢复。

    以前我以为这些家用级的网络设备在大流量压力下会死机(CPU 超载),今天的结论是 CPU 或许还有余力,但网卡超载了。因为,在访问不了 MyBookWorld 时,我拔出了一个 USB 设备(我用 MyBookWorld 的USB 口在给手机充电),触发了 USB device unplug 的事件。通常我会收到一个邮件通知,但这次因为网卡停止响应,CPU 仍在工作,记录下了这个事件,延迟到重启后网卡恢复正常才发出邮件。

    网卡很关键,以后得多关注这方面的指标。我现在热衷于选用商业级的设备,即使是为家用。

  • Change FreePBX default MySQL connection

    我可能吹毛求疵了:我感觉如果要修改 FreePBX 里默认的 MySQL 的连接位置好麻烦。

    我修改成 MySQL socket 方式连接,而且也修改了 socket file 的位置,然后要修改 FreePBX 好多个文件才能让 FreePBX 对接 MySQL。大部分文件属于 FreePBX 配置文件,还好办,象填表格一样填就是。但 /var/www/html/admin/modules/userman/DB_Helper.class.php 根本没为 MySQL socket 连接方式考虑,DSN 只兼容 host 连接,所以要大改 262 行(以FreePBX 2.11.0.39为例)。

    要改成多行:

    
    if (preg_match('/^unix\((.+)\)$/', $amp_conf['AMPDBHOST'], $matches) === 1) {
    	$ampdbsocket = $matches[1];
    	$dsn = "mysql:unix_socket=".$ampdbsocket.";dbname=".$amp_conf['AMPDBNAME'];
    }
    else {
    	$dsn = "mysql:host=".$amp_conf['AMPDBHOST'].";dbname=".$amp_conf['AMPDBNAME'];
    }
    
    

    直接修改程序是我最不愿意的。FreePBX 似乎也没提供安全升级的办法,所以 User Management 模块一升级,上述修改就作废,FreePBX web portal 就出错。

  • Allow specific “anonymous” inbound SIP calls

    之前所有的 SIP 服务商都是提供 SIP 注册的帐号和密码。最近碰上一个新的 SIP 服务商,购买了一个电话号码,它只让我设置 Forward to SIP Server 或 Forward to SIP URI(当然也可以转发到普通电话号码,但那是要额外收费的,不在我考虑范围之内)。

    于是,碰到了新命题:我必须在 FreePBX 的 SIP Settings 里同时启用 Allow SIP Guests 和 Allow Anonymous Inbound SIP Calls 才能收到转发过来的 SIP calls。这两项都是我不愿意启用的设置,因为存在被 SIP hackers spamming 的风险。尽管单独启用 Allow SIP Guests 据说没有太大风险,但还是接不到电话,呼叫方会收到 FreePBX 给出的语音提示:The number you have dialed is not in service. Please check the number and dial again.

    怎样才能让来自 SIP 服务商的 anonymous calls 通过,而把其他的阻挡在外?我甚至想到了启用 Allow SIP Guests 和 Allow Anonymous Inbound SIP Calls ,但用防火墙规则只允许来自特定 host / IP 的流量。这个方法我自我评价是非常 dirty,我希望是 FreePBX 的问题在 FreePBX 内部解决。

    我几乎不带希望,搞了个试验,创建了一个 SIP trunk。它跟之前注册型的 SIP trunk 的区别就是省略了 PEER Details 项里的 username, password 和 Register String。然后,同时禁用 Allow SIP Guests 和 Allow Anonymous Inbound SIP Calls,这时 Forward to SIP URI 已经能工作;再添加一条 Inbound Route,Forward to SIP Server 也能工作了。

    这个事实推翻了我对 trunk 的原有理解—— trunk 只是一条进或出的通路。现在我知道 trunk 还能“命名”符合特定条件的“匿名”来电,起到过滤的作用。

    此外,我猜想,转发型的 SIP 服务比注册型的 SIP 服务更可靠,因为转发型的 SIP 只在有来电时把数据包转发到我的 FreePBX;而注册型的 SIP 则要不时地重注册保持连接,有时连接已经断开,而 FreePBX 不知道,要等到下个周期才重注册,于是会错过来电。不知我猜想对否?请教过路的 VOIP 专家。

     

  • WP Social Login back to working

    WP Social Login 这个插件在芳草苑上好长时间工作不正常了。无法通过 Google 帐号登录,显示的出错信息是:Oops! We ran into an issue. Request failed. Either you have cancelled the authentication or Google refused the connection.

    Google authentication failed
    Google authentication failed

    今天终于找到原因,其实也不是插件的错,而是在 Google 开发者项目设置里没有开启 Google+ API。默认是禁用,启用就行了。

    Enable Google+ API
    Enable Google+ API

    我隐约记得有消息说 Google+ API 发布以后,WP Social Login 从 Google API 转向了 Google+ API。但当时也没留意看,现在也搞不清楚 Google API 和 Google+ API 有什么区别。IT 技术发展太快了,很多概念只能浮于表面,能用足用好已经不错了。

  • Use long established business for your hosting

    前段时间用了一个名不见经传的公司的 VPS 产品。当时看它性能不错才切换过去,但是它操作极不规范,到期前不催续费,我想主动续费都没有链接可以让我续。突然有一天,它意识到有未收账款,也不通知我付款,就停了我的帐号。然后我付款,重新开通服务。中间中断了大约半天的服务,让我损失惨重——那天以后来自 Google 和 Facebook 的流量突然就下降了。这也让我百思不得其解:

    1. 我知道一个网站的 uptime 是很重要的指标,但是,好像影响过头了?以致我怀疑流量下降不是 uptime 的问题,但转折点就在宕机的那一天,是巧合吗?
    2. Google 和 Facebook 使用同样的算法?

    总之,不正规的公司是绝对不敢用了。离开之前,我自己清空数据,以下一行命令删除 MySQL 里所有的数据库,抄来的,很方便。

    mysql -uroot -pPASS -e "show databases" | grep -v Database | grep -v mysql| grep -v information_schema| grep -v test | gawk '{print "drop database " $1 ";"}' | mysql -uroot -pPASS
  • Magento not rebuilding image cache

    I changed a server for Magento sites. When I migrated the sites, they looked fine. However after I flushed Magento image cache, all sites stopped working. Web pages were not completed. The code stopped rendering after the first product image’s “src”. But there was no error message afterwards.

    At first I thought it was file permission problem. But it was not.

    Then I thought it was some rubbish left over after flushing cache. So I took the advice by removing the folder media/catalog/product/cache and clearing everything under var. But the problem was still there.

    Then I realised it was php not generating images for Magento. Magento requires php-gd to generate images. My new server did not have php-gd installed. If I was installing a Magento instance, I would not get through. But I migrated the sites. So they “looked” fine.

    After installed php-gd, product images came back.

    By the way, Magento requires some other PHP extensions to run. I took the chance to install them all.
    pdo_mysql
    simplexml
    mcrypt
    hash
    gd
    dom
    iconv
    curl
    soap