汇总如下
Gitee
开源中国旗下的产品, 算是国内老牌厂商了
Coding.net
目前属于腾讯旗下的产品
CodeUp
阿里云旗下的产品
GitCode
CSDN旗下的产品
小程序代码托管
也是腾讯旗下的 主要用于微信小程序代码托管
极狐 JihuLab
基于
Gitlab搭建的托管平台
本文为作者原创转载时请注明出处 谢谢

乱码三千 – 码出一个新世界
1 | . |
如果你也想要打印类似于上面的目录结构树, 那么我们可以安装一个tree程序,
如果是Mac平台 那么直接使用brew工具进行安装:
1 | brew install tree |
安装完毕后 在你只需要打印结构树的目录下输入tree即可
如果想将目录树输出到文本, 我们可以:
1 | tree >README.md |
如果我们指定打印层级数, 那么可以:
1 | tree -L 层级数量 |
如果我们只想打印文件夹
1 | tree -d |
如果我们想滤除掉某个文件夹
1 | tree -I 文件夹名称 |
本文为作者原创转载时请注明出处 谢谢

作为一名专业Android开发者, 当我们遇到需要C/C++的开发时, 完全可以直接使用Android Studio, 而不用另外下载诸如CLion AppCode等收费IDE
使用Android Studio的好处有:
JetBrains的软件大部分都是收费的 唯独Android Studio 完全免费使用Gradle天然支持C语言的编译: Gradle不仅可以编译Groovy Java和Kotlin, 还可以编译C/C++ 、Scala和Swift, 未来还会支持更多语言, 潜力无限IDE, 一个Android Studio就可以搞定Android Web和C的开发 你说爽不爽说了这么多好处, 接来了咱们来聊聊如何实现Android Studio的C/C++开发
创建一个空工程, 默认选择Android空Activity工程即可, 然后将一些用不上的文件都清除, 最后目录结构如下:
1 | . |
如果是C++开发, 那么目录名改成cpp, 其结构如下:
1 | . |
在App目录下的build.gradle中的内容全部清除 然后填入以下内容:
1 | apply plugin: 'c' |
同样的 如果是C++, 则将plugin改成cpp, 如下:
1 | apply plugin: 'cpp' |
gradle同步之后, 右侧gradle task面板中会生成三个task:

此时我们尝试编写C代码
1 | #include <stdio.h> |
编写完后 运行gradle task中的build, 就会自动对源码进行编译并生成可执行文件, 该文件我们可以在build目录中找到

打开文件 双击运行, 此时控台输出Hello World

编译结束后自动执行程序
修改build.gradle文件内容如下即可:
1 | apply plugin: 'c' |
这样, 点击build任务之后就会自动执行程序了, 如果只想重复执行程序 不进行重新编译, 那么单独执行execProgram任务即可:

虽然c/c++程序可以正常编译执行了, 但是代码在编写过程中并没有语法错误提示, 在这种环境下写代码的体验会比较差
接下来 我们把该功能实现, 这里需要配合android插件以及cmake构建工具:
下载NDK和cmake工具


配置build.gradle
增加如下内容:
1 | apply plugin: 'com.android.application' |
在build.gradle同级目录下创建CMakeLists.txt文件
并添加以下内容:
1 | # 限定cmake最小版本号 当前使用的版本必须在这个之上 |
在main目录下创建AndroidManifest.xml文件
并添加以下内容, 包名自定义:
1 | <?xml version="1.0" encoding="utf-8"?> |
同步工程
同步刷新gradle工程后, 此时我们发现c目录下的源码可以语法错误提示了, 并且代码自动补全功能也有了

经过上面如此一番配置之后, 相当于结合了gradle和cmake两大构建工具,可以说是强大无比
我们既可以使用gradle执行execProgram任务生成本地平台的可执行文件, 同时还可以使用cmake交叉编译生成android平台的执行文件和动态库文件
我们只需编译工程或者执行build任务, 即可自动生成执行文件和动态库, 同时动态库会被gradle工具自动打包进apk文件中


本文为作者原创转载时请注明出处 谢谢

我最近和朋友聊天,越发觉得但凡尝试过自行开发游戏的人,对开发工具应该都有相似的感受:UE4这类引擎上限非常高,但对于编程基础薄弱的人,可能不是第一选择;RPGmaker这一类工具我也用了一段时间,非常好上手,可惜2D画面有些简单。
今天我也想分享一个不错的游戏开发工具,它比较能满足以下人群的需求,文章比较长,大家可以自行判断阅读:
刚刚入门游戏开发的初学者
手头上有个游戏创意,想快速实现的人
希望快速验证游戏玩法和品质的人
前两天我看到微博上介绍了一个叫罗布乐思(Roblox)的游戏引擎,据说它在全球范围内已经有1亿月活,超过400万的游戏开发者,和超过3000万的作品。
虽然我猜测那是鹅厂做的一个推广,但还是有点好奇什么工具可以有这么高的月活量,所以试着用了三天,发现它有几个亮点。
这个引擎有多容易上手呢?简单到我在没看教程的前提下,就做出了一个游玩时长不到一分钟的横版跳跃小玩法,因为这个游戏大量的预设内容以及简单的脚本语言。
罗布乐思是一个有很多预设模块的3D引擎,比如我在这里展示的城市场景模板。

除了场景模板,编辑器里还有大量预设好的模型和效果。预设内容大大降低了制作游戏的时间和精力成本,假设你想做一个城市障碍跑酷小游戏,那么只需要打开城市模板,加入各种汽车、楼房甚至形状部件,就可以直接跑起来了。
当然,这些预设内容也是可以修改的,以这辆车为例,右上角的资源管理器显示,你可以控制的部分具体到某个车门、车窗以及乘客座位。再复杂点,你还可以实现对这辆车的加速速度、车轮扭矩、发动机动力等各种效果的控制。
如果你想做更多更复杂的玩法如捏脸、回合制、战棋等等,通过脚本就可以实现,官网的教程里也有对RPG类等级系统、任务线、武器刷新、NPC等各种内容的设置教程,连重生点也只需要单击就可以添加。
罗布乐思这个工具,可以说是把能简化的内容都帮你简化了一遍,非常友好。只要跟着教程走,很快你的游戏想法就能让人们玩儿上了。
并且,这个引擎用的脚本语言是lua。虽然相比起主流如C#,lua比较小众,但事实上它作为一个轻量小巧又五脏俱全的语言,概念简单,学起来是比较容易的。
对这一部分的实现有兴趣,可以到罗布乐思的创作者主页感受一下,在这里泡上一段时间,简单的游戏制作应该难不倒你。(指路https://developer.roblox.com/zh-cn/learn-roblox/all-tutorials)
在工具箱的“商店”里,有官方提供的大量免费美术资源,涵盖各种内容和类别。如果你在搜索框里输入“hair”,那么搜出来的不止是可以覆盖在部件表面上的超多种毛发材质,还有许多直接可以使用的发型贴图——一个换装小游戏的发型选择界面十分钟内就可以完成了。
老实说,我身边有不止一个朋友表示过,想参加游戏比赛或是做游戏,却因为缺乏美术资源或队友而难以实现。当然这个商店里的美术资源主要满足的是基本需求,胜在可以帮你快速地给自己的游戏套好一个皮,不至于光秃秃的。
对于在画面风格上有所追求的人,我在罗布乐思的中文论坛也看到有人做出过很不错的画面效果。
这是开发者Joseph155用四个星期时间制作的《23号公寓》,这种画风和光影让我想到了《我的世界》和《模拟人生》。

这是我在罗布乐思网站发现的游戏《ROSES》,它的光影在网站里应该算非常优秀的了。按我的理解,这种效果能够通过插件实现,同时选项卡里可以直接管理插件,如此一来美术效果上自然可以有更多的实现空间。
但我认为这个工具最重要的两个优势,是没有服务器成本——也就是能够零成本做联机游戏,以及一键多平台发布。
由于这款工具的客户端和服务端是集成一体的,这使它不仅能够免费提供服务器,还能够免费负责容灾、运维等一系列网络端工作。
B站上有一位做独立游戏的Up主做了个试玩罗布乐思的视频,他只用一小时就做了个简单跑酷,发布之后,他还直接用PC和iPad登陆不同账号并联机游玩自己的游戏。
(视频指路:https://www.bilibili.com/video/av76363666)
也就是说,这个一小时做出来的小跑酷已经实现了联机功能,而且Up主并不需要操心服务器问题。这是非常节省人力精力的,以前我还泡在MC某著名私服的时候,运营团队有位负责网络的大神,因为熊孩子太多都被逼得退群两次,更别提搭服务器的成本了。
此外,根据我的理解和官网的说法,罗布乐思上的游戏可以只通过一个按键直接发布在PC、安卓、iOS,甚至是Xbox和VR平台的罗布乐思客户端,然后那些不同系统和设备上的玩家就可以直接玩到你的游戏。当然这应该只是海外的情况,国内如何我不是很确定。
这也体现在测试选框里的一个功能上:点击模拟器就可以看到在不同主流设备上的模拟画面,这应该就是为了便于在各种设备上发布作品而设计的。做完之后直接点击发布,你会得到一个网址,任何人在浏览器上打开这个网址,或是在任何系统与设备的罗布乐思客户端上搜索游戏名,都能玩到这个游戏。
很明显,这完全省去了中间漫长痛苦的各平台打包过程,想想只是把游戏传个Steam就需要多久,还得分成不同的操作系统,移动设备上也没办法玩到——在这里只要点击一下发布。
有了这些已经设计好的功能,剩下的就只是好好把游戏创意实现出来,钻研一个真正好玩的玩法。依赖这款游戏的超高月活,游戏创意与玩法的质量会很容易得到验证。
不过这工具虽然很实用,但在国内很少人知道,网上关于这个游戏的信息也很少。
所以我自行搜索过不少资料,发现YouTube上的个别Roblox视频能达到7000多万的播放量,社区(指路https://robloxforum.com;https://devforum.roblox.com)活跃程度也很高。
还有18岁高中生通过罗布乐思年收入上百万美元的新闻,这是17年的事儿了。

但是我估计过不了多久,罗布乐思就会在国内变得更有知名度,因为那个所有游戏都躲不过的鹅厂已经找上门来了。很明显,罗布乐思很快就要进入中国市场了。
就看最近的新闻,它们推出了一个北极星计划,准备花3000万扶持创作者,另外还有技术和流量扶持,以及优先出海的名额;最近还有一个征集作品的创意比赛。只是这部分内容比较多,我也不太记得,有兴趣可以去搜一下。
我个人认为,如果大家都认可罗布乐思在开发游戏方面的实用性,接下来鹅厂又能好好做国内落地运营,未来这可能是一个很不错的社区。毕竟鹅厂要用心还是能做点东西出来的。当然,大家有别的想法欢迎留言讨论。
本文转载自: 奶牛关

对于独立开发者而言, 使用一些免费且好用的工具相对来说会更加有利, 接下来我们围绕以下几点进行工具的汇总:
Krita
开源免费的绘画工具, procreate的替代品, 可绘画和制作逐帧动画


Blender
这个大家都熟悉, 免费开源的三维图形图像软件,提供从建模、动画、材质、渲染、到音频处理、视频剪辑等一系列动画短片制作解决方案

Pixelorama
也是一款强大的像素画绘制工具, 基于Godot引擎的GDScript语言编写, 功能强大 软件跨平台, 可以说是Godot的完美搭档, 我猜想未来可能会将该工具直接集成进Godot内部

有Web在线版 也可以下载到本地使用:

Godot
免费开源的轻量级游戏开发引擎, 麻雀虽小五脏俱全, 支持2D和3D游戏的开发, 内置Tilemap和2D骨骼, 中小型游戏完全胜任

虚幻引擎
如果要做大型3D游戏, 那么虚幻必然是首选, 它也是开源软件, 但是并不免费, 收入超过100万美金的部分按照5%来计算交费, 这样一来 对于个人而言 和免费无异

本文为作者原创转载时请注明出处 谢谢

随着GitHub的制裁, 我开始考虑将一些代码同步推送到国内的一些代码托管厂商, 比如gitee或者codingnet
gitee可以直接对github上的仓库进行克隆和更新, 这一点还是比较方便的, 不过手动同步代码总是麻烦一些, 而且容易遗忘, 所以我们可以考虑在push的时候将代码同时推送到多个仓库
具体实现如下:
首先定义一个仓库地址合集, 名字自定义, 我们将其命名为all
1 | git remote add all git@github.com:xxx/xxx.git |
然后将需要同时推送的仓库地址追加进入该合集中
1 | git remote set-url --add all git@gitee.com:xxx/xxx.git |
此时我们输入git remote -v可以查看当前仓库所有地址信息, 如下:
1 | $all git@github.com:xxx/xxx.git (fetch) |
最后推送仓库到远程
1 | git push all master |
如果你想移除某个仓库合集
1 | git remote rm all |
关于仓库地址的配置我们可以直接在 .git/config 查看,git默认合集名为origin
如果你习惯了输入git push origin master来推送仓库, 那么我们可以直接打开config文件然后在origin合集下追加其他仓库的地址, 如下:

保存后, 我们就可以使用啦
如果你担心文本输入出错, 也可以采用命令行的形式进行地址追加:
1 | git remote set-url --add origin git@gitee.com:xxx/xxx.git |
本文为作者原创转载时请注明出处 谢谢

最近我部署在github上的一个静态网站突然不能访问了, 排查一看原来是github账户被封禁了, 我想有可能是受到了最近俄罗斯制裁的影响, 因为这个账号我当初是用大爬梯注册的, 对方可能以为我是俄罗斯人
问题找到之后 我决定暂时先不注册新Github账号了, 直接换成netlify
netlify有很多优势:
github或者gitlab仓库中拉取代码自动部署HTTPS访问gitpages差于是我直接将网站静态文件上传到了netlify, 关于部署的具体流程 详见如下:
首先登陆netlify网站并登录, 如果你的博客源码放在了Github上, 那么可以直接使用Github账号关联登录
登录之后会出现以下面板, 我们点击Add new site按钮添加一个新站点:

点击后出现多个选项:
import an existing project:表示从Github中的仓库中直接拉取代码start from a template: 表示基于某个模板创建一个新的仓库Deploy manually: 表示手动上传网站静态文件接下来 我以hexo博客为例, 介绍第一种和第三种的用法
import an existing project点击后进入仓库选择页面, 我们可以选择从指定的托管厂商拉取网站源码:

由于我网站源码托管在了Github, 于是我点击Github选项, 进入到仓库选择页面:

选择好后进入网站部署配置页面, 填入我们需要让netlify在拉取我们的仓库后进行的指令操作,hexo g生成静态文件 然后将生成的静态文件上传到netlify:

填好后点击Deploy site, 然后netlify会自动拉取代码并部署网站
紧接着 我们来到网站设置选项卡中配置自定义域名:

需要将自定义域名以CNAME的方式解析到xxxxx.netlify.app, 如果你的域名是阿里云注册的, 直接去阿里云控台配置即可
解析配置完毕后, netlify会自动给网站配置SSL证书实现域名https访问:

此时 我们就可以使用域名正常访问我们的网站啦:

Deploy manually这个就比较简单了, 点击后会进入到如下页面:

我们只需将public文件夹拖拽到页面 即可自动上传部署
上传完后回到netlify主页就能看到网站了, 然后进行自定义的域名配置即可正常访问
当然了 如果不用自定义域名 直接使用netlify提供的二级域名也能访问, 这个大家都明白 就不多赘述了
以下是国内访问测速图, 总体还不错 :

经过此次账号封禁, 我开始担忧自己存放在Github上的数据安全性问题了, 万一国内开发者受到制裁 Github来个大扫除, 岂不是完蛋, 不过 这对于国内的代码托管厂商而言也许是个难得的机会
所以我接下打算 将重要数据做个多地备份处理
本文为作者原创转载时请注明出处 谢谢

Godot是一款免费开源的游戏引擎, 其优点如下:
Windows Mac Linux Android甚至Web在线开发python类似当然 它也有一定的劣势:
2D比较成熟 但3D相对Unity和UE而言弱一些总之 中小型的游戏开发 完全可以胜任
以下介绍针对有编程语言基础的同学食用
我们知道所谓引擎 其实就是一团封装好的代码而已, 将一些常用且重复的逻辑进行抽取简化 方便开发者调用 从而提升游戏开发的效率

在Godot中 每一个节点就是一个对象, 场景是一个节点 精灵也是一个节点 都是对象(如果你是android开发 我们可以将其看成是布局文件中的控件)
如果我们想在某个类中创建一个对象, 那么直接在该类中创建一个节点, 比如我们想在Main这个类中创建Control对象:

既然是对象, 那么肯定有继承关系 属性和方法, 我们可以从右侧检查器面板中看到继承关系以及本类和父类们的属性 :

而右侧节点面板中的信号列表, 其实就相当于我们平常所说的监听回调:

如果需要查看该对象的方法以及方法说明, 我们可以直接在检查器面板中打开随时查看:

使用场景自动加载的形式创建单例

添加节点
1 | ctrl+A |
全局搜索
1 | ctrl+shift+F |
复制物体
1 | ctrl+D |
播放动画
1 | shift+D |
停止动画
1 | S |
以导出Android包为例, 首先需要在编辑器设置中指定好SDK和签名路径:

签名可以用以下指令生成:
1 | keytool -keyalg RSA -genkeypair -alias 用户名 -keypass 密码 -keystore debug.keystore -storepass 密码 -dname "CN=Android Debug,O=Android,C=US" -validity 9999 -deststoretype pkcs12 |
紧接着进入导出界面, 选择Android, 然后提示模板缺失, 此时我们点击管理模板:

然后点击下载模板:

这个模板文件 包含了所有支持平台的基础框架包:

此时 我们再次进入导出面板, 配置签名后点击导出项目就可以了:

其他平台导出方法可参考官方文档, 当然还有贴吧小伙伴的经验贴可参考:
本文为作者原创转载时请注明出处 谢谢

对于单纯的静态网站而言, 我们有时候可能会直接将json数据放在本地, 此时涉及到json文件内容读取的问题
假设html同级目录下有一个名为data.json的文件, 读取的方式有:
1 | $.ajax({ |
1 | $.getJSON("data.json", function (data) { |
1 |
|
我们在进行本地代码测试的时候, 如果以双击的形式打开html, 会出现跨域问题, 浏览器控台报错如下:
1 | Access to XMLHttpRequest at 'file:///Users/songjian/Desktop/data.json' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, chrome-untrusted, https, isolated-app |
解决方法有两种:
第一种是给网页添加一个域名, 比如localhost, 我们可以使用python或者nodejs在本地启动一个服务, 这里以python3为例:
1 | python -m http.server 8000 |
启动服务后, 浏览器输入localhost:8000, 即可正常获取到本地json数据
第二种是修改本地浏览器设置, 以Windows平台谷歌浏览器为例, 启动时添加参数--allow-file-access-from-files

本文为作者原创转载时请注明出处 谢谢

本页面介绍了 ACME.sh 结合 CertCloud 的部署流程。
在开始之前需要完成 证书ACME自动部署 页面的前两个步骤。

名称,选择证书来源[订单,产品],选择相应的订单或产品 组织 ,点击【添加】按钮。ACME 界面会新增一条记录。acme.sh,点击复制图标复制 acme.sh 部署命令 。当前,CertCloud ACME 仅支持 OV 和 EV TLS / SSL 证书。
如果需要查看详细的 ACME URL ,则只需要点击对应数据的“ 部署 ”按钮,就可以看到详细的 ACME URL 信息。
1 | curl https://get.acme.sh | sh |
普通用户和 root 用户都可以安装使用。
安装过程:
1 | #cd ~/.acme.sh/ |
为了方便使用 acme.sh,可以创建 一个 bash 的 alias:
1 | alias acme.sh=~/.acme.sh/acme.sh |
1 | # 获取 |
DOMAIN 需要替换为申请时提交的域名信息,可以为多个。DNS_TYPE 为需要验证的域名的 DNS 的类型,不同的类型需要配置不同的环境变量。(预审核通过的可以直接配置为 dns_dp ,不需要配置密钥信息)DAYS 为申请的证书的请求周期,应比当前订单的密钥轮换周期时间小。YOUR-ACME-URL 为先前创建的 ACME 目录 URL (请参阅 创建 ACME 目录 URL)。YOUR-KEY.pem 表示服务配置的证书私钥的路径地址信息。YOUR-CERT.pem 表示服务配置的证书文件的路径地址信息。YOUR-SERVER-RELOAD 表示服务重载服务的命令。(具体的实例,可以看下方的 ACME.sh 部分常用命令)注:可以根据自己的需要和服务器环境自定义 ACME 客户端执行命令。
ACME返回的错误和错误消息与 CertCloud API 中返回的错误和错误消息相同。有关错误代码及其含义的列表,请参见 Open API 错误。
完成后,终端将显示一条成功消息
恭喜你!ACME 证书请求已完成,并且新发行的证书已安装(保存)在 Web 服务器上。可以访问网站以确认安装成功。
为了更方便使用,提供了部分 ACME.sh 的常用命令。
| 字段信息 | 解释 |
|---|---|
| - -issue | 签发请求 |
| - -days [days] | 请求签发证书的周期,配合 –issue 使用 |
| - -server [ACME 目录 URL] | 证书服务商的 ACME 目录 URL,配合 –issue 使用 |
| - -installcert | 安装证书 |
| -d [网站域名] | 配置证书的域名信息 |
| - -webroot [网站跟文件路径] | 文件验证需要的网站跟文件路径 |
| - -dns [DNS类型] | 配置验证域名的DNS信息 |
| - -cert-file [证书保存的路径] | 安装证书保存的路径 |
| - -key-file [私钥保存的路径] | 安装私钥保存的路径 |
| - -fullchain-file [证书链保存的路径] | 安装证书链保存的路径 |
| - -reloadcmd [Web 重载命令] | 安装证书完成之后Web服务的重载命令 |
文件验证
1 | acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/ --server https://acme.certcloud.cn/acme/directory/XXX |
DNS 验证( 以 DNSPod ,阿里 DNS 为例)
1 | export DP_Id="XXX" |
更多支持的DNS类型详见 [ACME.sh 支持的 DNS 类型大全]
证书部署:
1 | Nginx example: |
获取并部署
1 | acme.sh --issue -d example.com -d www.example.com --dns dns_dp --server https://acme.certcloud.cn/acme/directory/XXX --days 30 |
days 的周期为 30 天,acme.sh 会每 30 天去请求 server 去获取新的证书,并进行安装。
本文转载自: https://docs.certcloud.cn/docs/installation/auto/acme/acmesh/
