January 11, 2011

2010 Favorites

现在来做年终点评似乎有点晚…不过貌似2011年比2010年过得还要快,趁着还有印象记录一下吧…

Book of the Year: 幽灵代笔(Ghost Written)- David Mitchell

每章都在变换写法,变换角度,作者的确是在炫技,但是令人印象深刻。

Movie of the Year: 后窗(Rear Window) - Alfred Hitchcock

所谓经典就是50年后看来毫不过时,或者50年来的电影都还是同一种腔调。

Album of the Year: 空缺

不过在豆瓣电台的熏陶下,风格彻底转变为民谣/小清新。

App of the Year: Flipboard

浪费时间的利器,特别是丫集合了Twitter/Google Reader和各种新闻源。

Favorite Chrome Plugin: iReader

Readability, but better.

Favorite Chinese Website: 129T

解决了大约1/20的伙食问题…不过今年大概不怎么会用了…

October 2, 2010

苏州旅游

基本上只在老城区逛了逛…还是吃的比较赞. 奥灶面,小笼,生煎,虾仁都挺不俗的,苏州菜似乎都略甜,别有一番风味. 还在新城区吃了人均仅138的自助日本料理,还是每桌一个包厢…

杂记

  • 城际列车过去只要半小时…不过苏州地铁还是没有造好
  • 公交居然可以用上海的交通卡,还可以打九折…
  • 出门在外,Google Map还是不可少…用iPhone的同学记得加这个源: http://apt.mirrordev.com/ 以解偏移之苦
  • 国庆前貌似游客都到上海去了…下雨天的平江路几乎没有人…还是挺有滋味的…
  • 再次推荐使用Google Map的My Map功能规划行程, 随后可以用 https://mymapsmobile.com/ 来在iPhone上访问,几乎完美

July 9, 2010

ContainerView的HitTest

有时候想把Flash里的常用的用空Sprite来管理内容层级的方法用在iOS里,用一个空的UIView来管理UIView Hierarchy, 但是不希望这个空白的UIView吃掉下层的Touch Event, 这时候可以Override UIView的hitTest:withEvent:来解决.


(Link)

但是iOS毕竟不比Flash,大多数的View还是Opaque的为妙,基本上不鼓励透明的Subview Overlap,而且也没有自动的Per-pixel检测的HitTest(也没必要),估计这个方法也只能用在Subview数量很少的Case里。

June 21, 2010

Xcode 4

Down了几个WWDC10的iTunes U Session下来看…果然Xcode4改动巨大…弄得Xcode3都懒得打开了…

主要内容在Session 300 - Developer Tools State of the Union里有很详细的介绍,可以在这里down到,不过需要一个Apple ID.

新的All-in-One interface

原来Xcode很不爽的一点就是无数的Floating Panel,3.2里把Search&Replace和Compile Error放到Edit Panel的上面,遮盖的问题有所改善,但是编辑空间就少了很多…这次的UI就彻底解决了这个问题,左边的Tree View加上了小Tab,Search&Replace,Navigation,Compile Issues都放在这里,可以很方便地导航。右边则是Dynamic Help(没啥用),IB里的Properties和Object Library,还有Snippets.上面的BreadCrumb也在所有的编辑窗口里都功能一致.

Git/SVN支持以及历史版本Diff功能

历史文件的Diff功能非常贴心的做成了一个Time Machine一样的界面,可以在中间的时间条上拖动来对比。右边可以显示每行代码的Sumbit Log…左边导航条的Filter功能可以方便的一键Filter出所有没有Submit的文件.

LLVM带来的Code Completion和Fix it

Fix it其实类似代码的Spell Check,会提示你是不是用错了“=”号,是不是变量名拼错,是不是漏了分号等等…和Compile Error不一样,它是你边打代码边分析的,而且还有快捷键来自动改掉上一个发现的错误…号称和Static Analysis一样Powered by LLVM,所以非常智能

其他的改进还有:

  • Interface Builder被整合到Xcode当中…而且整合Class代码和IBOutlet变得简单很多,选择IB里的控件会自动在右边窗口显示相关的代码
  • 左右窗口同时显示.h和.m,或者.m和super class
  • LLDB和新的Debug UI
  • 某几只新的Instrument以及某些Instrument可以在iPhone上跑了,更方便的Profile

其他很多细节都很棒,例如Search&Replace里的小Slider,还有Debug的时候让Simulator显示在Xcode前面等等,接下来就是等啥时候放出了…

April 7, 2010

杭州旅游

最赞的还是遍布各处的公共自行车服务了。几乎不要钱,网点非常多,只需在Google Map上查找“公共自行车”即可获悉网点。(下图)


查看大图

刚到时候要到龙翔桥办Z卡,然后就可以在任意网点租借了,押金200,还有100块存在IC卡里。到快走的时候退卡也在龙翔桥。(下图,然而完全不知道桥在什么地方)


查看大图

之后的当务之急是找到离酒店最近的租车点,然后来回景区就无忧了,恩恩。

杭州印象比较好的还有

  • 十字路口都写着车等人的标志…有时候车真的会等你过马路哦
  • 生活节奏感觉舒缓很多,路上人的压力感觉没这么大,不象上海人人都有仇似的

之前都是用Google Map的我的地图在做旅游的计划,用iPhone的同学可以通过这个网址来访问,可以把Google Map同步到iPhone上去,异常Handy,只可惜中国移动的线路上50%的时候Google Map是被GFW的...

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 9和A Serious Man, 不过看现状貌似Avatar和The 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网页开发工具, 主要是Coda和Espresso. 大概都有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上还是一个天一个地啊…泪奔…

January 16, 2010

绕过iPhone SDK的Code Signing实机测试

是给Jailbreak众用的, 在花99刀之前可以在自己的机器上跑跑看写好的程序.

步骤其实很简单:

  1. 在Terminal里打开SDK的目录

    open /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
    
    然后可以看到下列的SDK

  2. 打开其中你所需要的一个, 修改里面的SDKSettings.plist为

    <key>DefaultProperties</key>
     <dict>
      <key>AD_HOC_CODE_SIGNING_ALLOWED</key>
      <string>NO</string>
      <key>CODE_SIGNING_REQUIRED</key>
      <string>NO</string>
      <key>CODE_SIGN_ENTITLEMENTS</key>
      <string></string>
      <key>DEAD_CODE_STRIPPING</key>
      <string>YES</string>
      <key>ENTITLEMENTS_REQUIRED</key>
      <string>NO</string>
    </dict>
    ...

    注意修改操作需要root权限,建议试用Smultron之类的文本编辑软件

  3. 最后在Project->Edit Project Settings里把Code Signing关掉
然后便可以Command + R直接跑了

January 10, 2010

Bye Bye, GFW

不知为何最近媒体里关于防火墙的报道突然多了起来. "我们的防火墙"试图用一种貌似客观的语气来分析防火墙的成因和效果,可能也兼有Justify政府做法和期待政府正视的心理在里面. 这一期的凤凰周刊也是封面大字写着: "海外反动网站名单调查/中国拟构建超级网络管理制度". 虽说内文完全没有封面Matrix Style的设计那样抓人眼球, 不过平时老是遮遮掩掩的防火墙突然变成街头书报摊挂在最醒目位置的杂志的主题还是让人觉得有点怪异的感觉, 甚至让人误以为我们快要到防火墙全民大讨论的时候了.

打开浏览器, 一盆冷水还是浇了下来, 报道毕竟还是个例, 大多数时候我们看到的还是主流媒体指鹿为马的统计数据和偏见报道, 而去年下半年以来墙越收越紧也是人人都能感觉得到的. 年初的时候我们还有无数的翻墙方式, 到年底的时候就算知道墙存在的少数人也很难爬过去了. 而内容方面国内可能被整的网站都被整到半身不遂, 国外网站的白名单制度也指日可待. 其实不需要有人来为防火墙著书立传, 大多数国内的互联网用户都对墙的所作所为记得一清二楚.

今天终于搞定了VPN, 打开Youtube, 居然觉得非常奇妙. 发现Google Reader里大多数的Link居然都可以打开了. Twitter上群众转贴的无聊照片居然也都能看见. 看来我已经被墙太久, 都差不多忘记墙外是什么样的了.

当然明天一切可能会更糟, 不过今天
Bye Bye, GFW

P.S. 凤凰周刊不好看, 充满了被审查下仍然努力表现"良知"的无力感.

November 30, 2009

难得夸奖下ubi的游戏

当然说的是Assassin's Creed 2

首先宣传下行业形势. 这两年Console业的趋势貌似就是大作越做越大, 连Marketing+Production, 例如CoD, GTA这种投入上亿, 销售额几亿的. 然而群众的消费能力却没有水涨船高, 于是第二集团就活的很苦. 通常年景再差, 一般Average Rating 8+的主流游戏卖个一两百万还是没有问题的, 但是到了这两年能蹭到100w就算万事大吉了, 估计要到第二年才能Break Even, 和能卖5m-10m的一线大作相比真是一个天上一个地下. 于是今年的游戏就一个赛一个的往大作方向膨胀, 或者就干脆延期避风头, 看是不是在来年多蹭点分... (当然与此相对的就是indie游戏的一只又一只小强了, 不过这是后话...)

ubi今年的赌注就押在Assassin's Creed 2上了. 不过说来Assassin 1真的是有史以来根基最好, 然而Content最拖后腿的游戏了...主角动画的无数Seamless transition + 不错的密集Crowd实现 + 还行的Sandbox + 帅气的背景设定, 硬是被无数一模一样的set piece任务给毁了. 当年赶工出货恐怕是这项目4年的周期已经快要突破总部老大的底限, 没想到居然一炮走红, 就算是个完成度80%的类Tech Demo也卖了6m套, 这次AC2终于可以把所有精力都放在Content上了

改进的第一点很简单, 看过了GTA的同学都明白, 这年头的游戏一半靠Gameplay Variety, 另一半靠Story Telling. Gameplay是那玄之又玄, 有的没的东西, 但是Story Telling做起来就简单多了, 堆人力嘛. 于是就硬是帮主线剧情每个任务配上了Intro/Outro, 总计大概四五个小时的RTC时间, 说实话, 效果的确立竿见影.

第二点也是偷学自GTA, 你要做的Action尽管还是原来那一套, 但是任务的Context则要比以前丰富多彩的多, 例如不是让你去收集某种道具A, 叫你去帮盗贼工会踩点; 又例如不是让你到A点到B点到C点, 叫你去为下一次暗杀在教堂附近踩点. 然后这次除了Basic Gameplay搞重用和Ramp Up之外, 终于给我们做了几段帅气的Unique Gameplay, 例如马车和滑翔翼, 只用一次群众才会印象深刻嘛.

第三点就是时代背景了(1450-1500). 当然初代十字军东征的背景其实也不错, 但是由于故事线过于简单的缘故, 最后连除了主角连印象深刻的名字也没记下一个...这次的剧本对于政治戏+亦真亦假历史背景的使用终于到了登峰造极的地步. 除了主角家族以外, 大多数的登场人物都在历史当中有迹可循, 而且为了满足群众这方面的需求, 游戏还特地设计了Codex和The Truth系列互动谜题, 把阴谋论的Scope扩大化, 把几千年历史可能可以用来搞阴谋论的人物事件说了个遍.

当然游戏的技术优势在过了两年后一样还在, 至少在这个世代在Free-Running这个Catagory估计不会有这个游戏的敌手了.

有史以来最大Scope的代价就是3个Studio一起才好不容易完成了这个游戏的Content制作, 据说顶峰时期有近600人挂在这个项目的名号下...就算如此, 除了Firenzi和Venice之外的几个城市几乎没有啥主线剧情, 好多人物也是匆匆登了个场之后就再也没有出现过. 估计也是到后来实在没法按时做完, 只能砍掉一点了...就算如此这游戏还是有近20小时的游戏时间, 比一般ubi游戏的长度长了一半还多...

最后发一点牢骚. 感觉现在Console业实在是Risk越来越大, 像EA这样几十个项目同时开工, 凑到今年这样不大好的年份也只能吃瘪, 先前的资本输得底裤也没了. 而Activision或者2K这样的如果一年没有个千万级的Blockbuster估计剩下项目也要歇火, 归根到底还是渠道和受众实在太单一. 特立独行的游戏群众看不到也买不到, 大多数项目的精力都花在翻版去年或者今年的Marketing Trend上, 只是加上不同的味精而已, 死于同质化竞争也是活该吧.

August 6, 2009

Filemaker库存管理数据库

花了一个礼拜时间, 帮老婆用Filemaker折腾了个库存管理的数据库...不知道Filemaker是什么的同学, 可以点击Link瞧一眼, 可是有简体中文版的哦...通俗的来讲就是一只能用的Access, 更通俗一点来讲, 就是Excel的多表关联功能+自定义UI进化版

Why Filemaker

其实开搞以前也没怎么做过横向对比...不过弄到后来...发现自己对写这个东西渐渐上瘾了...-.-...总而言之就是越用越顺手...还是罗列一下这只东西的好处吧...

  1. 轻量级. 不需要啥后台数据库, 打开软件即可编辑...整个数据库只有一个文件, 配合Dropbox方便做版本管理...
  2. 入门门槛一般但是Script和Calculation都很简明易用且强大. 不用会SQL, 但是对数据库Relationship的理解并不是马上就能让人用得顺手的...不过一旦掌握了其中要领, 此后就融会贯通了...
  3. 自定义Layout. 不仅仅是用来做数据的呈现, 配合Portal, UI很大程度上是用来指引工作流和软件的功能...
  4. 跨平台. 不管Win还是Mac都能并行修改...

功能定义

  • 库存管理: 管理进出库, 维护产品列表和库存统计
  • 进货/出货: 管理进货单/出货单, 包括日期, 进货商和顾客列表和进出货明细
  • 利润分析: 给定时间节点的毛利/净利分析 

 
(库存管理)

(利润分析)

制作流程

  1. 分析数据关联性, 建立初步的表格. 设定字段的类型以及自动计算的字段的计算公式
  2. 设定表格的关联结构, 增加某些关联需要的字段
  3. 制作初步的Layout和Report, 方便数据录入
  4. 用内建的Script制作某些自动化操作的流程, 并且和Layout绑定简化输入 
 
(表格)

(表格的关联)

Lessons & Suggestions

  • 对Relation的理解真的非常重要...两个关联的表, 几乎所有的变量都可以直接引用, 期间的关系要比我最初YY的自动很多~
  • 两本入门书: Filemaker Pro, the missing manual, Filemaker Pro 10 Bible...
  • 基本上Script可以做到一切你想做到的事情...如果要对Portal项操作...通常的做法是Find Related Records, 然后遍历
  • 如果有机会再写一遍的话, 应该把UI/Script和数据分开, 这样就可以不影响数据直接更新程序了
  • Workflow->Design->Data Structure

July 22, 2009

日食

5分钟的黑暗其实感觉让这一天变得长了很多...
希望这冗长的一年也能这么快过去...

验证码:5aw5atRa

June 25, 2009

June.24, GFW day

终于Google也被下了毒手, 直到此时此刻, google.com仍然全线抽风中, 包括Google Reader, Gmail, Google Docs, Google Calender. 一度曾经恢复过短暂的几十分钟, 但是即使是时断时续的状况也足以Piss Off大量工作乃至闲暇时间对Google有着严重依赖性的一小撮网民了, 例如你我...

指鹿为马的事情其实最近一直在发生, 不过恐怕今天这样的事件才算是真正几乎触及群众底线了... 当然可想而知, 明天早上醒来, 博客圈, Twitter上必然是铺天盖地的言语讨伐, 而官方则会不痛不痒的继续口诛笔伐西方腐败势力的侵袭, 无力感和无助感从来没有像这一时刻这样强烈...

又到了孟姜女哭长城的时代么...

May 19, 2009

GFW好强大...

Blogger果然又被墙了...然而本着百折不挠的决心, 就算这次连后台也被墙了, 但是挂Hotspot Shield还是要照上~

HS的确最近有点夸张的慢...所以准备再挂个Tor试试...Mac上翻墙工具好像不多的说...

May 9, 2009

工作时间与工作效率

据在法国工作的群众说法国人一年大多数的星期都只有4天工作日...外加之5个星期的年假日和无限制的全薪病假...貌似工作日要比国人少很多...可能这就是传说中的社会主义社会吧...

法国众说他们工作时间短但是工作效率高...因为法国人做事有条理, 有秩序, 所以4天可以干其他国家5天+的事情...这点虽然不敢苟同, 但是又一个命题确是确实存在的, 工作时间和工作成果真得成正比么? 或者说是不是工作时长越短, 其实工作效率更高, 生活质量也更高, 反过来能够做出更多的成果呢?

很容易理解的一点是OT和工作效率是成反比的... 其实在我大多数的经验中, 如果一天OT3小时的话其实大多数情况下事都是可以在8小时内解决的... 但是还是要留下来的情况有

  1. 制度规定. 也就是说非个人完全自愿
  2. 工作上的依赖性. 也就是说某日收尾的活要等待别人的Feature或者Verification
  3. 流程的需要. 也就是说Routine的工作内容要占用大量的工作时间, 以至于只有OT才有可能解决

通常情况下, 很明显的一点就是正常工作时间外的工作效率和通常的工作效率相比有级数的差别...例如原来10分钟能完成的事情现在要画上1个小时这个样子...这还不计算因为工作时间过长犯的错误造成的延误...

更加隐形也更加危险的一点是单位工作时间价值的贬值... 在上海的出租车司机要拼死拼活开12个小时才能勉强赚个三四千块钱一个月, 而且要不停的奔波劳顿找生意, 基本上是个强体力活; 而在大多数的发达国家可能一个星期出租车司机就能赚到生活所需的钱, 而且大多数时候以电话预约为主, 没生意的时候是切切实实的休息...

生活质量的下降当然也会造成工作态度的差别...长次以往更加悲惨的一点就是市场会认为出租车司机单位时间的工作还不值现在的钱, 因为选择很多, 态度又很差...所以出租车司机只能工作更长的时间才能够赚到同样的钱, 或者由于通货膨胀的缘故, 维持现有的生活水准...

当然这里的出租车司机只是一个生活切面的写照而已...所有行业都可能如此...洋人有年假有午休, 我们则有24小时便利店来创造就业机会...很多时候我也会想生活所谓的便利到底给我们带来了什么...

不过长久来看...所有的重复性劳动工作都会被机器所代替, 只有真正创造价值的东西才会保留下来...其实现实情况已经如此

Did you know 3.0里说:
The top 10 in-demand jobs in 2010...
...did not exist in 2004

尽管短期内看可能事情并不尽如人意, 但是长远来看, 每个人都能不受束缚, 做有意义的事情才是世界真正发展的方向...

May 3, 2009

改了只新模板...

Copy jjgod的模板...改到Blogger上...从此告别Messy的可见即所得编辑器...
顺便说一句...Safari的Web Inspector真是个好东西...

几只AppleScript脚本...

一个月前捣鼓了一个晚上AppleScript才搞定的简单功能...大多数还是Google到的...事实证明Apple的AppleScript文档非常烂...同时像样的脚本语言+Terminal还是王道...有空时候一定要稍微学学Python...


自动把解压的文件放到Movie目录去


on adding folder items to this_folder after receiving added_items

delay 0.2

set this_folder to alias "Liz's MBP:Users:liz:Downloads:Extract:"

set target_folder to alias "Liz's MBP:Users:liz:Movies:"

set fileList to {}

set fileList to my recursiveSearch(fileList, this_folder)

tell application "Finder"

repeat with aItem in fileList

if name extension of aItem is in {"avi", "wmv", "srt", "idx", "sub", "mkv"} then

if aItem exists then

move aItem to target_folder

end if

end if

end repeat

end tell

end adding folder items to

on recursiveSearch(theList, currentFolder)

tell application "Finder"

set theList to theList & (every file of currentFolder)

set folderList to (every folder of currentFolder)

repeat with newFolder in folderList

set theList to my recursiveSearch(theList, newFolder)

end repeat

return theList

end tell

end recursiveSearch

其实应该没这么复杂...只是如果我只对操作传进来的文件进行处理的话就老是执行不正确...会漏掉几个...总而言之现在就是有个Recursive的Search

使用方法是把它放到root/Library/Scripts/Folder Action Scripts里, 然后绑定在一个文件夹上, 这样有文件改动的时候就会触发


删除空文件夹


--script to find empty folders and delete them

set pathoffolder to alias "Liz's MBP:Users:liz:Downloads:Extract:"

--change folder here

tell application "Finder"

repeat with oneFolder in (get folders of pathoffolder)

if (count items) of oneFolder is 0 or ((count items) of oneFolder is 1 and name of item 1 of oneFolder is ".DS_Store") then delete oneFolder

end repeat

end tell

这个要手动触发...会自动过滤系统文件

March 20, 2009

推荐一个Quicklook Plugin

Quicklook是我最爱的Leopard Feature之一了...大多数类型的文件只要按一个空格就秒间开始Preview, 包括各种图片/视频/Office文档等等...而对于默认不支持的文件类型, 灵活的插件系统也很大程度上弥补了这个缺陷...

今天要推荐的是个Syntax Highlight的Plugin, 免费且开源...名叫qlcolorcode, 详见Google Code:
http://code.google.com/p/qlcolorcode/downloads/list

效果如下:
很棒的一点是有些它默认不支持的格式也可以通过修改 显示包内容 -> Contents -> Info.plist来增加...
例如加个nfo的支持:
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.source-code</string>
</array>
<key>UTTypeDescription</key>
<string>QLColorCode Test File</string>
<key>UTTypeIdentifier</key>
<string>org.n8gray.bogusextension</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>nfo</string>
<string>bogus_extension</string>
</array>
</dict>
</dict>

改完拖回到Quicklook Plugin的目录:
/Library/QuickLook
然后在Terminal里重启下索引:
qlmanage -r
就OK了