惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
NISL@THU
NISL@THU
The Hacker News
The Hacker News
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Tenable Blog
Forbes - Security
Forbes - Security
V2EX - 技术
V2EX - 技术
Webroot Blog
Webroot Blog
Schneier on Security
Schneier on Security
T
The Exploit Database - CXSecurity.com
T
Tor Project blog
C
Cisco Blogs
TaoSecurity Blog
TaoSecurity Blog
The Last Watchdog
The Last Watchdog
PCI Perspectives
PCI Perspectives
O
OpenAI News
C
Cyber Attacks, Cyber Crime and Cyber Security
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Google Online Security Blog
Google Online Security Blog
宝玉的分享
宝玉的分享
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
量子位
D
Docker
AI
AI
Blog — PlanetScale
Blog — PlanetScale
S
Security @ Cisco Blogs
S
Schneier on Security
The GitHub Blog
The GitHub Blog
W
WeLiveSecurity
云风的 BLOG
云风的 BLOG
M
MIT News - Artificial intelligence
P
Privacy International News Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
H
Hackread – Cybersecurity News, Data Breaches, AI and More
B
Blog
C
Check Point Blog
A
About on SuperTechFans
D
Darknet – Hacking Tools, Hacker News & Cyber Security
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Engineering at Meta
Engineering at Meta
I
InfoQ
T
Threat Research - Cisco Blogs
Project Zero
Project Zero
Cloudbric
Cloudbric
MongoDB | Blog
MongoDB | Blog
Cisco Talos Blog
Cisco Talos Blog
L
Lohrmann on Cybersecurity
S
Securelist

I'm OWenT

国产大模型(GLM 5.1、Kimi K2.6)真实场景效果和 Coding Plan 额度测试 新版本libatapp的连接管理——从etcd服务发现到拓扑驱动的自动重连 新版本libatbus的设计变更——从树形路由到拓扑驱动 Protobuf又一坑 - C++标准和ABI兼容性 AI真好用-给Blog主题统一加mermaid,chart.js,excalidraw,draw.io的多种引入方式支持 给内网部署Squid-通用HTTP下载缓存 UE使用CodeChecker和clang-tidy生成静态分析报告 找出UE的循环依赖 C++小协程栈和临时变量及作用域的栈溢出问题分析 游戏服务的可观测性能力建设(C++生态) 指标上报的多线程优化和多拉取源点优化 协程(libcopp)的Channel功能和CPU命中率优化 通用RPC代码生成器 实现strong_rc_ptr(比shared_ptr更快的引用计数智能指针) 手夯一个STL allocator和对象内存分析组件 std::condition_variable 的信号丢失问题 踩坑一处(GCC)STL std::async 实现BUG导致的crash问题 GCC 14的一个warning to error BUG 给xresloader(Excel导表工具)增强UE读表支持(包含蓝图,Blueprint) Opentelemetry社区在gRPC的几个链接问题(静态库和动态库混用,musl工具链,符号裁剪) Excel转表工具(xresloader)的新验证器(验证外部Excel和文本数据,唯一性和自定义规则) protobuf v22和gRPC v1.55版本升级的依赖变化和upb适配 关于protobuf近期版本(v20/v3.20+)和 gRPC v1.54版本在某些编译环境下的一些链接和编译问题 xresloader-Excel导表工具链的近期变更汇总 打通游戏服务端框架的C++20协程改造的最后一环 Opentelemetry-cpp的Logs模块标准更新(涉及近期版本:1.8-1.9的BREAK CHANGES) 给cmake-toolset和工具链(curl等)加HTTP/2和HTTP/3支持 又开新坑之 coredns 插件: nftables和filter 关于opentelemetry-cpp社区对于C++ Head Only组件单例和符号可见性的讨论小记 集成 upb 和 lua binding 的踩坑小记 libcopp对C++20协程的接入和接口设计 再度优化GCC、LLVM、Clang、libc++、libc++abi等套件的构建脚本 游戏服务的分布式事务优化(二)- 事务管理 游戏服务的分布式事务优化(一)- Write Ahead Log(WAL) 模块 记录一些bazel适配用编译选项 测试现代化硬件C++浮点数性能和一致性 适配Boringssl和OpenSSL 3.0 近期cmake-toolset的一些适配问题 C++20 Text Formatting/fmtlib 适配问题小记 再次重构LLVM+Clang+libcxx+libc++abi+其他相关工具的构建流程 重构基于CMake的构建工具链 新版GCC和LLVM+Clang终于Release啦 折腾一下nftables下的双拨 [C++20] Module partitions和符号交叉引用(声明和实现分离) [Rust] 实现一个线程安全且迭代器可以保存的链表 基于protobuf的代码生成 几个使用protobuf中C++接口的Arena的坑 Amazon Aurora DB存储引擎论文阅读小记 近期对libatapp的一些优化调整(增加服务发现和连接管理,支持yaml等) xresloader转表工具链增加了一些新功能(map,oneof支持,输出矩阵,基于模板引擎的加载代码生成等) 在游戏服务器中使用分布式事务 libcopp接入C++20 Coroutine和一些过渡期的设计 libatbus 的大幅优化 nftables初体验 容器配置开发环境小计 PALM Tree - 适合多核并发架构的B+树 - 论文阅读小记 跨平台协程库 - libcopp 简介 C++20 Coroutine 性能测试 (附带和libcopp/libco/libgo/goroutine/linux ucontext对比) 尝鲜Github Action 一些xresloader(转表工具)的改进 protobuf、flatbuffer、msgpack 针对小数据包的简单对比 协程框架(libcopp) 小幅优化 Excel转表工具(xresloader) 增加protobuf插件功能和集成 UnrealEngine 支持 Anna(支持任意扩展和超高性能的KV数据库系统)阅读笔记 C++20 Coroutine libcopp merge boost.context 1.69.0 Google去中心化分布式系统论文三件套(Percolator、Spanner、F1)读后感 Rust玩具-企业微信机器人通用服务 使用ELK辅助监控开发测试环境服务质量和问题定位 2018年的新通用伪随机数算法(xoshiro / xoroshiro)的C++(head only)实现 Webpack+vue+boostrap+ejs构建Web版GM工具 Rust的第二次接触-写个小服务器程序 理解和适配AEAD加密套件 atsf4g-co的进化:协程框架v2、对象路由系统和一些其他细节优化 协程框架(libcopp)v2优化、自适应栈池和同类库的Benchmark对比 可执行文件压缩 初识Rust 使用restructedtext编写xresloader文档 atframework的etcd模块化重构 C++的backtrace ECDH椭圆双曲线(比DH快10倍的密钥交换)算法简介和封装 protobuf-net的动态Message实现 pbc的proto3接入 atgateway内置协议流程优化-加密、算法协商和ECDH 整理一波软件源镜像同步工具+DevOps工具 Blog切换到Hugo libcopp v2的第一波优化完成 libcopp(v2) vs goroutine性能测试 libcopp的线程安全、栈池和merge boost.context 1.64.0 GCC 7和LLVM+Clang+libc++abi 4.0的构建脚本 libatbus的几个藏得很深的bug 用cmake交叉编译到iOS和Android 开源项目得一些小维护 atapp的c binding和c#适配 对象路由系统设计 2016年总结 近期的一个协程流程BUG 重写了llvm+clang+libc++和libc++abi的构建脚本 atsf4g完整游戏工程示例|I'm OWenT atframework基本框架已经完成|I'm OWenT
填个转表工具 xresloader 去年的坑(数组尾部裁剪)
owent · 2022-08-28 · via I'm OWenT

blog-website

前言

xresloader 是一个功能比较全面并且跨平台的Excel导出protobuf、msgpack、xml、lua、json、javascript、UE-Csv、UE-Json等数据格式的工具。 并且整个工具链还包含了基于模板引起生成读表代码的 xres-code-generator ,方便产品/策划使用的 GUI批量执行工具 - xresconv-gui 和方便CI集成和程序使用的 命令行批量执行工具 - xresconv-cli

在之前很多项目和小伙伴们的使用过程中都提了一些非常不错的一键和建议,还有一个Feature Request。其中有一项对整体的输出流程变动比较大,所以之前只改了部分输出类型的实现。 这两天抽空完成了剩余的部分。

为啥会变动大?

首先,这个需求的功能是,当一个数组在Excel里配置时,如果存在空配置。那么只裁剪末尾的空项,不裁剪前面的。 详情可参见 https://github.com/xresloader/xresloader/issues/6 。 为什么这个需求会导致比较大的变化呢?xresloader 原本支持的模式有两个,一个是裁剪掉所有空项,这样策划配置在Excel里的无效值会被直接过滤掉。 另一个是保留所有的项目,之前我们有个项目是策划用Excel画地图的,这样要保留所有的位置信息。

这两种模式的共同点就是,他们对于一个元素准备转出的时候,都能只根据自己的数据知道自己需不需要被导出。 而在新的这个需求功能中,自己要不要输出就和后面还没跑到的元素有关。

另外由于 xresloader 支持多种输出模式,每种模式的输出方式不完全一样,同时输入模式我们也有Plain模式(把数组配置在一个Excel单元格中)和标准模式(数组的每一个元素单独配置在一个Excel单元格中)。 比如在 UE-Csv 模式中,为了提高性能,我们采用的是流式的输出方式。那么在这种场景下,首先我们需要把上级结构传递到下一级,既我们转出数组内的某个元素的时候要知道目前数组以输出的数据长度和当前元素的下标(标准模式)。这样我们才能知道前面需要补多少数据。 显然如果是一个Plain模式的数组,我们是不需要补元素的,因为本身只能动态长度。但是我们不能根据当前导出是Plain模式还是标准模式来决定是否走补全流程。因为可能出现message数组,数组本身是标准模式,但是message是Plain模式。这样这个单元格转出是Plain模式的,但仍然要补数据。

在去年其实我已经实现了大部分结构的调整和输出模式的裁剪尾部空值的支持。但是那些都是结构化数据,比较好处理。而 UE-Csv 这种流式输出的就比较麻烦,这次主要也就是实现了上面提到的方案的执行细节,总算是填完了这个坑。

额外增加了一个小工具 xresloader-dump-bin

在上个月的时候,为了方便调试,我写了个小工具 xresloader-dump-bin ,用于把 xresloader 输出的协议二进制转换成人类易读的文本。 主要是为了调试方便使用的,因为 xresloader 的结构报了一层,里层是 bytes 没法用protobuf官方工具直接简单得可视化看内容。

这次这个小工具还是用了 Rust 语言写。Rust语言确实是很适合写这类小工具,跨平台和交叉编译都非常方便。运行开销非常小,编译完得包也非常小。

分离协议子模块

另外我还把 xresloader 的协议分离除了单独的仓库( https://github.com/xresloader/xresloader-protocol ),并作为各个依赖仓库的子模块。 这是因为随着跟多的工具的实现,依赖这个协议的越来越多,分离出来可以更好地管理协议,也不需要仅仅为了更新协议拉主仓库。

Upb和Lua读表工具链

最好一个大地改进是读表工具增加了对 upb 和其 Lua binding地支持。 pbc 已经被作者弃坑好多年了,所以我们项目组近期接入了这个更有影响力地方案。 upb 是一个 protobuf 官方的子项目,运行时使用纯C编写。代码生成工具使用C++,依赖 libprotoc 和 abseil-cpp 。并且 upb 是现在protobuf的Ruby, PHP和Python的官方运行时库,里面也包含了Lua binding模块。这样不仅技术支持有保障(有主流项目踩坑),并且能跟进protobuf的新功能。

简单地说,就是读表代码生成工具 xres-code-generator 里增加了支持 upb 和其 Lua binding 的模板和Loader的Service模块。 同时构建系统 cmake-toolset 里增加了对集中不同引入方式和几个典型版本的upb的适配和Patch,并提供了自测小工具。

更多细节可以参见我之前一篇Blog: 《集成 upb 和 lua binding 的踩坑小计》

最后

其实还有一些其他的小优化的Feature Request,不过那些变动都不大。下次啥时候能抽出时间来再继续加吧。

欢迎大家试用和提出宝贵意见。

开源主仓库: https://github.com/xresloader/xresloader 文档: https://xresloader.atframe.work/