跳转到主要内容

博客

  • CPU 画正弦曲线

    发布于 文章 317 字 1 分钟

    CpuRust

    周末终于有时间尝试在树莓派上写代码,好久没写 Rust, 写了个正弦曲线玩玩 :) 大致思路就是先定好取样点数量,以 300 毫秒为一个单位,算好 2*PI 周期的正弦曲线值,CPU 需要忙多少毫秒,闲多少毫秒,然后死循环跑就行。通过 while 循环不断检测经过的时间是否满足条件,满足后直接 sleep 过去。这里还需要用到一个第三方的库 core_affinity,将线程锁在第 2 个 CPU 核心上(第一个核心应该是 Linux 调度器所在的核心,避免影响它) 不得不说,树莓派 4B 的性 …

    周末终于有时间尝试在树莓派上写代码,好久没写 Rust, 写了个正弦曲线玩玩 :) 大致思路就是先定好取样点数量,以 300 毫秒为一个单位,算好 2*PI 周期的正弦曲线值,CPU 需要忙多少毫秒,闲多少毫秒,然后死循环跑就行。通过 while 循环不断检测经过的时间是否满足条件,满足后直接 sleep 过去。这里还需要用到一个第三方的库 core_affinity,将线程锁在第 2 个 CPU 核心上(第一个核心应该是 Linux 调度器所在的核心,避免影响它) 不得不说,树莓派 4B 的性 …

  • 发布 pysproto

    发布于 文章 628 字 2 分钟

    PysprotoPythonSprotoPypiSetuptools

    今天是个值得纪念的日子,我终于将适用于 Python 3 的 pysproto 成功上传到 pypi 了,顺便写一篇博客吐槽下 Python 的打包发布系统 依稀记得之前将 C 文件都放在 src 目录里,结果死活编译不过,于是都散装放在根目录了;然后 Pypi 要先发布测试包,再在网页操作一下,发布成正式包。setup.py 作为包的描述文件,long_description 字段还得用 reStructure Text 的格式写,不然就提交不过。pysproto 这个模块需要头文件,但是屡屡 …

    今天是个值得纪念的日子,我终于将适用于 Python 3 的 pysproto 成功上传到 pypi 了,顺便写一篇博客吐槽下 Python 的打包发布系统 依稀记得之前将 C 文件都放在 src 目录里,结果死活编译不过,于是都散装放在根目录了;然后 Pypi 要先发布测试包,再在网页操作一下,发布成正式包。setup.py 作为包的描述文件,long_description 字段还得用 reStructure Text 的格式写,不然就提交不过。pysproto 这个模块需要头文件,但是屡屡 …

  • 折腾Makefile

    发布于 文章 932 字 2 分钟

    MakefileGNU Make

    最近有同事写了个 shell 脚本,可以通过比较源文件和目标文件的时间戳,实现部分编译的功能。我觉得这个是 make 的本职工作,于是花了 " 亿点点 " 时间研究了 Makefile 怎么写,简单记录点笔记 make 主要用来做自动化构建工作,只要我们在项目文件夹内定义 makefile(或者 Makefile)文件,make 就会按照规则来做构建工作。makefile 的一个简单示例: main: main.c gcc main.c -o main 这个例子里定义了一条规则 main: …

    最近有同事写了个 shell 脚本,可以通过比较源文件和目标文件的时间戳,实现部分编译的功能。我觉得这个是 make 的本职工作,于是花了 " 亿点点 " 时间研究了 Makefile 怎么写,简单记录点笔记 make 主要用来做自动化构建工作,只要我们在项目文件夹内定义 makefile(或者 Makefile)文件,make 就会按照规则来做构建工作。makefile 的一个简单示例: main: main.c gcc main.c -o main 这个例子里定义了一条规则 main: …

  • Skynet require 的更新

    发布于 文章 477 字 1 分钟

    SkynetRequire

    最近升级项目依赖的中间件,中间件组的同学强力推荐(打发XD)我去看看 skynet.require 的修改,很有趣,而且是其中一个比较大的不兼容改动,我重新看了 Skynet 的代码 确实比以前更好用了,这里简单分享一下 服务启动的时候,往往会用到 sharedata 服务来全局共享一份数据表。sharedata 服务的 API 初始化时会使用 skynet.call 来调用 sharedata 服务,因为 call 最终会调用 yield,而 require 是一个 C 实现的函数,无法在其中 …

    最近升级项目依赖的中间件,中间件组的同学强力推荐(打发XD)我去看看 skynet.require 的修改,很有趣,而且是其中一个比较大的不兼容改动,我重新看了 Skynet 的代码 确实比以前更好用了,这里简单分享一下 服务启动的时候,往往会用到 sharedata 服务来全局共享一份数据表。sharedata 服务的 API 初始化时会使用 skynet.call 来调用 sharedata 服务,因为 call 最终会调用 yield,而 require 是一个 C 实现的函数,无法在其中 …

  • Lua54 兼容性

    发布于 文章 1388 字 3 分钟

    Lua翻译

    最近在搞迁移,准备将项目依赖的 Lua 5.3 迁移到 5.4 上面去,先翻译一下手册的第八章,强迫自己读完, 原文地址 这里我们列出了从 Lua 5.3 迁移到 Lua 5.4 可能会遇到的兼容性问题 你可以通过设置参数重新编译 Lua(详情参考 luaconf.h),来避免其中的一些兼容性问题。但是,所有兼容选项都会在未来被移除掉。当这些选项被移除时,兼容性问题就会暴露出来。所以,当你有机会的时候,你应该尝试用没打开任何兼容选项的 Lua,来测试你的代码。这样会让迁移到新版本 Lua 的过程 …

    最近在搞迁移,准备将项目依赖的 Lua 5.3 迁移到 5.4 上面去,先翻译一下手册的第八章,强迫自己读完, 原文地址 这里我们列出了从 Lua 5.3 迁移到 Lua 5.4 可能会遇到的兼容性问题 你可以通过设置参数重新编译 Lua(详情参考 luaconf.h),来避免其中的一些兼容性问题。但是,所有兼容选项都会在未来被移除掉。当这些选项被移除时,兼容性问题就会暴露出来。所以,当你有机会的时候,你应该尝试用没打开任何兼容选项的 Lua,来测试你的代码。这样会让迁移到新版本 Lua 的过程 …

  • 一些吐槽

    发布于 文章 825 字 2 分钟

    Skynet游戏开发

    感觉被周六加班榨干了,累的不想写博客。非常佩服其他同事,996 还看不出来有啥异样的,太强了。。3 月 4 月连续加班后,5 月终于可以放松一下,不用加班了。五一假期陪老婆回了老家,过了愉快的 5 天,后面补班就非常累了。。。 上月月底请新同学帮忙做了一次压测,发现了一处内存泄漏。我们战斗部分的代码是仿照 ECS 的方式写的,按帧驱动系统更新,但是怪物死亡的时候没处理好,AI 停止后有可能又重新加上 tag,导致场景里只有几百个怪,实际却有几千个 AI 在跑。用 CPU 火焰图看就是 AI 部分 …

    感觉被周六加班榨干了,累的不想写博客。非常佩服其他同事,996 还看不出来有啥异样的,太强了。。3 月 4 月连续加班后,5 月终于可以放松一下,不用加班了。五一假期陪老婆回了老家,过了愉快的 5 天,后面补班就非常累了。。。 上月月底请新同学帮忙做了一次压测,发现了一处内存泄漏。我们战斗部分的代码是仿照 ECS 的方式写的,按帧驱动系统更新,但是怪物死亡的时候没处理好,AI 停止后有可能又重新加上 tag,导致场景里只有几百个怪,实际却有几千个 AI 在跑。用 CPU 火焰图看就是 AI 部分 …

  • 技能系统

    发布于 文章 1641 字 4 分钟

    SkillGameplay

    技能系统的功能在于管理能不能打,能打谁,能打多远,打多少目标,以什么方式打这些关键问题。作为战斗系统的中枢,技能系统充当着胶水层,粘合了外围的 AOI、属性计算、碰撞检测、子弹、buff、ai 等系统。从使用者的角度看,技能分为怪物技能和人物技能两部分,下面主要讲讲人物技能 技能系统决定技能能不能打,这里有两个方面,一是从各种成长系统过来的技能,经过整合计算,得到战场上可用的技能列表,再加上战场本身给的技能,决定了玩家能放什么技能;二是技能的当前状态,是否处于 cd 中,包括 gcd、技能本身 …

    技能系统的功能在于管理能不能打,能打谁,能打多远,打多少目标,以什么方式打这些关键问题。作为战斗系统的中枢,技能系统充当着胶水层,粘合了外围的 AOI、属性计算、碰撞检测、子弹、buff、ai 等系统。从使用者的角度看,技能分为怪物技能和人物技能两部分,下面主要讲讲人物技能 技能系统决定技能能不能打,这里有两个方面,一是从各种成长系统过来的技能,经过整合计算,得到战场上可用的技能列表,再加上战场本身给的技能,决定了玩家能放什么技能;二是技能的当前状态,是否处于 cd 中,包括 gcd、技能本身 …

  • Pixel 刷入 Android10

    发布于 文章 362 字 1 分钟

    2021 年 6 月 1 日后,Google 相册的高画质存储也会算入存储空间,Pixel 手机除外 ,趁着优惠入手 Pixel 来薅羊毛 :) 机器到手后刷下官方系统 开机后点击设置 - 关于手机 - 版本号,点击 7 次后打开开发者选项,点击系统 - 高级 - 开发者选项,打开 usb 调试和 OEM 解锁 从官方网站下载镜像:marlin ( 选最新的) 从官方网站下载 …

    2021 年 6 月 1 日后,Google 相册的高画质存储也会算入存储空间,Pixel 手机除外 ,趁着优惠入手 Pixel 来薅羊毛 :) 机器到手后刷下官方系统 开机后点击设置 - 关于手机 - 版本号,点击 7 次后打开开发者选项,点击系统 - 高级 - 开发者选项,打开 usb 调试和 OEM 解锁 从官方网站下载镜像:marlin ( 选最新的) 从官方网站下载 …

  • opencv 学习

    发布于 文章 81 字 1 分钟

    最近换了新机器,在打游戏之余顺便用来学习一下 OpenCV,好好享用算力 :) 仓库在这里 目前写了个例子,用 OpenCV 官方提供的人脸识别模型,利用 usb 摄像头做人脸识别,还是蛮好玩的

    最近换了新机器,在打游戏之余顺便用来学习一下 OpenCV,好好享用算力 :) 仓库在这里 目前写了个例子,用 OpenCV 官方提供的人脸识别模型,利用 usb 摄像头做人脸识别,还是蛮好玩的

  • 新年快乐 2021

    发布于 文章 227 字 1 分钟

    没想到疫情期间在家办公,从心率上看是最好的一个月了,祝各位身体健康,万事胜意。最近用到 gost 作 DNS 代理,相当趁手,还能各种转发,对于 gem install 这种 proxychains 搞不定的,配合上 export http_proxy 还是挺好用的 最近喜欢上 QRCP 这个小工具,既可以当普通的 http 文件服务器,作简单的上传下载之用,又可以分享文本,比手机、电脑都装 IM,然后在里面发来发去的好。我在 自己 fork 的分支里 还提供了反向扫码打开的功能,手机扫码后将链 …

    没想到疫情期间在家办公,从心率上看是最好的一个月了,祝各位身体健康,万事胜意。最近用到 gost 作 DNS 代理,相当趁手,还能各种转发,对于 gem install 这种 proxychains 搞不定的,配合上 export http_proxy 还是挺好用的 最近喜欢上 QRCP 这个小工具,既可以当普通的 http 文件服务器,作简单的上传下载之用,又可以分享文本,比手机、电脑都装 IM,然后在里面发来发去的好。我在 自己 fork 的分支里 还提供了反向扫码打开的功能,手机扫码后将链 …

  • goroutine 数据竞态

    发布于 文章 656 字 2 分钟

    最近写了个 小玩具 ,用来去掉 goscon 相关的握手细节,这样压测程序可以透明的连接游戏服务器了。单连接测试的时候没问题,但是当连接数上去后,会出现莫名其妙的数据解析错误。感觉是出现了竞态条件了,于是用 go build -race 来重新构建,再测试的时候就有异常栈抛出可供分析了,还是蛮方便的 贴一段报错的堆栈: ================== WARNING: DATA RACE Write at 0x00c00015f400 by goroutine 82: …

    最近写了个 小玩具 ,用来去掉 goscon 相关的握手细节,这样压测程序可以透明的连接游戏服务器了。单连接测试的时候没问题,但是当连接数上去后,会出现莫名其妙的数据解析错误。感觉是出现了竞态条件了,于是用 go build -race 来重新构建,再测试的时候就有异常栈抛出可供分析了,还是蛮方便的 贴一段报错的堆栈: ================== WARNING: DATA RACE Write at 0x00c00015f400 by goroutine 82: …

  • [译]Redis 探险之旅的结束

    发布于 文章 1416 字 3 分钟

    Redis

    本文是[Redis开发者@antirez引退](http://antirez.com/news/133) 一文的翻译 10 年前,当我创立 Redis 项目的时候,我正处在职业生涯中最兴奋的时刻。我的联合创始人和我一起,成功的上线了两个主要提供 Web 2.0 服务的意大利语网站。为了让他们变得可扩展,我们需要发明很多新概念,其中大多数是计算机领域里已经探索过的,但我们并不清楚,我们也不着意检查。有问题?那就找一个解决方案。我们虽然想解决问题,但我们更想拥有乐趣。这是 Redis 诞生时充满可玩 …

    本文是[Redis开发者@antirez引退](http://antirez.com/news/133) 一文的翻译 10 年前,当我创立 Redis 项目的时候,我正处在职业生涯中最兴奋的时刻。我的联合创始人和我一起,成功的上线了两个主要提供 Web 2.0 服务的意大利语网站。为了让他们变得可扩展,我们需要发明很多新概念,其中大多数是计算机领域里已经探索过的,但我们并不清楚,我们也不着意检查。有问题?那就找一个解决方案。我们虽然想解决问题,但我们更想拥有乐趣。这是 Redis 诞生时充满可玩 …