Linux 平台 LLVM+CLang 推荐编译选项及说明

如果你看完了上面两篇文章编译  LLVM+CLang 还是没有成功的话,建议你使用下面的 cmake 命令:
cmake -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86"  ../llvm

选项的简单说明:

  • CMAKE_BUILD_TYPE=Release

    编译类型,默认是 Debug,特点是编译时间大概需要数小时,占用空间大概15-20G,内存不足8G 的话大概会占用很多 swap 空间,造成速度更慢。改成 Release 省空间省时间,还不容易出错。

  • LLVM_TARGETS_TO_BUILD=”X86″

    只编译针对 X86系统部分。默认会面向所有平台编译,指定只编译自己需要的 CPU 架构可以节省编译时间。

  • ../llvm

    我的 llvm 源码路径,改成你的 llvm 源码目录的绝对路径或者相对路径即可。

运行完 cmake 之后,再运行 make 和 sudo make install 即可,祝编译顺利!

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/