精华内容
下载资源
问答
  • 在开发项目时,哪些东西需要被管理?1,当然是需求、设计说明。2,界面原型。3,项目进度。4,bug。我团队目前就是这些资料需要被管理。读者们有其他的好东东,就在评论里分享吧。这些资料跟git上保存的代码不同,...

    在开发项目时,哪些东西需要被管理?1,当然是需求、设计说明。2,界面原型。3,项目进度。4,bug。我团队目前就是这些资料需要被管理。读者们有其他的好东东,就在评论里分享吧。这些资料跟git上保存的代码不同,大多是文档式的。项目进度和bug的管理,这些就属于开发流程管理了,更需要专门的工具进行管理。

    我们一直用敏捷方式开发项目,既然就敏捷,就需要短、平、快。当时,在挑项目管理软件时,小编我是试用过好几个。比如开源的kanboard(看板),这个是白板式的,但唯一不足的是创建的任务不能移动。比如我今天这个任务创建了,状态是待开发。几天后,我觉得时机成熟,这个任务应该移到开发栏中,但就是移不了,只能在开发栏中新创建。于是,我放弃了。国内开发的chan道,我还买了他们的云服务,但用了后发现总体是不错的,功能丰富,但问题也在丰富上,一丰富,就繁琐了。比如,我创建了一些bug,会发生自己都找不到的情况,而且要学会这个工具,还得花不少时间。敏捷嘛,就需要短、平、快,工具嘛最好就一操作就会,还需要我们花心思学,在知识爆炸的今天,我是没这个心思去学一个管理工具了,于是我也放弃了。

    Redmine,我后面用了是这个工具。这工具确实不错,简单易懂,一操作就上手,而且功能也蛮丰富。

    1、分配任务Task

    负责人可创建Task及其子Task,并指派给相应的人,在Task描述里写清任务的具体内容。Redmine可绑定邮箱,相关人就会收到任务通知。技术员对不理解的、有疑问的地方进行回复询问,然后等待负责人的解答。而且大家都可以检索到什么时候做了什么事?遇到了哪些问题?等等。

    2、任务跟踪

    计划,最重要的是什么?当然是执行,执行最重要的是什么?我觉得是监控,实时修正。在软件开发中,千万不要做甩手掌柜,任务布置了就不管,然后快到交付了,才发现下面人做得东西不行,方向错了。或者,发现时间不够用,要延迟。如果项目负责人无法做到及时的延期风险控制,那是非常不专业的。

    Redmine的甘特图能帮上你。技术员每天下班前更新自己的任务进度,登记工时,并写上今天完成的内容。负责人可以随时看到这些进度和任务内容,通过项目甘特图,就能及时发现风险并对其进行事先规避。

    3、令人反感的周报

    一般程序猿们对写周报是很反感的,每次都要浪费时间回忆这周做了什么,还要计算好工时,没事就编故事,滥竽充数让老板知道你没偷懒。

    因为Redmine每天的工作有Task记录,并有工时记录,所以周报只需要点下鼠标就能导出周报了,上面有本周详尽的工作内容及消耗的工时。

    4、项目文档管理

    Wiki,我就不介绍了,反正这工具用来分享文档还是挺不错的。

    Redmine它内部是集成Wiki的,所以Redmine有一个明显的好处是它的Wiki和项目、版本、具体Task是结合在一起的。比如在某个Task中需要出一个小文档,那就可以写一个Wiki页面,并附在Task中。

    5、线上系统操作

    线上系统的升级、维护、事故处理等都需要严格的操作手册,特别是与Money有关的服务。如果谁一不小心,公司就会损失大把银子,操作人可能会被挨一顿骂,项目负责人自然也会被连坐,要求加强流程管理。

    线上操作人可创建一个Task,写清操作的目的、步骤、以及每一步的检查。写完后他可找其他人进行Review,检查步骤是否合理?是否有遗漏?有问题就回复--提出建议,没问题就回复--Review通过。

    通过后线上操作人就严格按步骤执行,关键操作时,最好也让审核人在旁边监督操作,完成后让审核人检查执行结果。

    这样双人的“结对编程”,一旦出现问题,能做到有据可循,以后追责,改正都是非常便捷的。

    当然,工具能否发挥积极作用,根本的原因还在于人。一是项目组的成员需要习惯用Redmine记录自己的工作;二是负责人要不断去检查Redmine,有问题就指正,并把使用Redmine推进项目进展作为一种理所当然的事情。

    Redmine有点不好,是它是基于Ruby开发的,所以安装还挺麻烦,不是有点经验的运维人员还真装不起来。

    展开全文
  • 国内没有很多关注PyCon的文章...K 神介绍 pipenv 这种包管理工具属于有趣并且实用的东西。这是有趣的东西,实用的,指的关注的演讲。 介绍社区新出彩的依赖库,介绍一些优化类的,算法与数据结构类,异步之类的,...

    国内没有很多关注PyCon的文章介绍, 生命苦短, 我用Python, 国内怎么能缺少关注 PyCon 的资料呢?

    我看技术演讲的时候,关注的东西至少是具备下面三者之一的:

    1. 有趣。
    2. 实用。
    3. 技术性很强。

    举个例子

    1. K 神介绍 pipenv 这种包管理工具,属于有趣并且实用的东西。这是有趣的东西,实用的,指的关注的演讲。
    2. 介绍社区新出彩的依赖库,介绍一些优化类的,算法与数据结构类,异步之类的,这是技术性很强的东西。
    3. 像国内一些无聊的,贴中小公司压根不能落地技术架构的,属于装逼并且不有趣并且不实用的东西。
    4. 技术性不是很强的,但是对社区很有意义的。比如,教育推广,以及扯扯工程师成长的内容,后者可能对个人成长很有帮助,但这不在本人的关注之列。
      ▼ Python In Depth : section
      ▼ New Python Feature : section
          Python Under The Hood : section
          Async related : section
          Module In Depth : section
          Optimizing : section
      ▼ Web 开发相关 : section
          Django 相关 : section
          Web Developing : section
      ▼ 数据科学 : section
      ▼ 构建 / 测试 / 文档 / 代码质量 : section
    复制代码

    Python In Depth

    New Python Feature

    • Barry Warsaw - Get your resources faster, with importlib.resources - PyCon 2018

    py3.7 之后可以使用 importlib.resources 来读取包内部的非代码文件。

    • Raymond Hettinger - Dataclasses: The code generator to end all code generators - PyCon 2018

    py3.7 之后引入的 dataclasses , 善用之可以极大的减少代码

    Python Under The Hood

    讲解一些 Python 在编译方面的姿势。

    • David Beazley - Reinventing the Parser Generator - PyCon 2018
    • Emily Morehouse-Valcarcel - The AST and Me - PyCon 2018
    • James Bennett - A Bit about Bytes: Understanding Python Bytecode - PyCon 2018

    Async related

    异步在这几年的 IO 密集型应用中已经是大势所趋了

    • Nathaniel J. Smith - Trio: Async concurrency for mere mortals - PyCon 2018
    • John Reese - Thinking Outside the GIL with AsyncIO and Multiprocessing - PyCon 2018

    Module In Depth

    带你深入 Python 的部分特性的模块

    • Mario Corchero - Effortless Logging: A deep dive into the logging module - PyCon 2018
    • Carl Meyer - Type-checked Python in the real world - PyCon 2018
    • Hillel Wayne - Beyond Unit Tests: Taking Your Testing to the Next Level - PyCon 2018
    • Zekun Li - There and Back Again: Disable and re-enable garbage collector at Instagram - PyCon 2018

    Optimizing

    觉得应用程序慢,不妨来借鉴一下别人的优化思路。

    • vigneshwer dhinakaran - Pumping up Python modules using Rust - PyCon 2018
    • Matt Davis - Python Performance Investigation by Example - PyCon 2018
    • Mike Müller - Faster Python Programs - Measure, don't Guess - PyCon 2018
    • Ned Batchelder - Big-O: How Code Slows as Data Grows - PyCon 2018

    Web 开发相关

    Django 相关

    Django 相关姿势

    • Shauna Gordon-McKeon - Beyond Django Basics - PyCon 2018
    • Harry Percival - Intermediate testing with Django: Outside-in TDD and Mocking effectively
    • Harry Percival - Introduction to TDD with Django - PyCon 2018
    • Philip James - API-Driven Django - PyCon 2018
    • Andrew Godwin - Taking Django Async - PyCon 2018

    Note Taking Django Async 是这几篇中最值得多刷几遍的。有机会写篇文章来解析一下。

    Web Developing

    • Moshe Zadka - Web Applications, A to Z - PyCon 2018
    • Graham Dumpleton - Secrets of a WSGI master. - PyCon 2018

    数据科学

    • Alex Petralia - Analyzing Data: What pandas and SQL Taught Me About Taking an Average - PyCon 2018

    • Aly Sivji, Joe Jasinski, tathagata dasgupta (t) - Docker for Data Science - PyCon 2018

    • Anna Nicanorova - Data Visualization in Mixed Reality with Python - PyCon 2018

    • Chalmer Lowe - Statistics and probability: your first steps on the road to data science - PyCon 2018

    • Christopher Beacham / Lady Red - Visualizing Algorithms with Python and Programmable LEDs

    • Christopher Fonnesbeck - Bayesian Non-parametric Models for Data Science using PyMC3 - PyCon 2018

    • Kelsey Pedersen - Augmenting Human Decision Making with Data Science - PyCon 2018

    • The importance of exploratory data analysis and data visualization in machine learning - PyCon 2018

    • Jake VanderPlas - Performance Python: Seven Strategies for Optimizing Your Numerical Code

    • Jake VanderPlas - Exploratory Data Visualization with Vega, Vega-Lite, and Altair - PyCon 2018

    一个非常值得关注的新的可视化库

    • Christy Heaton - Intro to Spatial Analysis and Maps with Python - PyCon 2018

    Python 在 GIS 分析和地图上的一些应用

    • Eric Ma, Mridul Seth - Network Analysis Made Simple: Part I - PyCon 2018
    • Mridul Seth, Eric Ma - Network Analysis Made Simple: Part II - PyCon 2018
    • Nicolle Cysneiros - Graph Databases: Talking about your Data Relationships with Python - PyCon 2018

    Python 在 network 方面的分析

    构建 / 测试 / 文档 / 代码质量

    • Kenneth Reitz - Pipenv: The Future of Python Dependency Management - PyCon 2018

    新时代的包管理软件,Kenneth Reitz 亲自操刀

    • Dustin Ingram - Inside the Cheeseshop: How Python Packaging Works - PyCon 2018

    普及 setup.py / wheels / eggs / setuptools / distutils / twine 的姿势

    • Brian Okken, Paul Everitt - Visual Testing with PyCharm and pytest - PyCon 2018

    PyCharm 与 pytest 集合

    • Carol Willing - Practical Sphinx - PyCon 2018

    用 sphinx 来写文档。

    • Nina Zakharenko - Elegant Solutions For Everyday Python Problems - PyCon 2018

    如何优雅的写 Python

    https://www.slideshare.net/nnja/elegant-solutions-for-everyday-python-problems-pycon-2018

    • Jack Diederich - HOWTO Write a Function - PyCon 2018

    十五年的开发老司机教你如何写一个 Function

    • Kyle Knapp - Automating Code Quality - PyCon 2018

    高质量代码的维护

    • Greg Price - Clearer Code at Scale: Static Types at Zulip and Dropbox - PyCon 2018

    其他技术栈

    • Julie Qiu - Build a Search Engine with Python + Elasticsearch - PyCon 2018
    • Julie Qiu - Strategies to Edit Production Data - PyCon 2018

    写在最后

    这里面有几个还是值得二刷甚至N刷的, 等我刷完了写几篇文章详细介绍一下.

    展开全文
  • 各位大虾,我现在在做一个东西,需要能够监测一个java程序(有源程序)在执行过程中调用了哪些方法(包括该方法属于哪个对象),以及这些方法被调用的先后顺序。请问这个应该如何实现,有什么开源的工具或者要使用...
  • NET框架,它都包含哪些东西? 2) 程序集是什么,它是如何在CLR(通用语言运行时)中运行的? 3) C#与VB.NET同属于.NET平台,它们之间的根本联系和区别,为何他们之间的程序集能互相调用(如果创建一种新型的面向. ...

    初学.NET会有的一系列疑问,比如:

      1) 何为. NET框架,它都包含哪些东西?

      2)  程序集是什么,它是如何在CLR(通用语言运行时)中运行的?

      3)  C#与VB.NET同属于.NET平台,它们之间的根本联系和区别,为何他们之间的程序集能互相调用(如果创建一种新型的面向. NET的语言,要遵循什么)?

      想要明白如上问题,就需要弄清楚CIL(通用中间语言)、CLR(通用语言运行时)、CTS(通用类型系统)、CLS(通用语言规范)等等的概念,下面是自己看了一些他人的文章后进行的简单总结。

    首先通俗地理解一下.NET平台、.NET框架(Framework)的概念

      “平台”(软件技术平台)就是能够独立运行并自主存在,为其所支撑的上层系统和应用提供运行所依赖的环境。平台是一个环境,符合平台规范的应用都能放到上面来运行。

      我的通俗理解.NET平台是.NET应用与操作系统之间的一个中介,首先它为.NET应用运行提供了环境,其次它为.NET应用与操作系统之间起到了“解耦”(用数学方法将两种运动分离开来处理问题)的作用,使得平台上层的应用不依赖与操作系统的机器指令集。而如何解耦,则要看它的编译过程,解释如下。

      a19fb7f6e166c40a24d41554458ad74c.png

      框架就好似某种应用的半成品,是前人根据经验开发的可复用的一组组件,供你选用,然后添血加肉完成自己的系统。其思想与设计模式有些相似,框架是代码复用,设计模式是设计复用。框架又好似提供的一组规范,它规范应用系统的开发与部署,众所周知的J2EE框架就是定义了13个规范。相类似,NET Framework也提供了很多规范,下面会进行介绍。

      9972f714f77c5b969750533e8f4ffcd9.png

      粗略地说,一个.NET应用是一个运行于.NET Framework之上的应用程序。或者,一个.NET应用是一个使用.NET Framework类库来编写,并运行于公共语言运行时CLR(通用语言运行时)之上的应用程序。下面开始解决上面提出的问题:

    程序集及其运行

      首先引出两个概念CIL——通用中间语言、CLR——通用语言运行时两个概念。

      我们知道,普通的无平台应用(例如:VB应用程序)经过预编译、编译、汇编、链接几个步骤后,最终生成的可执行文件中就已经包含了本地处理器的代码,支持它运行的是操作系统和本地的机器指令集。

      在.NET框架下,高级语言(例C#)经过编译后生成的结果文件被称做程序集,其后缀名是.dll(类库)或.exe(可执行程序,控制台应用程序编译结果)。而程序集并不是二进制机器码,是不能直接运行的,需要经过CLR(通用语言运行时)的即时编译才能生成被操作系统所识别的机器码。

      下面我们用C#和VB.NET分别写两个相同控制台应用程序,都定义一个字符串“hello world”,然后输出:

      C#:

      f07940f08f7163f4b1e2a143b0849fac.png

      VB.NET:

      07b441e5783d24859102315d81215ab3.png

      然后经过编译,分别生成相应的程序集.exe文件,下面我们用vs自带的反编译工具-IL DASM(目录:开始-- >vs2010-- >Windows SDK Tools -- >IL 反汇编程序)分别打开上面生成的程序集。

      C#程序集:

      f0f943565236a7bd202be26e5cdbc58a.png

      VB.NET程序集:

      e04a430b0121712dca57a6a8c497f9bb.png

      对比两个程序集文件,可以发现两者的代码几乎完全一致。

      上面用IL DASM打开的文件中的类似汇编的代码即为CIL-通用中间语言。可以看到VB.NET与C#,编译后生成的程序集的格式是相同的;当程序所实现的功能相同时,程序集所包含的CIL代码也是类似的。由此可得下图:

      feaa972361a52e38444f6be25797e6dd.png

      上面提到了程序集(CIL)并不是CPU可以直接执行的本地机器语言。这种语言还需要.NET运行时(CLR)环境的支持,在执行之前,进行一个被称为即时编译的二次编译过程,才能转变成计算机可以识别的指令。

      d86e707680ef9c7b2386266c1fa7b214.png

      CIL也是一种程序语言,它是比C#低级,比机器码高级的一种中间码语言,类似Java中的.Class文件。从前面截图可知CIL是一种基于堆栈的语言,同时,它提供了class、interface、继承、多态等诸多面向对象的语言特性,因此它又是完全面向对象的语言。如果愿意,甚至可以直接编写CIL代码,并且使用CIL的编译工具IL ASM(IL Assembler,IL汇编程序)来对它进行编译。只不过,和大多数低级语言一样,这种方式会使开发效率会变得很低。

      C#源程序在被编译为程序集以后,就独立于C#,因此程序集可以由其他种类的语言所调用;同时,因为程序集并没有包含本地机器的指令,所以它与具体的机器类型也分隔开了,可以被装有.NET框架的任何机器运行。

    C#与VB.NET的根本联系与区别

      这里要引入CTS——公共类型系统、CLS——公共语言规范两个概念。

      设想我们如何开发一套类似C#或VB.NET的新的语言(编译后生成CIL代码,可以在.NET环境下运行)?

      要开发的新语言相当于CIL的高级语言版本,所以实际上要做什么并不是由新语言决定的,而是由CIL来决定的。因此,需要一套CIL的定义、规则或标准。这套规则定义了我们的语言可以做什么,不可以做什么,具有哪些特性。这套规则就称作CTS(Common Type System,公共类型系统)。任何满足了这套规则的高级语言就可以称为面向.NET框架的语言。C#和VB.NET不过是微软自己开发的一套符合了CTS的语言,实际上还有很多的组织或团体,也开发出了这样的语言,比如Delphi.Net、FORTRAN等。

      CTS规定了可以在语言中定义的数据类型、访问级别比如Private、Public、Family(C#中为Protected)、Assembly(C#中为internal)、Family and assembly(C#中没有提供实现)、Family or assembly(C#中为protected internal)。

      CTS还定义了一些约束,例如,所有类型都隐式地继承自System.Object类型,所有类型都只能继承自一个基类。从CTS的名称和公共类型系统可以看出,不仅C#语言要满足这些约束,所有面向.NET的语言都需要满足这些约束

      上面提到了,C#并没有提供Family and assembly的实现,C#中也没有全局方法(Global Method)。换言之,C#只实现了CTS 的一部分功能。也就是说,CTS规范了语言能够实现的所有能力,但是符合CTS规范的具体语言实现不一定要实现CTS规范所定义的全部功能。

      显然,由于CIL是.NET运行时所能理解的语言,因此它实现了CTS的全部功能。虽然它是一种低级语言,但是实际上,它所具有的功能更加完整。C#语言和CIL的关系,可以用如下表示:

      8809fa38425410248e1c518dff8b0f3a.png

      既然已经理解了CTS是一套语言的规则定义,就可以开发一套语言来符合CTS了。假设这个语言叫做B#,它所实现的CTS非常有限,仅实现了其中很少的一部分功能,它与CTS和C#语言的关系可能如下:

      30e4e19fa25731c706ee661e2ec4fc0c.png

      那么现在就有一个问题:由C#编写的程序集,能够引用由B#编写的程序集吗?答案显然是不能。虽然C#和B#同属于CTS旗下,但是它们并没有共通之处。因此,虽然单独的B#或C#程序可以完美地在.NET框架下运行,但是它们之间却无法相互引用。

      如果B#项目期望其他语言类型的项目能够对它进行引用,就需要B#中公开的类型和功能满足C#语言的特性,即它们需要有共通之处。B#中不公开的部分(private、internal、protected)是不受影响的,可以使用独有的语言特性,因为这些不公开的部分本来就不允许外部进行访问。因此,如果B#想要被C#所理解和引用,它公开的部分就要满足C#的一些规范,此时,它与CTS和C#语言的关系就会变成如下:

      07dcc32408730cbea55e8d77b94ebf27.png

      如果世界上仅有C#和N#两种语言就好办了,把它们共同的语言特性提取出来,然后要求所有公开的类型都满足这些语言特性,这样C#和N#程序集就可以相互引用了。可问题是:语言类型有上百种之多,并且.NET的设计目标是实现一个开放的平台,不仅现有的语言经过简单修改就可以运行在.NET框架上,后续开发的新语言也可以,而新语言此时并不存在,如何提取出它的语言特性?因此又需要一套规范和标准来定义一些常见的、大多数语言都共有的语言特性。

      对于未来的新语言,只要它公开的部分能够满足这些规范,就能够被其他语言的程序集所使用。这个规范就叫做CLS (Common Language Specification,公共语言规范)。很明显,CLS是CTS的一个子集。那么VB.NET、C#、B#的关系就可表达为:

      922834242f7191ac03830712827ac933.png

      如果利用C#开发的一个程序集的公开部分仅采用了CLS中的特性,那么这个程序集就叫做CLS兼容程序集(CLScompliant assembly)。显然,对于上面提到的FCL框架类库,其中的类型都符合CLS,仅有极个别类型的成员不符合CLS,这就保证了所有面向.NET的语言都可以使用框架类库中的类型。

      满足CLS就是要求语言特性要一致,那么什么叫做语言特性?这里给出几个具体的语言特性:是否区分大小写,标识符的命名规则如何,可以使用的基本类型有哪些,构造函数的调用方式(是否会调用基类构造函数),支持的访问修饰符等。

      那么我们如何检验程序集是否符合CLS呢?.NET为我们提供了一个特性CLSCompliant,便于在编译时检查程序集是否符合CLS。我们来看下面一个例子:

      ee80730c9b2bd260375bfa683bc365f2.png

      可以注意到,在CLSTest类的前面为程序集加上了一个CLSCompliant特性,表明这个程序集是CLS兼容的。但是,有三处并不满足这个要求,因此编译器给出了警告信息。这三处是:

      •不能以大小写来区分成员,因此字段name和方法Name()不符合CLS。

      •方法的返回类型和参数类型必须是CLS兼容的,uint和sbyte类型并非CLS兼容,因此GetValue()和SetValue()方法不符合CLS。

      •标识符的命名不能以下划线“_”开头,因此属性_MyProperty不符合CLS。

      还会注意到,编译器给出的只是警告信息,而非错误信息,因此可以无视编译器的警告,不过这个程序集只能由其他C#语言编写的程序集所使用。

    总结

             我们对.NET框架的第一感觉就是,.NET框架所提供的庞大类库及编写代码所采用的C#语言等,实际上远不止这些。还包含许多的内容,例如CLI、CIL、CTS、CLS、CLR、JIT、BCL、FCL等,这些内容在《.NET之美》这本书中都进行了深入浅出的讲解,对初学者很实用。如果想真正的理解.NET,仅仅会编码是远远不够的,最重要的是理解综上所述的内容。

    本文摘自CSDN博客https://blog.csdn.net/weixin_38887666/article/details/80015446

    展开全文
  • cocos2dx原生lua绑定工具的总结

    千次阅读 2014-10-03 20:39:24
    转载:... cocos2dx原生lua绑定工具的总结  ...本帖属于CocoaChina会员发表,转帖请写明来源和帖子地址 ...1、lua绑定到C++,就是C++能调用到lua的东西,那必须让C++知道有哪些lua函数或变量可以

    cocos2dx原生lua绑定工具的总结   转载:http://www.cocoachina.com/bbs/read.php?tid=226362 

    一、个人对“绑定”这词有两种理解
    1、lua绑定到C++,就是C++能调用到lua的东西,那必须让C++知道有哪些lua函数或变量可以用
    2、C++绑定到lua,就是lua能调用到C++的东西,当然也必须让lua知道有哪些C++东东可以给lua调用,所谓的“暴露”

    这里说的绑定就是第2种情况,在lua中能调用到Cocos2dx的函数。

    Cocos2dx通过工程里面的tools/toLua工具生成注册C++函数到lua的函数cpp文件

    二、环境设置
    工具:
    NDK_ROOT 必须为android-ndk-r9b 64bit版
    Python 为32bit版,2.7版(因为有个插件是32位的(Cheetah),如果这个插件有64的,个人觉得用python64位没问题)
    python插件:Cheetah、PyYAML(3.10以上版本、有32、64可选,但现在必选32)

    环境设置具体查看https://github.com/cocos2d/bindings-generator

    三、生成工具
    生成工具是一个python文件控制(genbindings.py),这个python文件中可以设置自己的生成规则文件(ini)、生成路径等重要信息,可以参考http://www.cocoachina.com/bbs/read.php?tid=196416

    编写或者修改genbindings.py要注意点的:
    1、 设置cmd_args参数时,第一是ini文件名,最后一个是要生成的文件名,重点是第二个,这个参数是生成器在ini文件里面查找对应的块(即ini文件中中括号对应的文字,如[cocos2dx],一般是第一行),形如cmd_args = {'custom.ini' : ('custom', 'lua_custom_auto') }就是查找custom.ini中的[custom]段配置,最后生成名为lua_custom_auto的文件,如果第二个参数没对应上,出现Section not found in config file的错误


    四、这里重点是,编写ini

    1、首先必须了解正则表达式,百度直接搜索正则表达式

    2、关键参数
    prefix 关系到lua函数开头的名字,如prefix=cocos2dx,那么生成的代码就是以lua_cocos2dx开头
    target_namespace 表面这些lua函数注册到哪个命名空间,在lua中,就是代表注册到那个表中,如target_namespace=custom,那么在lua中调用就是以 custom. 开头(但这个参数好像控制不到,真正能控制的是在C++里面是否有custom的命名空间)
    这里有两点要注意的
    (1)、如果有自定义的命名空间,cocos2dx主目录的tools文件夹下bindings-generator\targets\lua下的conversions.yaml(js的是bindings-generator\targets\spidermonkey下的conversions.yaml)添加自己的命名空间:
    ns_map:
    "cocos2d::extension::": "cc."
    "cocos2d::ui::": "ccui."
    "cocos2d::": "cc."
    "spine::": "sp."
    "cocostudio::": "ccs."
    "cocosbuilder::": "cc."
    "CocosDenshion::": "cc."
    "custom::": "custom."
    这个文件貌似是一些替换操作配置(就是在生成C++文件中替换掉所设置的的字符串),自己研究一下就知道了。

    (2)如果自己的代码没有命名空间,建议弄一个,不然遇到C++类中的类型,诸如下面的的C++代码:
    class A
    {
    enum class State
    {
    	StateOne,
    	StateTwo,
    	}
    }
    A类中有函数参数或返回值用到State类型的,在生成过程中汇报错,报错消息称没有A的命名空间。。。那么这时候就得到第一点提及的地方加入一行:"A::":"A."的信息。在有命名空间的情况下,生成器直接通过。这里是个奇怪的问题。

    headers 填入你所编写的代码的头文件

    classes 填入要生成的类,支持多个类,支持正则表达式,如classes = A,^A,^A$

    skip 指定屏蔽函数,即不需要暴露给lua的函数,支持正则表达式,如 skip = Sprite::[getQuad getBlendFunc ^setPosition$ setBlendFunc]

    rename_functions 重新命名暴露到lua中函数名(一般以C++编写函数名暴露到lua),如 rename_functions = SpriteFrameCache::[addSpriteFramesWithFile=addSpriteFrames getSpriteFrameByName=getSpriteFrame],
    等号前是原函数名,等号后是lua中的新函数名

    rename_classes重命名类,如 rename_classes = SimpleAudioEngine::AudioEngine。前面是原名,后面是lua新名。这个好像没效果,生成后还是那个名字

    classes_have_no_parents 指定一些没有父类的类

    base_classes_to_skip 指定一些需要跳过的基类

    abstract_classes 指定一些抽象类或者没有构造函数的类,以手动方式编写注册到lua函数

    编写完后,把只要执行修改过的自定义的或者修改过的genbindings.py(http://www.cocoachina.com/bbs/read.php?tid=196416 提及)就可以生成出相关的代码

    3、自动生成的代码会自动过滤掉C++中的protect、private属性、重载父类的函数、带省略号参数的函数(如Menu::create(MenuItem* item, ...) )

    五、嵌入到CPP代码中

    1、一般情况下,我们会在AppDelegate.cpp下注册自己的函数,如
    auto engine = LuaEngine::getInstance();
    register_all_custom(engine->getLuaStack()->getLuaState());       
    register_all_custom_manual(engine->getLuaStack()->getLuaState());
    ScriptEngineManager::getInstance()->setScriptEngine(engine);
    engine->executeScriptFile("src/main.lua");

    但是在3.0中,LuaEngine初始化过程中会加载几个lua文件,把lua栈清空,导致程序崩溃。这里参考http://www.cocoachina.com/bbs/read.php?tid=226180&page=1#1042506
    建议是把那几个文件放到注册完自己函数后加载,如
    auto engine = LuaEngine::getInstance();
    register_all_custom(engine->getLuaStack()->getLuaState());
    register_all_custom_manual(engine->getLuaStack()->getLuaState());
    ScriptEngineManager::getInstance()->setScriptEngine(engine);
    engine->executeScriptFile("DeprecatedEnum.lua");
    engine->executeScriptFile("DeprecatedClass.lua");
    engine->executeScriptFile("Deprecated.lua");
    engine->executeScriptFile("src/main.lua");

    补:
    1、自动生成的代码会自动过滤掉C++中的protect、private属性和重载父类的函数
    2、设置环境的时候,要在系统环境变量中添加一个PYTHON_BIN,指向python的可执行文件(exe文件)
    3、cocos2dx版本为3.0。3.0以上的版本应该都可以通用  

    展开全文
  • 暑假实习的时候带我的师傅,告诉我要注重基础,底层实现原理。才能在日新月异的技术行业站住脚跟...我们只有在明白了编程的思想之后,才能去创造属于自己的东西,随意切换。授之以鱼不如授之以渔。在我们的时代应该...
  • 上次设计的那个缓存仅仅是个粗糙的模板,存在内存溢出的风险,今天又学习...内存管理的一种页面置换算法,对于在内存中但又不用的数据块(内存块)叫做LRU,操作系统会根据哪些数据属于LRU而将其移出内存而腾出空间来加载
  • 如果在博弈进行过程中,每个参与方都可以得知其他各方都进行了哪些操作,目前处于什么状态,则称为信息完美博弈。如下棋,双方对盘面上的局势一目了然,竞局过程的信息是完全透明的,这是典型的信息完美竞局。但也有...
  • ” 这种问题经常会让我感到难以回答,因为我不清楚他们问的到底是什么……哪些东西属于测试脚本?哪些东西属于框架?他们之间到底如何区分? 让我们首先来明确几个定义。 自动化工具 自动化工具/指令的作用是与UI...
  • 访问指示符:允许库创建者声明哪些东西是客户程序员可以使用的,哪些是不可使用的。 5.1 包:库单元 用 import 关键字导入一个完整的库时,就会获得“包”(Package)。 它的作用是导入完整的实用工具(Utility)库...
  • 4 自己搭建内网穿透需要准备哪些东西? 1 什么是内网穿透? 非学术的说法: 通常个人电脑无论是连接WIFI上网还是用网线上网,都是属于局域网里边的,外网无法直接访问到你的电脑,内网穿透可以让你的局域网中的电脑实现...
  • 在向工地进发之前,如何选择适用的工具别在你的腰带上,你的手推车里该装哪些东西呢?这让我想到了第二章里,把一个人积累的技术与方法比喻为一个人的智慧工具箱。我们应该拥有一个属于自己的“智慧工具箱”,一点...
  • 其作用就是为开发某些软件提供一些便利的东西,包括工具 集合,文档等等。比如大家经常用到的Apache的一些库,一些开源的工具包,都属于SDK。 (二)SDK包含哪些内容  一个比较完整成熟的SDK主要包括: ...
  • 深圳php培训要多钱,深圳PHP培训有多好,通过PHP学习难度,PHP属于前端还是后端,php常用的编辑工具哪些带我们了解一下。PHP学习难度学习难度主要还是取决于你的努力程度,如果你很努力的话,个人建议还是报相对...
  • 在大约45岁之前,管理人员必须为自己培养出一种隶属于组织以外的、属于自己的生活。 哪些不是管理开发 a.他不是上课。课程知识管理开发的一种工具,而不是开发本身。 除非他们能够把学得的东西、反复思考过的东西...
  • 性能测试简单介绍

    万次阅读 多人点赞 2018-08-29 21:08:56
    性能测试介绍 ...测试人员通常是做为软件质量控制的一个角色,不仅仅是找bug,需要对整个软件的质量负责,性能也属于质量的一部分,因此测试人员眼中的性能应该是全面的,考虑的东西也需要全面: ...
  • 优化以及实例

    2021-02-27 11:46:13
    将得到的模型和问题,能够明确知道属于哪些问题,从而选择正确的方法。 并不是使用算法就好了,也要加一些东西:比如正则化。 objective function 目标函数,由目标函数分类,选择相应的优化算法 全局最优解和局部最...
  • 2020快手前端暑期实习面经

    千次阅读 2020-06-22 15:24:52
    面试的是一位很年轻的小哥,态度很和蔼,但是真的很难,面试的过程基本上属于我们聊到什么就问什么,问得都比较深入。 实习项目当中的后台信息管理系统用到了哪些技术栈?有了解过webpack的打包工具,了解过编译的...
  • 是这样的,我的毕设是写一个操作系统,可是我属于那种什么都不会的人,我目前有以前一个学长的代码,可是并不知道怎么运行,网上搜索总感觉找不到关键词,搜不到我想要的东西,就想来这里问问有没有人知道该怎么办,...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 174
精华内容 69
关键字:

哪些东西属于工具