教程:如何使用 Illustrator 来设计一个 Logo

使用矢量图形设计个性化 Logo,共有7个小视频组成的一个系列教程,来自 Adobe。

MongoDB 常用命令

简单的的增删改查数据

在查询结果中指定显示或者不显示某个字段

例如,我们希望在 lessons 集合中查找所有数据,但是不希望在返回结果中包含 slides 字段;因为 slides 是一个巨长的以 base64 表示的图片数组,影响查询结果的阅读。
那么我们就可以在 query object 后面跟上一个参数。如下:

db.lessons.find({}, {slides:0});

同样也可以明确指定显示哪些字段:

db.bios.find(
{ },
{ name: 1, contribs: 1, _id: 0 }
)

比较操作 – 大于和小于

我们要查询时间范围在 startTime 和 endTime 间的数据记录,同时要求 Content 内容是数字 1 到 5。

db.wemessages.find( {$and: [
    { CreateTime: {$gt: (startTime.getTime()/1000).toString()} },
    { CreateTime: {$lt: (endTime.getTime()/1000).toString()} },
    { Content: {$in: ['1','2','3','4','5']} }
  ]}
);

这里我们使用了 $and 逻辑操作符,和 $gt, $lt, $in 比较操作符。

有关 MongoDB 的操作符,参见:http://docs.mongodb.org/manual/reference/operator/query/

更新一条记录的某些属性

使用 $set 表示只更新指定的字段,而不修改其他字段,我们一般情况下都会是这种意图。

db.lessons.update({}, {$set:{'course_id':'c.101'}});

更新多条记录

使用 {multi: true}

db.lessons.update({}, {$set:{'course_id':'c.101'}}, {multi: true});

db.muusers.update({username: 'tom'}, {$set: {mobile: '6508639713'}}, {multi: true});

排序查询结果

使用 sort 方法

db.muusers.find().sort({firsttime: -1});

-1 降序,1 升序

清爽地查看查询结果

使用 pretty 方法

db.lessons.find({lesson: 1}, {slides: 0, mp3voice:0, wavvoice:0, wavvoicemin: 0}).pretty();

查看不存在某个字段的记录

使用 $exists

db.questions.find({'sequence_id': 1, 'pngslide': {$exists: false}});

db.mycollection.find( { "price" : { "$exists" : false } } )

限定查询结果个数 limit, 以及跳过开始的多少条记录 skip

使用 limitskip

db.translation_memory.find({mp3voice: {$exists: false}}, null, {limit: 100});

删除 collection 中的所有内容

使用 collection 的 remove 方法

db.collection.remove();

得到 collection 中一个字段的长度

链式调用

db.lessons.find({lesson: 1}).toArray()[0].slides.join('').length

Collection 操作

更名 collection

使用 renameCollection 方法

db.quizzes.renameCollection('questions');

删除一个字段

使用 $unset

db.questions.update({}, {$unset: {quiz_name:1}}, {multi: true});

db.learning_progress.update({}, {$unset: {lesson:1}}, {multi: true});

db.lessons.update({}, {$unset: {wavvoice:1, wavvoicemin:1}}, {multi: true});

修改一个字段的名称

使用 $rename

db.students.update( { _id: 1 }, { $rename: { 'nickname': 'alias', 'cell': 'mobile' } } )

注意:有些MongoDB的关键词不能用做Collection的名称,例如:group。

演讲:Node.js 软件开发实践分享

2013年12月5日,我在 51CTO 举办的 『Cloud框架和 Node.js 技术沙龙』上进行了主题为「Node.js 软件开发实践分享」的演讲。

内容包括 Node.js 的模块系统,异常捕捉和错误处理同步操作简化和异步工作流控制,以及生产环境运行和日志这四个方面的主题,同时还介绍了我在 Node.js 开发过程中的一些有趣的技术小故事。

非常感谢 51CTO和百度提供的 Node.js 技术交流的机会,也非常感谢参会同学的积极参加和提问。

应有关参会同学的要求,把演讲 PPT 贴了出来,下面是 PDF 格式的链接:
Node.js 软件开发实践分享

12.11 更新:51CTO网站把这次活动放到头条了,并且放出了所有的 ppt 和演讲视频,地址是:http://mobile.51cto.com/exp/cloudasalon1206/

JavaScript 中基本数据类型和引用类型的区别

大多数人系统学习过的程序设计语言,大概主要是在C/C++, Java,C#这些范畴里面,在这些语言的学习过程中最早学到的几个要点之一就是值类型和引用类型的区别,以及函数调用的时候,参数到底是被作为值传递,还是作为引用传递,在函数内部的修改能否反映到函数外部等。相反在 JavaScript 中,这个同样需要搞清楚的话题却往往容易被忽视(或者根本没被意识到)。

下面我们来看一下在 JavaScript 中基本数据类型(Primitive Types)和引用类型(Reference Types)的区别。

(更多…)

Sencha Touch 2.x FAQ – 多级目录下 Ext.application 中 views 的写法

原先我们的 view 目录下有两个文件:Main.js 和 Home.js,相应的在 Ext.application({…}) 中 views 的写法应该如下:

...
views: [
  'Main',
  'Home'
],
...

假设我们重新组织了 view 目录:在 view 目录下新建一个 login 目录,把 Home.js 放入新建的 login 目录;在 view 目录下再新建一个 main 目录,把 Main.js 放入 main 目录。那么现在 views 的写法应该如下:

...
views: [
  'main.Main',
  'login.Home'
],
...

注意,不是 ‘main/Main’,也不是 ‘main\Main’,而是 'main.Main'

Sencha Touch 2.x FAQ – 把 app/view 下面的文件再用几个目录组织起来之后,程序应该相应的做什么样的修改?

按照 Sencha Touch 的编码约定,把 view 下面的文件的类名改成带子目录的即可,
比如原先我们有一个 Main.js 的 view 文件在目录 app/view 下面,Main.js 中的类定义应该类似于:Ext.define(‘Sencha.view.Main‘, {… }); 这样。

现在我们在 app/view 下面又建了一个 main 目录,即 app/view/main 目录,我们把 Main.js 移到现在这个目录下面。那么现在 Main.js 中的类定义就得改成:Ext.define(‘Sencha.view.main.Main‘, {…}); 依此类推即可。

Sencha Touch 编码约定 -> 命名空间和代码组织

  1. OrganizationName.group[.subgroup].ClassName
  2. 每个类一个单独的文件
  3. 文件名称要和类名一致
  • Ext.chart.Label -> Ext/chart/Label.js
  • Ext.data.writer.Xml -> Ext/data/writer/Xml.js
  • MyApp.field.Password -> MyApp/field/Password.js

本文地址:http://www.tfan.org/sencha-touch-2-x-faq-namespacing-and-code-organization

Sencha Touch 2.x FAQ – 增加一个 View 到 tabpanel 都需要哪些必备的配置信息 ?

和 iOS 类似,要在 tabpanel 中作为一个 Tab 显示的 View 需要提供 tabbar 显示所需的的 title 和 icon 以供正常显示。其中 title 或 icon 两个必须提供一个。否则会提示:Uncaught Error: [ERROR][Ext.Container#onFirstItemAdd] Adding a card to a tab container without specifying any tab configuration

在 View 的 Config 下面配置 titleiconCls 两个属性,例如

Ext.define('mu.view.PresidentList', {
 extend: 'Ext.List',
 xtype: 'president_list',

 config: {
 title: 'presidents',
 iconCls: 'team',
 itemTpl: '{firstName} {lastName}',
 store: "Presidents"
 }
});

原文地址:http://www.tfan.org/faq-configuration-required-to-add-view-to-tab-panel/