February 28, 2010

事实证明Profiling总是必要的...

之前就隐隐约约怀疑自己Server端Resize图片的function可能会有Performance Hit…昨天用Firebug看了一下居然在没有Cache的情况下每次Reload要7秒钟Page才开始Render, 之前都一直在等待Server的Response…被惊到了…原来用的getimagesize();的php function要把图片先下载到server然后才能判断大小, 期间会Block所有Render…所以就在那里活活的wait了7秒钟了…

开始想用JS来做客户端的Resize, 看了一会会jQuery, 决定第二天再写…后来突然想到其实可以直接把图片的大小存在Server端的post-meta…反正要Resize的只有post-image这一张图片…这样每个帖子第一次访问的时候server会访问一下图片, 把大小存下来, 之后其他人的访问就可以直接从数据库读大小, 就是秒间的事了…

改了两分钟搞定, 等待Server response的时间从7秒降到了0.7秒…

改完的代码如下:

(link)

92季奥斯卡

今年比较有空, 大多数的提名片都看了…而且今年提名扩招, 感觉上似乎比前两年看得更多了一点…照例短评

Avatar
★★★★

人人都看过若干遍了…制作上自然是无与伦比…之后的大制作如果出不了这样的效果可能群众就不会买账了…不过很有可能的结果是我们要等到Avatar 2才能重温到这个档次的制作了…在此之前的副作用是我们会看到每年有一半的片子是3D的…至于故事么…真得没什么感觉…

The Blind Side
★★★★★

技术上来讲同属于今年死灰复燃的温情片系列…沉默寡言的黑人小孩进入了富裕的领养家庭, 一切都是顺顺利利, 平平安安…剧情有点像当年看过的青春片美剧O.C. 不过一切都胜在细节, 让你眼角湿润的就是那些尽在不言处的时刻. 不过就如其他的温情片一样, 如果你没有被说服, 那整部片子本身就是虚假的谎言, 自然也没什么谈得上印象深刻的了…

District 9
★★★★

这片子让我知道了什么叫做南非口音…同时也告诉我们没有2亿的投资也能做出让人印象深刻的科幻片. 某种程度上它非常写实, 刨去外星人的成分, 片子里的事情其实每时每刻都在地球上发生着… 荒诞和可笑

An Education
★★★

博识早熟的高中女生遇上了风流潇洒善解人意的艺术品富商…类似的故事地摊小说上已经写烂了…唯一的可取之处可能是片中的所有人对生活的意义都有非常不同的理解, 直到生活把女主角拖回现实.

The Hurt Locker
★★★★

大概有20%的时间我们听到的是男主角沉重的呼吸声…正常人自然没法理解他的生活, 不过那种肾上腺素分泌的感觉可能和嗑药差不多…

Inglourious Basterds
★★★★

Bang, Bang, Bang… 所谓的好看的电影应该说的就是这个样子的吧…不缺情节也不缺笑料…说不定昆汀真能拿个奥斯卡呢…

Precious
★★★★

仍然是温情系列, 不过这片子写实得有点让人难以下咽了…

A Serious Man
★★★★

典型犹太人的悲惨生活…某种程度上似乎我非常能够理解片中主角的遭遇, 不停的妥协, 带来的结果就是完全失去对生活的控制…而偶尔放弃原则, 又不知结果是喜是忧…

Up
★★★★

今年最佳的开场五分钟…不过之后还是回归了Pixar的老路线, 老少皆宜

Up in the Air
★★★

乍看来克鲁尼的角色应该是很多人的生活目标吧…开始大半截片子还伪装成一部黑色冷幽默片, 尤其因为男主人公的职业和公司业务内容. 后半段继续转型温情片…好吧, 我就是没有被男主角的高管白领小资生活打动啦…


个人比较喜欢的是The Blind Side, District 9A Serious Man, 不过看现状貌似AvatarThe Hurt Locker貌似逃不了得奖…

男女主角的片子也基本都看了…没啥特别的感觉也就不说了…

February 23, 2010

launchd自动备份FTP数据

昨天心血来潮搞的…

launchd是从Tiger开始加的系统服务加载系统, 大意就是可以让你按照某个特定的条件来触发某个程序的执行. 具体介绍可以看这里.

然后要做的就是

  • 写个python脚本从FTP把整个网站拖下来
  • launchd每星期自动执行一次这个脚本

FTP下载的脚本

就着ftplib的Sample写的, 可能会有Bug...

(Link)

launchd的配置文件

(Link)

每个launchd项目都要写个plist作为配置文件, 然后按其中的label命名放在~/Library/LaunchAgents里. 详细语法可以看这里.

搞定以后把它手动加到launchctl里, 不过每次开机也会自动scan上面的LaunchAgent目录
launchctl load ~/Library/LaunchAgents
launchctl list

list以后就可以看到服务在list里面了, 到时间就会在后台偷偷运行… 如果时间错过了会等到下次开机, 很智能的哦.

February 22, 2010

Wordpress模板修改笔记

这几个星期帮老婆弄了一个独立域名的Blog, 要求有以下几点:

  • Blog要分两大块, 一块写琐事杂记, 另一块写商品更新
  • 琐事杂记要有内文引用图片的Gallery
  • 商品更新要求比较复杂
    • 要有橱窗感
    • 要有会员制度, 登录会员可以看到折扣价
    • 会员帐号和琐事杂记帐号共享

下面把过程大概记录一下…

工具篇

尝试了Mac下面的几个All-in-one网页开发工具, 主要是CodaEspresso. 大概都有15天左右的Trial时间…刚好做完整个网站. :)

Coda ($99)

  • FTP功能很棒. 推荐在Remote栏里直接编辑, 然后打开Preference里的Keep idle connection active. 每次Save以后就会自动上传.
  • Site管理简单清晰, 尤其是后来同时更新两个模板的时候. 切换Site会记住所有打开过的文件.
  • 界面比较友善, 上面的6个Tab功能区分清楚, 很快就能上手.
  • 全局搜索功能非常顺手, 可以Cmd-G直接跳到下一个文件
  • php和HTML混排的时候的语法高亮不是很清楚
  • 选择多行Tab不是indent, 会删掉所有内容…
  • 没有XCode里那样的代码折叠功能
  • 没有自动代码整理

Espresso ($79.99)

  • 语法高亮很棒
  • 有代码折叠, 而且Tab/Shift+Tab是indent
  • 没有CSS编辑器…(好吧…其实问题也不是很大)
  • 没有自动代码整理
  • 文件是以Tree的形式来显示的, 不如Coda那样每次可以更改当前文件夹方便
  • 界面好简单…基本还是一只文本编辑器

最后用得比较多的还是Coda, 可能有点先入为主的缘故… 基本上第一次Remote Commit完所有的修改都通过Coda来操作, 不过碰到的一个很痛心棘手的问题就是点到Local栏修改本地文件不会自动从Server上Get最新版…因为不知道这点, 所以很多bug都改了好多遍, 还以为自己déjà vu了呢…后来记得都改Server上Remote的文件就好.

然后经过若干次失败的尝试, 发现Mac下果然没有好用的FTP客户端. 平时用的最多的Cyberduck在传大量小文件的时候还是会莫名其妙断流…不过最后零星的配置文件修改还是用Cyberduck + Smultron搞定

本地测试用的是MAMP, 唯一碰到的一次问题是本地装完WPMU, 结果.htaccess出了问题, 无法登录phpMyAdmin, 后来改了个Apache的参数解决了问题

版本控制开始在本地做了个git depo…后来觉得Checkin麻烦直接用
Dropbox + ln -s…也recover会了次数据

debug CSS主要用的还是Webkit自带的Web Inspector…在Coda里可以直接试用, 后来debug IE的时候也用了下IE8自带的那个…Firebug也用了一点点, 不过通常懒得再开一个Firefox

系统篇

Blog系统开始就觉得Wordpress用的人最多, 应该相对碰到的问题要好解决一些. 后来事实证明的确如此. 主要的一个选择条件是要有两个共享用户数据的Blog, 做了下初期调查有以下几个解决方案:

  • WordpressMU. WordpressMU是Wordpress的多用户多Blog版, 无需额外的Hack就可以支持多个Blog共享用户数据. 不过在万网的空间上安装了很多遍都是装完进欢迎页就直接页面无响应… 怀疑是空间商动了手脚…
  • Wordpress+Catalog Template. 把两种类型的Blog文根据Catalog来分类, 选择不同的Template页面来显示, 同时也可以自定义Catalog主页来解决不同的首页需求. 好处是只需要维护一套后台, 但是坏处是对Blog模板的修改会非常大…
  • Wordpress+共享用户数据库Hack, 这也是最后我选择的方案. 优点的逻辑简单, 修改完以后当两个Blog用就是了, 所有的Blog模板也可以直接拿来用. 缺点就是每次升级Wordpress版本都要重新Hack一次(上个礼拜正好升级了一次…)

最后看到新闻里说Wordpress从3.0开始就要和WordpressMU合并了, 到时候就不用做这么复杂的选择题了.

共享用户数据库Hack

大致上还是按照这个网页的做法, 不过需要根据最后评论更新, 否则会没有权限登录后台.

大致如下(WP2.9.2有效):

把BlogA和BlogB装在不同的目录里, 例如BlogA装在\, BlogB装在\blog\, 两者用同一个数据库, 但是不同的前缀

假设BlogA的数据库前缀是wp_, BlogB前缀是wp2_, 手动修改BlogB的wp-config.php, 在下面加两句:

define('CUSTOM_USER_TABLE', 'wp_users');
define('CUSTOM_USER_META_TABLE', 'wp_usermeta');
//Permission Fix
define('CUSTOM_CAPABILITIES_PREFIX', 'wp_');

然后修改BlogB的wp-includes/capabilities.php, 查找:

$this->cap_key = $wpdb->prefix . 'capabilities';

替换为

if (defined ('CUSTOM_CAPABILITIES_PREFIX')) {
 $this->cap_key = CUSTOM_CAPABILITIES_PREFIX . 'capabilities';
}else{ 
 $this->cap_key = $wpdb->prefix . 'capabilities';
}

查找替换这步每次升级WP版本都要做一次…

最后用下来基本没碰到什么大问题…不过如果要完美的解决方案可能要修改更多的文件, 后来就懒得弄了.


Theme/插件修改

主Blog后来选择的Theme是simpleX 1.3.2, 基本上改动不大, 只是修改了些中文字体的小Bug.

缩略图的部分用了一个国产插件, Thumbnails Anywhere, 这个插件可以帮你把日志中的图片Fetch到本地生成缩略图引用, 如果是Picasa/Yupoo/Flickr的图片还可以直接引用缩略图, 非常赞. 不过原本的首页缩略图只能显示一张, 修改了一下Plugin里的function, 加了多个图片的显示选项, 然后还加了Lightbox的逻辑. 期间还发现Yupoo修改了外链的url, debug了半天.

最终效果(Link):

商品更新的Blog动的手脚比较大, 主要修改如下:

  • 把3栏改成2栏
  • 修改Header/Footer, 增加搜索栏, Tag/Catagory Bar, 公告栏
  • 增加自定义字段的显示: 价格, 购买链接等
  • 所有图片Auto-Scale
  • 根据登录人权限的不同, 设定优惠价

用的theme是ThemeMeme Aperio Prototype, 本身自带caption_image自定义字段的显示, 所以每个帖子都有张大图片. 不过我不得不说这个Theme又老又是Prototype, css的bug真的是很多…

最终效果(link):

自定义字段

自定义字段有个很棒的插件叫Custom Field Template, 做好Template帖子里就可以很容易的添加了…Theme里面的引用大致就是下面这句话:

 $key="custom_key";
 $custom_key = get_post_meta($post->ID, $key, true);

权限判断

权限判断也搞了很久. 首先WP内置的权限设置功能不够, 装了个Capability Manager插件来增加自定义Role和权限.

然后抄到一个function, 来直接判断权限…(自带的那个弄了很久没搞定…)

其中还有一个非常Tricky的地方让我Debug了半天, 里面的get_option('wp2_user_roles');居然直接用的是表名来生成的属性, 而不是某个constant字段, 我用的是wp2_这个前缀, 所以要换成前面贴的那样.

其他插件

其他还有很多挺棒的插件

其他

最痛苦的恐怕就是在Debug IE CSS的时候了…尽管我已经无视了IE6(家里没找到电脑有IE6)

基本上…作为没有任何CSS基础的群众, 心得如下:

  • 用CSS来控制图片自动缩放基本没戏, 没找到任何一种方案在所有浏览器里都能用的. (我后来自己写了个php function来scale, 感觉很影响loading时间, 是不是这个在client端用jQuery之类的会好点?在没有thumbnail的情况下)
  • 碰到IE特有的浮动bug, 先尝试在前面/后面加空div, 再尝试简化css结构
  • IE的filter:dropshadow等超级烂, 不过filter:alpha还行
  • 默认的XP下没有任何一个可以看的黑体, 所有的字大字号都很难看

然后弄了半天, 发现网页在Mac上的渲染效果和PC上特别是IE上还是一个天一个地啊…泪奔…