专职C++

不能停止的脚步

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  136 Posts :: 7 Stories :: 134 Comments :: 0 Trackbacks

常用链接

留言簿(13)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

60天内阅读排行

置顶随笔 #

     摘要: 今年7月以来,终于完全投入到cocos2dx手机项目开发了。真是不容易啊。在这之前,做了很多尝试cocos的各种版本。cocos2dx 2.2.2,quick cocos2dx 2.2.4,cocos2dx 2.2.5,cocos2dx.3.0,cocos2dx 3.1,最终,决定还是使用2.2.2这个版本,我的大多数例子也是基于这个版本的,其它的或多或少总有些问题。特别是这次cocos2dx 2.2.5发布,问题也比较大,作者有些随意了。随机项目中进展,我会把项目遇到的问题,会以笔记的方式列出来,为什么:为我以为再次遇到问题可以快速度解决。  阅读全文
posted @ 2014-07-15 23:37 冬瓜 阅读(2091) | 评论 (2)编辑 收藏

     摘要: 由于开发游戏服务器,常常会用到各种时间判断。这里就在原有的标准C时间函数上做了一些扩展,使他可以方便的用在游戏中。希望能对你有用:)
如果涉及到时候,请在程序启动的时候,先运行tzset()。这个函数会设置时间函数的全局变量timezone。下面有些函数用到了,请注意!
注意:C++Builder使用mktime,有bug!使用C++Builder的同志们要注意!
(更新说明,函数有所调整,更新随笔)
  阅读全文
posted @ 2013-06-27 12:09 冬瓜 阅读(1887) | 评论 (1)编辑 收藏

2017年4月21日 #

基于vscode的node的ES2015(ES6)运行环境搭建

用了vscode也有一段时间了,在轻量级的开发环境,它的功能是最强的。跨平台,不依赖Java, .net等,UI也很现代,运行速度也相对比较快,占用内存少,平板电脑的win10都可以轻松开发。

环境说明:

  • node.js 6.9.x
  • vscode 1.11.2
  • 操作系统 win10 (win7之后的系统,安装方法应该都一样)
  • 编译插件:babel

第一步:安装node

www.nodejs.org 下载安装包 6.x,默认安装 注意:在生产环境,建议使用LTS,比较稳定,bug相对比较少。 
下载后,一路默认安装就可以了

第二步:安装vscode

vscode我就不介绍了,去https://code.visualstudio.com/下载对应的安装包就可以了,写这个文章的版本是1.11.2 
下载后,一路默认安装就可以了 
(如果是国产软件,千万不要一路默认安装,如百****du,会给你默认安装一个全家桶,占领你的启动,瞬间让你的电脑卡成翔)

第三步:安装全局的babel

在命令提示符下,输入下面命令:

npm install babel-cli babel-eslint -g
  • 1
  • 1

完成后,可以输入

babel --version
  • 1
  • 1

可以显示babel的版本号

第四步:用npm init创建工程

如果已创建,则跳过 
在控制台下,建好工程目录,如:d:\work\firstnode 
然后进入该目录

d: cd d:\work\firstnode ppm init
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

完成node的工程创建 
为了便于管理,我们将源代码目录放在lib目录下面,或src目录,在这里我用的是lib目录 
编译后可以运行的目录放在build目录下面 
这样就会有两个目录

d:\work\firstnode\lib d:\work\firstnode\build
  • 1
  • 2
  • 1
  • 2

第五步:安装编译插件

在控制台下,目录为d:\work\firstnode安装插件,输入: 
npm install –save-dev babel-preset-eslatest-node6 
第六步:编写.babelrc

//---------------------------------------------------------- 
{
"presets": ["eslatest-node6"],
"plugins": [ ]
}
//---------------------------------------------------------------
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

第七步:用vscode编写代码

在控制台并在d:\work\firstnode下面,输入code .就可以打开当前工程 
或者先启动vscode后,选择打开文件夹,选择这个目录也可以。 
在vscode的左边的资源管理器,新建一个index.js放到lib目录下面

//-------------index.js-------------------------------------- 
console.log("hello world");
//---------------------------------------------------------------
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

然后在控制台下输入命令

babel lib -d build\lib
  • 1
  • 1

就可以看到在build\lib目录面,多了一个index.js

第八步:配置运行

用vscode选择调试,调试显示的是没有配置,然后进行配置,就会进入vscode配置lanuch.json编辑

{     
// Use IntelliSense to learn about possible Node.js debug attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "启动程序",
"program": "${workspaceRoot}\\bulid\\lib\\index.js"
},
{
"type": "node",
"request": "attach",
"name": "附加到端口",
"address": "localhost",
"port": 5858
}
]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

将program改为${workspaceRoot}\bulid\lib\index.js就可以了,然后按F5就可以运行了。 
为了方便调试,修改package.json中的script,增加如下内容

"scripts": {
"build": "babel lib -d build/lib -s inline",
"babelWatch":"babel lib/**/*.js -d build -w -s inline",
"releaseBuild":"babel lib -d release/lib --no-comments --compact true --minified"
},
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

然后在控制台下,输入npm run build就会执行babel lib -d build/lib -s inline 
这样,就完成了node的vscode环境操作

第九步:最后

  • 除了配置了build,还配置了babelWatch,这样就可以处于监视状态,只要lib目录下一有文件保存,就可以实时编译到build目录下面。-s inline则是生成sourceMap,这样,用vscode断点调试的时候,就可以正常的代码位置。
  • 另外:这个使用的插件是babel-preset-eslatest-node6,这个插件的作用是将ES2015或更ES2017的js代码编译成node 6.x支持的js代码,而不是ES5,node 6.x已经支持99%的ES2015了,这样编译后的代码变化不大。
posted @ 2017-04-21 09:42 冬瓜 阅读(165) | 评论 (0)编辑 收藏

2017年4月17日 #

概述

vscode是一个不错的开源IDE,可以完全替代sublime,又是跨平台,使用起来还比较方便.使用一段时间后,我觉得有些插件,值得推荐一下.我这里的开发环境是win10下vscode+Node.js 
在vscode的主UI的左边工具栏的最下边,就是插件管理了,如下图 
这里写图片描述

beautify

这是一个代码美化插件,一定要有

ESLint

这是一个代码检查的插件,一定要有,很不错.下面是我的配置使用.eslintrc

module.exports = {
"env": {
"commonjs": true,
"es6": true,
"node": true
},
parser: "babel-eslint",
"parserOptions": {
"sourceType": "module",
},
"extends": "eslint:recommended",
"rules": {
"no-console": 0,
"semi": [2, "always"],
"no-this-before-super": 2,
"no-var": 2,
"no-cond-assign": 2, //禁止在条件表达式中使用赋值语句
"no-dupe-args": 2, //函数参数禁止重名
"no-dupe-keys": 2,
"no-duplicate-case": 2,
"no-extra-semi": 0,
"no-constant-condition": 0,
"no-ex-assign": 2,
"no-func-assign": 2,
"no-extra-semi": 2,
"no-irregular-whitespace": 2,
"no-negated-in-lhs": 2,
"no-obj-calls": 2,
"no-unreachable": 2,
"use-isnan": 2,
"default-case": 2,
"no-invalid-this": 2,
"consistent-return": 0,
"valid-jsdoc": 2,
"block-scoped-var": 0,
"complexity": [2, 20],
"require-yield": 0,
"no-mixed-spaces-and-tabs": 2, //注释格式要求JSDoc格式
"require-jsdoc": [2, {
"require": {
"FunctionDeclaration": true,
"MethodDefinition": false,
"ClassDeclaration": false
}
}],
"linebreak-style": 0
}
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50

JavaScript (ES6) code snippets

从node 6.x后,就支持JavaScript ES6很多语法了, 6.9.x开始,已经支持99%的ES6了,所以这个插件很必要. 
不能理解,node 6.x为什么不支持import

Numbered Bookmarks

一个书签工具,还是很有必要的,但是感觉功能还比较弱

tortoise-svn

SVN的集成插件,虽然都用Git了,但svn还是很不错的

VSCode Great Icons

这个是非常必要的,这个为每个文件类型增加了一个图标,例得项目的目录树很直观,这个一定要用.

最后

上述是我常用的插件,还有很多新插件,还不清楚,等大家一起发现,有好的,都推荐一下.

posted @ 2017-04-17 12:01 冬瓜 阅读(200) | 评论 (0)编辑 收藏

在很多聊天中,会有许多表情,这些表情都是类似”[微笑]”的这种,然后写了一个正则表达式,保留在这里,便于以后使用中.这里的提取支持提取中文.在Node.js 6.10.2下运行通过.
 1 let testStr = "now [里斯本] [test002] [ddddd] [adfasd][3234]";   
 2 
 3 function getFaceTag(message) {
 4     let re = /\[([\u4e00-\u9fa5\w]+)\]/g;    
 5     let r = {fulltag:[],tags:[]};
 6     let m;
 7     while(m = re.exec(message)) {
 8         r.fulltag.push(m[0]);
 9         r.tags.push(m[1]);
10     }
11     return r;
12 }
13 
14 let k = getFaceTag(testStr);
15 console.log(k);
posted @ 2017-04-17 11:41 冬瓜 阅读(207) | 评论 (0)编辑 收藏

2017年3月29日 #

数组的解构与函数变参

解构

es6新增了一个解构功能,如下所示

let [aa,bb,cc]= [1,2,3]; 
console.log(aa,bb,cc);
//显示为1 2 3
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

也就是将右边数组的元素依次赋值给左边数组列表中变量 .

  • 也可以是已经定义好的变量
let aa,bb,cc; 
[aa,bb,cc] = [1,2,3];
  • 1
  • 2
  • 1
  • 2
  • 可跳过,一些变量
let [aa,,cc] = [1,2,3];
  • 1
  • 1
  • 可少于变量数量
let [aa,bb,cc] = [1,2];   //cc===undefined; 
//或let [aa,bb,cc] = [1,,3]; //bb===undefined;
  • 1
  • 2
  • 1
  • 2
  • 也可以用于函数返回多值
function mmm(v) {     
if(v=== true) {
return [true,1,2,3];
}
else{
return [false];
}
}
let [result,bb,cc,dd] = mmm(true);
if(result) {
console.log(bb,cc,dd);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

这个和lua的多值返回一样的效果.可以简化一些函数返回处理

变量 操作符…

对于函数变量,es2015增加了操作符…,实际上也是数组,大大简化了变参的操作. 
对于参数名称,建议使用默认的args 
- 常见使用

function sum(…args) {
let r = 0;
for(let i = 0; i < args.length; i++) {
r += args[i];
}
return r;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 再调变参函数
function printLog(…args) {
console.log(…args); //这一步大大简化了,如果是ES5那就头痛了.要用arguments,
}
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3
  • 还可以很轻松的扩展参数
function printLog(…args) {
console.log("专有前缀",…args,"专有后缀");
}
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3
  • 因为…args是一个数组,也就是它可以用数组的方法操作.
function printLog(...args) {
for(let i = 0; i < args.length; i++) {
console.log(args[i]);
}
args.push("end");
console.log(...args);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 用…还可以将数组插入的新数组中去,
let u = [1,2,3]; 
let u1 = […u,4,5];
console.log(u1); //显示为[1,2,3,4,5];
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

后记

到此,所有数组和相关笔记就没有了,期待Node.js能完整支持es6,省得用babel再编译了.再复杂的东西,都是由最简单的元素组成.如果忽视最简单的元素,就像JavaScript中的let,const,for,数组等,如果不能充分的理解和使用,你所的”高深代码”能好到哪里去呢?

posted @ 2017-03-29 17:09 冬瓜 阅读(426) | 评论 (0)编辑 收藏

2017年3月7日 #

     摘要: 前面一篇,我们写了数组的基础,在这里则会把主要的方法和应用列出来.
对于迭代方法和归并方法只是一个简化代码的作用,可能这些方法功能非常见,所以干脆默认提从了这两组方法。对于js的数组,使用起来非常方法,相比c/c++真是无与伦比…。在C++11标准后,也可以同样提供一个强大的动态数组。但是js的数组,可以存放任何元素,这个是C++不能比的,虽然可以实现,但是代价就有点大了。相对来说,现在版本的java和C#,则可以。因为java所有的都是Object…  阅读全文
posted @ 2017-03-07 18:03 冬瓜 阅读(725) | 评论 (0)编辑 收藏

2017年3月3日 #

Array 类型恐怕是 ECMAScript 中最常用的类型了。而且,ECMAScript 中的数组与其他多数语<言中的数组有着相当大的区别。
虽然 ECMAScript 数组与其他语言中的数组都是数据的有序列表,但与其他语言不同的是,ECMAScript 数组的每一项可以保存
任何类型的数据。也就是说,可以用数组的第一个位置来保存字符串,用第二位置来保存数值,用第三个位置来保存对象,以此
类推。而且,ECMAScript 数组的大小是可以动态调整的,即可以随着数据的添加自动增长以容纳新增数据。算是万能的容器.

JS中的数组还有很多功能,这篇先讲讲基础

创建数组

用new方法

下面是一组用new Array创建数组,实际上,也可以不用new,直接使用Array也是一样的

1: let a = new Array(); //这里创建了一个没有元素的空数组 
2: let a = new Array(10); //这里创建了元素个数为20的数组
3: let a = new Array(1,2,3,"aaaa"); //这里创建指定数组元素的数组
//等同于
1: let a = Array(); //这里创建了一个没有元素的空数组
2: let a = Array(10); //这里创建了元素个数为20的数组
3: let a = Array(1,2,3,"aaaa"); //这里创建指定数组元素的数组
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

用[]

下面是一组用[]创建数组的办法,多数用这种方法比较简洁

4:let a = []; //创建一个空数组 
5:let a=[1,2,3,"aaa"];//指定元素列表的创建数组
6:let a = [1,,2];//指定元素列表,但是会跳过若干元素创建数组 //跳过的部分为#ff0000
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

length属性

对于数组的长度,用属性length可以获得


可以通过设置该值,来改变数组的大小 
也可以能过下标设置,如

let a = [1,2,3]; 
a[10]=99;
console.log(a);
//结果为[ 1, 2, 3, , , , , , , , 99 ],也就是在没有的位置插入了undefined
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

[下标]访问

用[下标]的方式,可以访问数组的元素 
例:

let a=[3,2,1]; 
for(let i = 0; i < a.length; i++){
console.log(a[i]);
}
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

如果对数组越办访问,得到的将是undefined,

数组遍历方法:

//方法一 
let a = [1,2,3,4,5];
for(let i in a){
console.log(a[i]);
}
//方法二
for(let e of a){
console.log(e);
}
//方法三
for(let i = 0; i < a.length; i++) {
console.log(a[i]);
}
//方法四
a.forEach((e)=>{
console.log(e);
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

四个执行结果是一样的.

判断是否为数组

let a = [1,2,3,45]; 
let b = 1129;
console.log(Array.isArray(a),Array.isArray(b));
//显示为true false
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

将数组变成字符串

数组的toString,toLocaleString会生成以逗号分隔的元素列表的字符串toString会调用每个元素的toString 而toLocalString则会调用每个元素的toLocalSetring方法. 
join方法,则会以toString生成字符串,但是分隔符是参数中指定的,而不是默认的逗号

let a=[1,2,3]; 
let b = a.join("A");
//结果b="1A2A3";
let c = a.toString();
//c='1,2,3'
let d = a.toLocaleString();//d='1,2,3'
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

基础篇先到这里

posted @ 2017-03-03 14:24 冬瓜 阅读(716) | 评论 (0)编辑 收藏

2017年2月28日 #

     摘要: 因为有注册到Embarcadero,所以还能常常收到Embarcadero邮件。告诉我现在是10.1.2版本了

以前还申请过免费的序列号,但是就一直没有用过。Delphi/C++Builder太大了,几十个G,看到我弱小的C盘,

只好放弃了,以前还会安装2010版本的,有空拿来做一下工具,现在都好久没有安装了。

好怀念当年的Turbo C!  阅读全文
posted @ 2017-02-28 10:31 冬瓜 阅读(823) | 评论 (0)编辑 收藏

2017年2月27日 #

     摘要: cppblog人气真不行了,目前只有我和eryar两个人在发博!!!虽然暂时没有搞C++了,但是其他人呢?各位来点人气  阅读全文
posted @ 2017-02-27 19:44 冬瓜 阅读(906) | 评论 (2)编辑 收藏

2017年2月23日 #

     摘要: 注:关于node-heapdump请看 使用node heapdump

基于appium源码 1.6.3 运行,发现运行一段时间后,会出现内存溢出.
用node-heapdump生成heap快照 发现多了很多字符串对象:内容如下  阅读全文
posted @ 2017-02-23 20:35 冬瓜 阅读(829) | 评论 (0)编辑 收藏

     摘要: 在使用appium的过程中,发现有内存泄露,最后就process out of memory了,就挂了
网上用使用增加运行内存的方式(还是抗不住),没办法,就只好找出内存泄露的地方了
对node.js很多文章,都是说用memwatch,结果发现,这个是一个死项目,有四年没有更新过了,在现有的环境下,是没有办法编译的。
然后又有一个memwatch-next,顾名思义,就是memwatch的下一个版本,结果是果然也可以编译,一些事件也支持,但是要headdump后要end后,就挂了。
国内,用百度,你一万年都别想解决问题,估计找成人不宜的东西,百度世界第一名,google也不比过百度。  阅读全文
posted @ 2017-02-23 14:28 冬瓜 阅读(797) | 评论 (0)编辑 收藏