Category: 小小草

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

  • It’s all Flash’s Fault

    不经意中,电脑被装上了Flash 10。等我发现magento后台不能浏览和上传文件时,我怎么也没把原因和Flash 10联系起来。

    首先我以为是magento 1.1.5升级到1.1.6造成的,因为我在1.1.5还成功上传过文件。当我专门为此搞了个试验,全新安装了一个magento 1.1.5来上传图片,还是无功而返。

    浏览器提示javascript出错,可是我实在想不明白为什么以前可以,现在不可以。为此浪费了无数个晚上,终于让我找到了答案,Flash 10!

    Flash 对此的解释冠冕堂皇:为了安全,Flash 10不再允许间接调用文件浏览对话框,文件浏览对话框只能由鼠标动作触发。很不幸,作为magento的上传部件,SWFUpload采用的是间接调用的方式,落入了Flash 10的打击范围。

    我本来就不喜欢Flash,这次Flash 10又浪费了我这么多时间,magento至少被我拆装了3次!尽管它有千万个安全理由,我还是对它敬而远之。

  • The Power of PivotTable

    突然发现 Pivot (数据透视表)很强大。

    我找了一份learning-pivot-table,方便我自己和对Pivot感兴趣的人学习。

  • What is vmware server default login?

    vmware server login page
    vmware server login page

    今天升级了 Vmware Server 到 2.0.0-122956。Vmware Server 2.0.0 给我一种耳目一新的感觉,我准备花些时间好好学习。安装完成以后,Vmware Server 的登录账号也出乎意料,google了一下才知道竟然是 Windows 的系统管理员账号(任何管理员权限的账号,不限于”administrator”)。

  • More About WordPress Uploads

    昨天写了一篇Migrating WordPress Uploads,我意犹未尽。

    每上传一个文件,WordPress会把它放在”Store uploads in this folder”指定的目录,但在post中都已转化成绝对路径来记录 Path 和 URL 。我不欣赏这种做法,因为这对服务器环境养成依赖。

    WordPress核心对”Store uploads in this folder” 和 “Full URL path to files (optional)” 不重视,造成某些插件也无视这两个options的存在。比如WP Shopping Cart,根本不去探测这两个值,直接就把产品图片等文件保存位置设定为wp-content/uploads/wpsc/… 。

    为了让WP Shopping Cart能够按照我的要求摆放文件,我只好修改了wp-shopping-cart.php,在 $upload_path 和 $upload_url 被调用之前,给它赋予正确的值。

    $myuploads = wp_upload_dir();
    $upload_path = $myuploads [‘basedir’];
    $upload_url = $myuploads [‘baseurl’];

  • Migrating WordPress Uploads

    我的blog迁移过一次,上次主要是为了更换domain name。今天我又成功地迁移了两个blog,这次主要是为了享受WordPress 一次安装,多处使用 带来的方便。

    但我不得不承认,WordPress迁移不是件容易的事。大部分的迁移工作是更该数据库里uploads文件的路径,这些值都是用绝对路径保存在数据库了。必须一一更改这些值(我喜欢export-replace all-import),否则文件位置的变动将导致链接失效。

    WordPress用了两个options来设置Upload Path & Upload URL,为什么不基于这两个值用相对位置来管理上传文件?相对位置的好处是:如果移动或改名了uploads文件夹,就只要修改两个options,而不必在posts和postmeta两张表里大动干戈了。

  • The First VirtualHost Is The Default

    今天在apache上搞基础建设,为一个小小的问题排错排了很长时间,事后想想,不就是一个简单的VirtualHost默认值的问题嘛!排完以后我才想来,其实以前已经碰到过这个问题,在一个问题绊住两次脚,浪费了一天,真是不应该!

    每个VirtualHost里有一个ServerName,还可以有零个及以上ServerAlias。假设一个 domain name example.com 的 ip address 是 201.202.203.204,  如果 example.com 在 .conf 文件里找不到同时匹配的 VirtualHost 和 ServerName (或ServerAlias),那么 example.com 将使用首个匹配的 VirtualHost (通常是 *:80 或 201.202.203.204:80)的设置。

    我把apache VirtualHost的心得写下来,免得以后再绊脚。

  • WordPress Commerce

    在WordPress基础上建设网店不是不可以,但毕竟blog和e-Commerce各有侧重。要做e-Commerce,自然而然就要求设置产品属性,相关产品链接,库存管理,价格管理,客户管理,销售报告等等。WordPress装个插件,如Instinct Entertainment e-Commerce plugin (WP Shopping Cart) for WordPress,做得相当不错,能完成基本的e-Commerce需求。

    但WP Shopping Cart只能是个轻量级的e-Commerce解决方案。它至少无法:

    1. 批处理
    2. 动态过滤产品 (按自定义属性)
    3. 产品套装模型
    4. 复杂价格政策
    5. 客户分组
    6. 自定义报告

    在WP Shopping Cart基础上改进一下,让它完成以上功能也不是不可能的。但我认为,如果你有以上需求,选择WP Shopping Cart就是个错误(谨记:WP Shopping Cart只能是个轻量级的e-Commerce解决方案)。

    此外,我在考虑:装了WP Shopping Cart plugin,所有的产品页面都是通过一个WordPress页面 (默认叫product-page) 调用,产品页面都是product-page子页面,本身不利于搜索引擎优化。而且,WordPress自身或WordPress SEO Plugins带来的搜索引擎友好的众多特性,产品页面无法享受到。虽然WP Shopping Cart针对SEO做了很多考虑,但WordPress SEO是众人拾柴,WP Shopping Cart SEO features无法与WordPress SEO features匹敌。

    其实大部分企业网站并没有购物车需求,只是一个简单得不能再简单的产品或服务展示厅(brochure site or showrooms)。如果WordPress category, tag, cusom field, search应用得恰当,不借助于e-Commerce plugin,也能用WordPress组建一个brochure site。如想要SEO,一个post对应一个产品是最佳方案。设计一个brochure theme就够了。

    找来找去,我没找到一个像样的 (适合摆放产品的) brochure theme。

  • An Ideal Way to Take Repeat Payments for Phone and Mail Orders

    We have lots of regular customers place orders over the phone. I am looking for a solution which can satisfy:
    1. We would not like ask credit card details every time;
    2. We can not store credit card details;
    3. It looks like a combination of Virtual Terminal and Recurring Payments, but these recurring payments do not have a fixed date and fixed amount;
    4. If possible, we create profiles for our regular customers. So, we, the mechant, can enjoy the facility of express checkout.

    Does PayPal, WordPay, or any other payment providers offer this solution?

  • Use Google App Mail In Corporation

    这里我只是想谈谈企业和个人在使用email中冲突,以及如何有效地应用Google App Mail来避免冲突。

    员工一录用,很多企业都会给员工一人一个企业域名、个人名字前缀的邮箱。作为对外业务联系的邮箱,应该保持稳定,但员工跳槽是普遍现象,英国人更喜欢跳槽,造成企业邮箱地址更新频繁。试想以下两个情景:

    情景一:企业开有 paypal 帐号以及多个银行帐号,由会计人员负责,每个帐号都会要求一个或一个以上联系人的电子邮件。会计人员换动,要一一更新这些帐号里的电子邮件地址吗?

    情景二:企业对网上业务的依赖度很高,企业对网上业务进行了细分,并有多名专员各自负责某项业务。网上业务对应的活动会直接通知到专员的邮箱。专员离职或岗位调动都要在网上业务的后台程序进行调整专员的电子邮件地址吗?

    我们很难找到一个现成的工具能在情景一和二快速、批量地修改电子邮件地址。

    也有企业干脆用sales, accounts之类的position 描述作为邮箱前缀,对外进行业务沟通。我不喜欢这样,发自sales@company.com的邮件给客户的第一感觉是冷冰冰,缺少personal contact的感觉。

    我们需要在稳定性和个性化之间取得一个平衡。My best practices are –

    1. 创建基于个人名字(personal.name@company.com)的邮件帐号
    2. 创建基于岗位名称(position.name@company.com)的邮件列表
    3. 把员工邮件帐号添加到他的岗位的邮件列表(基于这种目的创建的邮件列表通常只有一个邮件帐号,但一个邮件帐号可以加入多个邮件列表)
    4. 情景一和二采用position.name@company.com注册和发布联系人地址
    5. 发邮件时,发件人显示personal.name@company.com
    6. 客人第一次联系,如果是通过填写网上询价单的方式,业务的信息通过position.name@company.com的列表送达了personal.name@company.com,回信就没必要再通过position.name@company.com。
    7. 因为position通常比personal稳定,在情景一和二时,我们所要做的,就是在Google App Mail, Manage this domain, User accounts, Mail list里更新邮件列表
    8. User accounts, Nickname 方法 alias position.name to personal.name 也可以取得跟Mail list类似的管理效率,但如果position.name@company.com是一个nickname,如果要改变它的归属,就必须先删除position.name@company.com,然后到别人名下再创建一次nickname,虽然这过程最快可以在几秒钟完成,但在几秒钟内仍存在丢失发给 position.name@company.com的邮件的可能。用mail list就很完美(可以先添后删)
  • Windows更新安装失败的解决办法

    Windows毛病还不少,而且还摸不着原因,这不是,Windows更新下载来安装却总是失败。幸好,尽管原因不明(真搞不懂,Windows设计出这么复杂的自动更新,却无法把自己装上去,那还叫自动更新吗?),办法还是有的。

    办法一,把以下命令一个个敲一遍(太多了吧?!那看看办法二)

    1. regsvr32 wuweb.dll
    2. regsvr32 wuapi.dll
    3. regsvr32 wucltui.dll
    4. regsvr32 wuaueng.dll
    5. regsvr32 wups.dll
    6. regsvr32 wups2.dll
    7. net stop wuauserv
    8. net start wuauserv
    9. net stop bits
    10. net start bits
    11. net stop w32time
    12. net start w32time
    13. net stop msiserver
    14. net start msiserver

    办法二:(与办法一出处不同,对比之下只是办法一的简化版,可能办法一适用性更广,但我只用办法二就能解决我自个儿碰到的问题)

    1. net stop wuauserv (停止自动更新服务)
    2. 32位版的用户:regsvr32 %windir%\system32\wups2.dll
      64位版的用户:regsvr32 %windir%\syswow64\wups2.dll
    3. net start wuauserv (这里当然是重启自动更新服务啦)