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

推荐订阅源

Forbes - Security
Forbes - Security
A
Arctic Wolf
M
MIT News - Artificial intelligence
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
C
CERT Recently Published Vulnerability Notes
NISL@THU
NISL@THU
L
Lohrmann on Cybersecurity
Martin Fowler
Martin Fowler
A
About on SuperTechFans
P
Palo Alto Networks Blog
Project Zero
Project Zero
The GitHub Blog
The GitHub Blog
WordPress大学
WordPress大学
Blog — PlanetScale
Blog — PlanetScale
博客园_首页
大猫的无限游戏
大猫的无限游戏
Cisco Talos Blog
Cisco Talos Blog
P
Proofpoint News Feed
D
DataBreaches.Net
Cyberwarzone
Cyberwarzone
T
Tor Project blog
IT之家
IT之家
P
Proofpoint News Feed
Help Net Security
Help Net Security
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
CXSECURITY Database RSS Feed - CXSecurity.com
Microsoft Azure Blog
Microsoft Azure Blog
V2EX - 技术
V2EX - 技术
K
Kaspersky official blog
Hugging Face - Blog
Hugging Face - Blog
MongoDB | Blog
MongoDB | Blog
B
Blog
N
News and Events Feed by Topic
The Cloudflare Blog
S
Schneier on Security
P
Privacy & Cybersecurity Law Blog
T
The Blog of Author Tim Ferriss
Recorded Future
Recorded Future
Last Week in AI
Last Week in AI
The Last Watchdog
The Last Watchdog
Hacker News - Newest:
Hacker News - Newest: "LLM"
L
LangChain Blog
I
InfoQ
F
Full Disclosure
The Register - Security
The Register - Security
阮一峰的网络日志
阮一峰的网络日志
H
Hacker News: Front Page
V
V2EX

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组件单例和符号可见性的讨论小记 填个转表工具 xresloader 去年的坑(数组尾部裁剪) 集成 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 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 · 2019-09-12 · via I'm OWenT

blog-website

前言

最近有几个其他项目组的童鞋给我之前的 转表工具链-xresloader 提了几个需求。然后我也根据我们近期一些需求点对转表工具链一起给这套工具做了点功能增强和细节上的一些改进。 这篇blog差不多是这些东西的 CHANGELOG了吧。

插件和协议和CI

对一些复杂的需求,使用protobuf插件机制比配置在excel里描述能力要强的多。所以近期大多的新功能都是由插件配置的。但是以前 转表引擎-xresloader 的发布流程里只包含输出的jar,协议得去对应源码包里找。另外一个童鞋报给我说找 github 的release里的源码包似乎并不支持git lfs,解出来的git lfs文件只有一个版本号,所以我给CI的发布流程里加了对应版本的protocol文件的打包,当然也包括插件的protocol。

然后顺便也修复了 sample 里的 powershell 脚本,现在有 powershell-core 的情况下。跨平台脚本反而 powershell-core 能比较统一了。 原来的是直接bash脚本copy来稍微改了下,兼容性也是有点问题。

  • 数字类型转字符串,使用 %g 格式(去除不必要的小数点和0)

这个主要是之前如果Excel里配置了数值类型,而协议里配置的是文本的话,由于Excel里接口读取出来只有浮点类型,对0而言,直接的同String接口会返回 0.0 。所以就对浮点数值转字符串特别处理了下。让它不再写出无用的后缀。

  • 常量导出现在会导出protobuf的message里包含oneof了 (使用C++的命名规则 k大写驼峰名字)

我们自己的项目里现在会使用oneof做一些优化,然后偶尔也会使用一些内嵌的美剧类型。原先常量到处功能导出的枚举和oneof只导出了file层面的枚举,并没有导出oneof。为了方便我们客户端lua层和Web的GM工具的js方便访问,加入了这个内嵌message的oneof和枚举的常量导出。由于oneof没有官方的名称接口,所以我这里导出用了C++里的命名规则了。

  • 支持解析protobuf的内嵌message

这个是和上面的一起的,然后协议映射也支持配置成内置message了。这个是顺便做的估计没啥需求。

  • 增加protobuf插件 - org.xresloader.field_alias 可以设置字段别名并用于配置了验证器的excel数据中

这条是其他项目组提的需求,他们希望直接excel里配中文名,但是转表的时候转回枚举类型对应的整数。但是不希望走macro表,因为这样就会把很多枚举的内容混在一起。这个需求我们以前的解决方案是直接配字段的名字( 文档: https://xresloader.atframe.work/zh_CN/latest/users/advance_usage.html#id4 ),这个中文别名的功能之前没想到什么维护方便和自动化程度高的方式。也是因为那时候 xresloader 还没有支持protobuf的插件扩展。现在可以通过protobuf插件机制支持了。但是也是得使用方导入 xresloader 的插件proto 。

  • 增加protobuf插件 - org.xresloader.enum_alias 可以设置枚举项目的别名并用于配置了验证器的excel数据中

这条和上面一样,只是上面那条是针对message里的field的,这个是针对enum的。

  • 增加protobuf插件 - org.xresloader.field_ratio 可以设置字段放大倍数值,可用于需要转出整数类型的百分率/千分率/万分率,但excel中保留小数表达

这条是起源于我们项目组的一个需求,就是方便策划配表。我们战斗引擎里是不都是整数,没有浮点数,但是又希望方便策划配置千分率的时候对于 35% 可以配置成 0.35 。但是转出千分率的时候导出 350, 现在这里 字段上配置 org.xresloader.field_ratio 就行了。

批量转表工具之 xresconv-cli 和 xresconv-gui 的新增功能

xresconv-cli

  1. 支持多个 <output_type></output_type> 参数,支持给每个 output_type 单独设置 rename 规则;

这也是其他项目组提的一个需求,他们是希望转出程序的二进制的同时可以直接也输出一个其他格式的可读的文本配置。本来是想加到 xresloader 里,可能还可以复用里面的 AST 的。但是后面想起来没办法复用AST,因为那个和Excel的列映射相关。如果要支持配置多个DataSource,这种情况必然要重建AST。如果流程保持一致的话这两个功能是冲突的。现阶段 xresloader 性能还比较好,所以暂时不想为了这一个需求增加代码维护的复杂性。所以加入到批量导表的协议规范里了。

  1. 优化标准输出和标准错误的输出编码,自动转换 xresloader 的输出编码;

之前试过一些方式让 xresconv-cli 去适配各种环境的终端编码,但是python2+python3,linux+macOS+Windows+MinGW+Cmd(cp936)+Cmd(cp65001)+Powershell(GBK)+Powershell(UTF-8)+Powershell-core,总没发现万金油。现在换了一种实现,在python层转一次编码。看看效果吧。

  1. 优化 xresloader 的输入编码;

xresconv-gui

  1. 支持多个 <output_type></output_type> 参数,支持给每个 output_type 单独设置 rename 规则

和上面 xresconv-cli 一致的接入

  1. set_name 事件增加 alert_warning(text)/alert_error(text)/log_info(text)/log_error(text) 函数
  2. set_name 事件增加 work_dir 变量和 configure_file 变量
  3. on_before_convert/on_after_convert 事件增加 configure_file 变量
  4. 采用Promise重构建立节点树的的流程
  5. 更新依赖库

为了更方便 xresconv-gui 的事件里读取构建信息的数据和控制GUI的log,补了一些函数和事件,现在的各类接口和事件的可用变量描述如下(新增的标记了 要求版本>=2.2.0 ):

set_name 事件数据。

{
    work_dir: "工作目录(要求版本>=2.2.0)",
    configure_file: "载入的配置文件路径(要求版本>=2.2.0)",
    item_data: {
        id: "条目ID",
        file: "数据源文件",
        scheme: "数据源scheme表名",
        name: "描述名称",
        cat: "分类名称",
        options: ["额外选项"],
        desc: "描述信息",
        scheme_data: {"元数据Key": "元数据Value"}
    },
    alert_warning: function(content, title, options) {},    // (要求版本>=2.2.0) 警告弹框, options 结构是 {yes: 点击是按钮回调, no: 点击否按钮回调, on_close: 关闭后回调}
    alert_error: function(content, title) {},               // (要求版本>=2.2.0) 错误弹框
    log_info: function (content) {},                        // (要求版本>=2.2.0) 打印info日志
    log_error: function (content) {}                        // (要求版本>=2.2.0) 打印info日志
}

on_before_convert/on_after_convert 事件数据。

{
    work_dir: "执行xresloader的工作目录",
    configure_file: "载入的配置文件路径(要求版本>=2.2.0)",
    xresloader_path: "xresloader目录",
    global_options: {"全局选项": "VALUE"},
    selected_nodes: ["选中要执行转表的节点集合"],
    run_seq: "执行序号",
    alert_warning: function(content, title, options) {},    // 警告弹框, options 结构是 {yes: 点击是按钮回调, no: 点击否按钮回调, on_close: 关闭后回调}
    alert_error: function(content, title) {},               // 错误弹框
    log_info: function (content) {},                        // 打印info日志
    log_error: function (content) {},                       // 打印info日志
    resolve: function (value) {},                           // 通知上层执行结束,相当于Promise的resolve
    reject: function(reason) {},                            // 通知上层执行失败,相当于Promise的reject
    require: function (name) {}                             // 相当于 nodejs的 require(name) 用于导入nodejs 模块
}