分类
小说

舒心汤馆(一)

那天做了三个梦,分别关于阴阳界、泡沫宇宙、社会问题。其中第一个梦也就是关于阴阳界的感觉比较好,温馨鬼故事,所以改写成一篇小说。以下文字纯属虚构,如有雷同,真的是巧合……

分类
js

重写Backbone.js的加载动作

居然在Google里找不到类似的情况,难道只有我一个人会有这种疑问么……

我在使用Backbone的时候,遇到一个问题:我需要用 Backbone.Model 或者 Backbone.Collection 来加载一些远程数据,一般来说都是静态文件,比如HTML或者XML,既不满足RESTful,也不是JSON;虽然不很符合Backbone的要求,不过因为是静态的,所以我觉得ajax应该都没问题。当我按照这个思路写下去,一般就是这样:

var MyModelClass = Backbone.Model.extend({
  url: 'config.xml',
  parse: function (response) {
    console.log(response);
  }
});
var model = new MyModelClass();
model.fetch();

但是运行之后,我发现被覆盖的 parse 没有执行。然而查看网络,目标文件已经被正常加载。作为Backbone的初学者,也不知道问题出在哪里。不得已找来源码跟踪,发现Backbone实现 fetch 是委托给 Backbone.sync 方法,但是在实现的时候会把数据格式设置为json:

// http://documentcloud.github.com/backbone/backbone.js
// Default JSON-request options.
var params = {type: type, dataType: 'json'};

而 jQuery 1.4版之后,会对返回的数据格式进行验证,如果不符合就抛出异常。所以当我那些不是 JSON 但声明是 JSON 的数据加载完毕后,jQuery 就会抛出异常,于是覆盖的parse也就不执行了。

如果远程数据不是JSON,需要覆盖数据加载逻辑时,就应该覆写 .fetch(),比如这样:

var MyModelClass = Backbone.Model.extend({
  url: 'config.xml',
  fetch: function () {
    $.ajax({
      url: this.url,
      context: this,
      success: this.parse
    });
  }
  parse: function (response) {
    console.log(response);
  }
});

var model = new MyModelClass();
model.fecth();

我认为不应该重写 .sync(),因为实际应用中,不同的 Model 和 Collection 可能要提供加载远程数据、加载模板、与 LocalStorage 交互等不同的功能,重写sync也很难满足需要。所以不妨直接在不同的类里面覆盖各自的fetch、save方法。


这篇文章还有人看,那就更新一下。(2016-11-25)

Backbone 用的久了,发现它其实设计了更好的办法解决这种问题:调用 .fetch() 的时候传递 options

// 以下代码通过继承并覆写 .fetch() 方法,告知 jQuery 返回数据类型是 XML
var MyModel = Backbone.Model.extend({
  fetch: function (options) {
    options = options || {};
    options.dataType = 'xml';
    return Backbone.Model.prototype.fetch.call(this, options);
  },
  parse: function (response) {
    console.log(response); // jQuery 会帮我们分析这个 XML
  }
});

这种方式比上面的好得多。

分类
生活

昂首挺胸迈入固态硬盘行列

UPDATE:

  1. 先通过Windows自动更新安装了主板、显卡驱动,然后下载新版驱动精灵,再运行就没问题了
  2. 系统评分,存储有7.6分

老早看到资本家承健升级固态硬盘的博文,我就蠢蠢欲动了。只是由于各种原因,一直没有下手。最近DIY热情再度高涨,加上微软此时发布了新版的Windows 8,于是我决定,拿笔记本(联想V460)试试水——马上要出去玩,笔记本得折腾的好点嘛!前两天趁着内存降价,先入手了8G内存——结果有一条是坏的,还没换回来;又买回块OCZ的60G固态硬盘。终于到周末了,开始动手!

64位的Windows 8之前已经下好,现在第一部工作就是做启动盘。听说微软这次特别提供了自家的启动盘制作工具:Windows 7 USB/DVD Downloader,于是下载,安装,开始把ISO往U盘里灌。结果最初的几次尝试都失败了,每次都是无法写入启动信息。后来用失败信息Google了下才知道,原来是缺了那个创建启动盘的程序:rootrect.exe。找出来复制到Windows 7 USB/DVD Downloader的目录下(C:\User\username\AppData\Local\Apps\Windows 7 USB DVD Download Tool),再次写盘,终于OK了。

然后就是安装固态硬盘。这段过程挺简单的,笔记本拆装内存硬盘并不比台式机难。我的方案是把SSD装在原来的硬盘位,把HDD拆下来装在光驱位——这样一来因为SSD发热量小,可以让掌托不那么热;二来据说硬盘位的接口一般都比光驱位的快。装好SSD之后,我没先装HDD,而是用U盘启动先装好系统,然后插上HDD开始安装其它软件。

上面都是流水账,接下来说说感受吧:

  1. 固态硬盘真心快。为了装HDD得先关机,之后再开机瞬间就到欢迎界面了,太快了~
  2. HDD放在光驱硬盘盒里,卡得并不是很严实。换言之,我还挺担心以后会不会咣当咣当就坏了
  3. Windows 8的驱动相当不给力,装好之后居然一堆设备有问题。
  4. 当前的Windows 8也不算很稳定,时不时就会死次机。
  5. SSD没有我想象中的凉,掌托的部分还是有点温温的。
  6. Windows 8 和这个版本的驱动精灵有冲突,会被搞死。
  7. 以后我准备简单优化下,然后把IDE之类的也放在C盘
分类
PhoneGap

目前使用PhoneGap遇到的问题

使用PhoneGap至今,遇到了不少问题;将来想做的功能也有一些不太知道该怎么做的,都记在这里,作为将来要攻克的难关,也作为将来要分享的文章目录。

  1. PhoneGap没有提供修改Refer的API,可能需要开发插件来实现,不知道Titanium有没有类似的功能
  2. PhoneGap没有提供后台运行service的API,这给推送信息带来了一些问题,不过似乎StackOverFlow上有人提供了解决方案,准备试试
  3. 自动升级。这个利用现有api应该可以完成。
  4. 缓存内容到本地。
分类
PhoneGap

总结下蜂鸟镜头库App开发

前些日子利用业余时间研究PhoneGap+jQuery Mobile开发,找这个项目练手。写到一半又拿Backbone重构了下。如今还有很多问题,先停下来总结一下。

  1. 效率问题。屏幕越大效率越差,在Kindle Fire的表现也不如想象中理想。
  2. 启动速度慢。不像跑在浏览器那样,瞬间就打开了(因为会忽视掉打开浏览器和渲染的时间),所以应该需要一张图片作为启动图片——这个图片似乎不能自动缩放——在Kindle Fire里会导致程序崩溃。
  3. jQuery Mobile还有一些bug,目前还不确定原因和解决方案。
    1. 我有两个ul要做成listview,第一个什么都不写,填充内容后.listview()一下就可以;第二个则必须在html里就写好data-role=”listview”才行。
    2. 切换页面的时候只能从右往左,reverse=true也不行
  4. jQuery Mobile没有弹出组件,dialog的实现是跳转页面,不是很爽。
  5. Backbone是个好东西,尤其是开发过Flash,用起来感觉更顺手了。
  6. Backbone 0.9.1复写Collection的parse方法无效,不知道是为什么
    问题已解决:《重写Backbone.js的加载动作》
  7. 当需要事件从一处发生,而在另一处响应的时候,Backbone并没有提供很好的办法,用惯了robotlegs之类的框架在这里略有不爽。我想拿Model来作为Mediator应该不错。

再练手的话,准备用去哪儿的api,感觉挺开放的。

分类
电影

那些年,我不曾追过的女孩

昨天晚上跟媳妇一起看了《那些年,我们一起追过的女孩》。

虽然导演最后告诉我们,在另外一个平行世界里,柯腾和沈佳怡走到了一起;但是看到在这个世界里,她却和另外一个男人结婚,还是让人心痛不已(尤其导演找帅哥来演自己却故意找个一脸大叔相的男人来当新郎)。女人也真是麻烦,喜欢就是喜欢了,明明朝夕相伴3年多,已经彼此了解到很透彻,还是要再让追一追,不肯就这么敞开心扉接受对方;结果夜长梦多,一朝失手,满盘皆输。男的也真是青春热血,为了吵架而吵架,只因为对方语气不好就发生冲突,之后竟然能2年都不联系(当然里面有被好朋友挖墙脚的因素)。

看着电影,我也不禁回忆起我那活力四射的青春,好在我和媳妇心气都不高,吵了架之后很快就能和好,又在同一个地方,才能一路走到现在。

关于梦想,我现在还在坚持,而且我的目标越发清晰,我也实现了很多。

电影里面那“帅帅的光头”其实明明是圆寸——可惜我已经告别圆寸了。

好想买一身“男人就要不停战斗!”的T恤回来穿。

分类
PhoneGap

使用PhoneGap+jQuery Moblie开发蜂鸟镜头库手机App

蜂鸟镜头库app效果图
蜂鸟镜头库app

自从春节期间在家尝试了PhoneGap之后,一直想做点实际的东西,好总结点经验,以备不时之需。可惜后台苦手,数据源是个问题。后来想起来以前做蜂鸟镜头库的时候有两个接口,可以取得完整的数据,于是便动起手来,开始做这个app。

开发本身并不复杂,大概花了一天时间搞出雏形,加上翻页基本就能发布了。不过还是遇到不少问题,今天简单总结下踩过的坑,以免以后再踩。

分类
as

在纯AS项目中嵌入swf资源

近来想要告别Flash Pro编译,因为从效率上和资源占用上来说,FlashDevelop功能齐全又快速方便。不过有些图形资源还是只有用Flash Pro做起来最简单,而且我的早期项目大多是在Flash Pro里做的,所以我需要将他们嵌入到代码当中。

经过尝试,最符合我要求的操作是这样:

[Embed(source = '/assets/bannerProducer.swf', symbol = "toolbar")]
[Bindable]
public static var TOOL_BAR:Class;

其中,source后面的路径是项目路径,和嵌入元素的类所在的包无关;symbol属性指向的是希望从swf中取出哪个元件,元件需要事先在属性里选择“为ActionScript导出”。使用的时候直接声明实例就好:

var toolbar:TOOL_BAR = new TOOL_BAR();

PS:发现这样做之后,字体会有问题。在Flash Pro里面,文本框设置字体为“微软雅黑”,然后在平滑选项里选择“使用设备字体”,输出的swf会有限使用本地的“微软雅黑”字体;导入再输出的时候,只会保留“设备字体”这个选择。如果在Flash Pro里面嵌入字体,显示就正常了。

分类
电影

碟中谍4

《碟中谍4》确实很好看,好多镜头都能成为经典,迪拜塔上的镜头看得我菊花紧了又紧……可惜最后的动作场面反而不如中间那么紧张和刺激,有点小失望。总体评价4星半吧,值得去看。

分类
生活

AS3中的插件模式开发(二)

本系列文章将在新博客更新,链接在此,请移步阅读。