经过一段时间的折腾,差不多把之前做的小游戏想搞的给搞了,现在已经在微信小游戏上线,并且接入了广告,不过广告还在审核中。这里分享一下从开发、申请上线到接入广告等几个流程的一些问题。阅读之前可以扫码先玩一玩哈哈。
游戏申请
我把游戏申请放在了第一步,这是因为微信小游戏还在开发阶段就可以申请对应的微信公众平台账号并且给小游戏命名了,需要注意的是一个小游戏/小程序/公众号只能对应一个账号,一个账号对应一个邮箱,你如果有另外一个服务,你必须开通另外一个账号。
more >>最近工作不是很忙,利用业余时间做了一个微信小游戏,目前正在申请软著登记阶段(mmp的天朝政策)。过程中做了一些笔记,在这里记录下来,当作一个小白的快速上手介绍,对已经有经验的不具备参考价值。我是使用Cocos Creator开发的,本文内容将分成两部分,一部分是对Cocos Creator做一个重要概念的介绍,另一部分是列出微信小游戏开发的一些注意点。
more >>Cocos Creator是一个完整的游戏开发解决方案,包括了 cocos2d-x 引擎的 JavaScript 实现(不需要学习一个新的引擎),以及能让你更快速开发游戏所需要的各种图形界面工具。完全为引擎定制打造,包含从设计、开发、预览、调试到发布的整个工作流所需的全功能一体化编辑器。目前支持发布游戏到 Web、iOS、Android、各类”小游戏”、PC 客户端等平台,真正实现一次开发,全平台运行。
最近在看《深入理解计算机系统》一书,从进程虚拟存储的用户栈和运行时堆可以了解到,进程在开始执行的时候会分配一份较小的内存作为用户栈,而运行时堆会在执行时动态分配内存,相比于栈内存来说堆内存的最大值相对大很多。联想到JavaScript中的栈内存空间和堆内存空间应该也是一样的,但是JavaScript的执行中间多了个引擎(例如V8)的处理,它会不会还是将栈和堆内存分开分配呢?答案是肯定的。
我们所说的JavaScript栈内存,其实就是指它的调用栈,调用栈中保存了函数的调用关系、局部变量和函数参数等信息。关于调用栈大概看一下过程:
上图用到的工具在这里
上图中,entry开始执行压入栈,执行中调用了fun1再将fun1压入,fun1在log(‘1’)之后又将fun2压入,fun2在log(‘2’)之后没有后续的调用,弹出,fun1没有后续调用也弹出,entry后续有log,压入log(foo)操作执行完弹出,然后entry弹出,最终栈清空,执行完毕。上面只是介绍一个抽象的过程,栈里面只是压入了函数和操作,而严格来说,每一个函数调用是压入了一个栈帧,栈帧里面带有局部变量参数等数据,而局部变量就是计算栈内存空间的关键。
more >>这周给小组内部做了个关于node的小分享,在这里记录下来。因为很多是网上已经有的内容,这篇文章只是把ppt给搬了过来,列出重要的点,具体就不展开了。
|
|
对于 node 自身提供的模块,其实无论是native JS模块还是builtin C++模块,最终都在编译生成可执行文件时,嵌入到了ELF格式的二进制文件node里面。但是原生js模块代码只是保存在node_natives.h中的C++变量不会被编译。程序加载native JS模块会通过node.cc::Binding("natives")
拿到模块代码,而加载C++模块则直接用get_builtin_module
方法。参考下图:
NativeModule.require
重点代码如下:
|
|
nodejs中执行到require模块时用fs.readFileSync同步加载文件,加载完同步执行,如果有缓存则直接返回exports。然后继续执行主程序。
假设在模块main中require模块a,main模块拿到a模块的module.exports对象,如果是第一次加载则对象被缓存,下一次require(‘a’)就直接拿这个缓存。 所以如果引入一个模块后改变其中暴露的某个变量,那么在其他引入的地方获取到的变量值也会改变。
缓存机制还解决了循环引用的问题。从源码可以发现模块加载的时候执行的时候会先保存在cache中,所以当a引用b,而b又引用a的情况下,在b执行的时候a已经缓存起来了,所以b只会拿到a的模块缓存(a的exports对象),所以不会出现循环问题。
EventEmitter使用观察者模式构建了一个事件处理器。允许我们注册一个或多个函数作为 listeners ,在特定的事件触发时调用。如下图:
最近做了点nodejs项目,对nodejs的cluster怎么利用多进程处理请求产生了疑问,于是着手进行了研究,之后发现这其中竟大有文章!一切还是先从遥远的TCP说起吧。。。
说到TCP,相信很多人都相当了解了,大学已经教过,但是又相信有很多人也不是很了解,要不是当时没听,要不也可能是自身的编程能力不足以去实践相关内容,写到这我还特意去翻了一下大学的计算机网络教材,内容是很丰富的,但教人实践的内容还是太少了,里面的内容都把学生当成了有相当的Linux编程能力的人了,所以结果就是大部分只上了一年编程课刚学会几个Hello world程序的大二学生,听了这门课后一脸懵逼,即使记住了也因为没什么实践很快忘了,当年我就是这么懵逼过来的。
所以,扯了这些,结果是什么呢,结果就是我们要多动手!而要动手建立一条TCP连接可以用socket来实现,不过这里不是要说socket用法,只是来简单聊一聊他们之间的一点小联系,以便于理解后面的内容。
这是linux笔记系列文章的最后一篇了。本来还是有一些内容的,但发现平常都很少用到,例如系统工作调度、系统账号管理、系统服务等,所以这些就不做记录了。
而shell脚本的内容,也是用到了再去查就行,语法跟其他语言类似,主要还是要掌握常用命令的使用。最后一篇就记录一些常用命令。
删除文件夹:rm -rf path/to/
修改文件【拥有者|用户组|其他用户】权限:
chmod 764 path/to
表示使path/to目录的所有者:7(111,读写执行权限),组用户:6(110,读写),其他用户:4(100,读)chmod +r
表示增加读权限,+w加写,+x加执行。-r对应减去。可以直接chmod +rwx
。对所有用户加读写执行权限:chmod a+rwx path/to/file
rm -rf ./
的-r一样作用。查看某个命令的绝对路径:which [命令]
建立连接文件:
ln -s path/source path/dist
,在当前目录下建立一个链接path/dist,指向path/source。ln path/source path/dist
筛选grep:grep可以使用正则表达式搜索文本,并且将匹配的行打印出来
管道符:“|”将两个命令分开,前一个的命令输出会成为后面一个命令的输入(标准输入stdin)。常用[命令] | grep
将第一个命令输出的内容通过grep命令过滤某些字符输出。注意有一些命令例如ls命令期待的是命令行参数不是标准输入,所以不能用ls | ls
,要用ls | xargs ls
xargs,从标准输入重建并执行命令行,标准输入转成命令参数。
流操作
>
表示重定向,是将上一个的标准输出定位到另一个标准输出,或者一个文件。>>
表示追加,是在不改变后面文件内容的前提下,在文件末尾添加前面的输出。查看文件内容
-f
参数tail命令会持续显示添加到文件中的行(例如写log),直到按下 Ctrl-C 来停止。ctrl+alt+(f1~f6):打开tty1~tty6控制台,是控制台界面。而tty7是图形界面,ctrl+alt+f7打开。
ps aux
可以看到所有运行的程序,配合grep命令进行筛选。
kill命令杀死某个进程。图形界面卡死时,可以打开tty1终端,ps -t -tty7
命令查看tty7进程,找到xorg进程到pid号xxx,kill xxx重启图形界面。
文件复制
cp path/to/file1 path/to/file2
复制到某个文件(覆盖),cp path/to/file path/to/
复制到某个目录。如果是拷一个目录,则要加上-r,例如cp -r path/to1 path/to2/
。scp user@ip:/hisdir /mydir
。显示目录下文件:ls -al
,-a表示显示隐藏的,-l表示显示详细资料。
打补丁,patch命令用patch文件给文件打补丁,改变文件的内容。patch文件可用diff命令来取得。
man命令查看命令的说明,例如:man cp
,查看cp命令说明。
显示当前路径:pwd
显示文件系统文件占用磁盘空间情况:df
netstat -nlp
查看占用端口号的服务(mac的参数有些不一样,无法找到相关程序(-p),得用lsof命令:lsof -nP -iTCP:[端口号]
top命令,是Linux下常用的性能分析工具 ,能够实时显示系统中各个进程的资源占用状况(内存和cpu等),类似于Windows的任务管理器。
这篇笔记可能稍微琐碎一些,都是一些小的知识点。
狭义的shell是命令行方面的软件,包括这里要介绍的bash。广义的shell指能够操作应用程序的接口包括图形界面的软件。bin/bash
是Linux默认的shell。
通常我们称命令行模式为终端界面,linux默认情况下提供六个终端界面(tty1~tty6)来让用户登录,切换方式为:
在终端我们就可以输入bash执行命令了,命令运行的顺序基本是这样:
关于文件的操作这里只列出一些基础的命令,不做详细介绍,有需要用到的再去查详细用法即可。
虽然之前用过Linux,但在日常使用过程中发现还是有些东西没有了解,所以最近花了些时间看了《鸟哥的linux私房菜》(基础学习篇)一书。作为一个前端一般不需要掌握的太多,在这里把一些我认为比较重要的内容做下笔记。本篇为笔记第一篇,关于磁盘分区和文件权限。
more >>
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true