C 中访问 Lua 配置表的优化 (blog.codingnow.com)
这两天写代码时用到之前写的一个对 Lua 配置表的 cache 模块 。感觉用起来还是不够简洁方便。我今天动手重新设计了一下。

需求是这样的:

项目有非常多的配置信息保存在 Lua 的 (树状层级的)table 中,大部分逻辑代码直接用 Lua 的语法便可直接访问。但是,有少量有性能要求的业务是在 C 中实现的,C function 中也需要读取这些存放在 Lua 中的配置数据。

配置项随着项目开发,变更非常频繁。如果我设计一个小语言,定义出配置表,用代码生成的方式把表项翻译成对应的 C/C++ 结构,再在 C side 根据 Lua 中的数据重建一组 C 数据也未尝不可。这就是 google protobuf 官方采用的方式(用代码生成的方式,根据数据的 schema 构建出 C++ 类,让 C++ 可以方便访问这些数据)。

但我不想搞得这么复杂(浪费?
by @技术头条 2022-02-04 19:51 查看详情
Mac 终端下 实现 安装 ipa 包到 iPhone 真机 (droidyue.com)
最近处理 Flutter 的开发工作,开始尝试使用 iOS 作为日常的真机调试工作。对于一个原技术栈为 Android的人来说,发现 iOS 有很多不太方便的地方。比如如何在 Mac 电脑上安装 ipa包到 iPhone 上。

相比来说,Android 提供了adb 可以很快捷的在 终端上执行安装。而iOS 我也希望有一个可以在终端上实现安装ipa的方式,摸索了一下,终于发现了一个可行的技术方案。
by @技术头条 2022-02-03 13:17 查看详情
ECS 中同类关联数据的处理 (blog.codingnow.com)
ECS 模式下最难处理的是同类 Component 之间有相互联系的情况。

最方便 ECS 处理的数据是相互独立的,每个数据单元都不和其它数据单元产生联系;如果多个数据单元会有故有的联系时,当可以把它们看作是同一个实体(Entity)下的不同组件(Component)时,那么就可以借用 Entity 的概念来处理它们。我们依旧可以按固定的次序去迭代这些数据。

但是,在复杂系统中,无可避免的,同类数据相互之间也可以产生联系。例如:场景管理中,节点之间有父子关系,计算节点的空间状态的过程对数据的遍历次序有要求。且计算过程还需要访问父节点的状态。解决这类需求是 ECS 框架的一大挑战。
by @技术头条 2022-02-03 13:12 查看详情
你不知道的CSS media查询与用户体验 (www.zhangxinxu.com)
本文介绍 4 个很多前端开发不知道的可以提升用户体验的 media 媒体查询语句,希望可以帮到大家的学习。
by @技术头条 2022-02-01 22:52 查看详情
Android 性能优化的术、道、器 (androidperformance.com)
谷歌搜索 「Android 优化工具」,你会找到很多与此相关的内容。他们的问题在于要么是内容高度重复、要么是直接讲使用方法,很少会给你介绍整体性的架构,一不小心就会让人会种「一个工具搞定一切」的错误认知。以笔者团队的多年经验来看,在性能分析领域这种银弹级别的工具是不存在的。工具在发展,老问题会以新的方式变样出现,不掌握核心逻辑的话始终会让你浮于技术的表面。
本文首先系统性的梳理性能分析中的可观测性技术,它涵盖数据类型、抓取方法以及分析方法等三部分内容,之后是介绍谷歌提供的「三大件」分析工具。目的是想让你了解不变的理论性的知识,以及与之对应的在安卓环境中可用的工具,这些可以让你少走一些弯路,直接复用前辈们的经验。
需要特别说明的是,对于性能优化肯定不止有这三个工具可用,但这个三个工具是我们平时用到的「第一手工具」。进行进一步分析之前,你都需要依赖这三个工具进行瓶颈定位,之后才应不同领域特性选择对应的工具进行下钻分析。
by @技术头条 2022-02-01 22:29 查看详情
Go: 关于锁的1234 (www.felix021.com)
其实锁很适合用来做套题,比如可以这么切入:sync.Mutex 是悲观锁还是乐观锁?

有些候选人不了解它们的区别,回答靠猜,缺乏逻辑以至于我都记不住。虽然这只是一个概念性的知识,但是却很能反映候选人的工作经验,比如读多写少的并发场景,乐观锁可以减少加锁冲突带来的开销。

当然大多数人还是知道的,于是可以继续问:你有了解过锁是怎么实现的吗?

很多人都能想到:维护一个初值为 false 的变量,当一个线程加锁成功的时候,将它置为 true ,就可以保证其他线程无法再获取。

逻辑是没错,但真正的问题是:两个线程同时检查,发现它的值都是 false ,如何保证只有一个线程会把它置为 true 呢?

这样的提问让不少候选人意识到,自己其实并没有真正理解锁。
by @技术头条 2021-06-13 23:27 查看详情
洋葱式信息安全观察:溯源(归因分析)与机器学习 (www.sec-un.org)
回顾往年的攻击事件,有报道称韩国平昌冬奥会APT攻击事件导致了奥运会网站的宕机和网络中断。

根据开源情报,该事件攻击者的归属问题,至今未有定论。在事件中攻击者使用的植入载荷Olympic Destroyer,其相关代码与Lazarus曾使用的载荷有部分相似,而美国部份媒体则声称该事件为俄罗斯情报机构实施并嫁祸给朝鲜。

该事件再一次展现了APT攻击者利用和模仿其他组织的攻击技术和手法特点,制造false flag以迷惑安全分析人员并误导其做出错误的攻击来源归属的判断。

网络攻击者,其手法随着不同的组织、个人的能力以及外部环境而多变,是否有一种通用的方法来进行综合分析,作为归因分析的指导呢?

狡猾的狐狸总是懂得隐藏自己,甚至嫁祸于他人。然而,“凡有接触,必留痕迹”,判断一起攻击所属的国家、地区、组织、黑客团体,通常需要所结合已知知识(威胁情报)和具体的攻击细节进行对比分析,最后做出结论。以下介绍几个常用的分析切入点。
by @技术头条 2021-06-13 23:26 查看详情
初探 Typescript 解析器 (www.alloyteam.com)
前段时间看了下开源组件 stryker 的源码,对 Typescript 的解析器产生了兴趣。这个开源组件是用来检查单测质量的,通过识别源码自动更改某些代码内容,然后看单测能否检测出来。Typescript 解析器做的,就是识别源码这一关键步骤。

于是花了些时间学了下 Typescript 解析器,感觉像打开一个新的大门,可以玩很多有趣的事情。
by @技术头条 2021-06-13 23:22 查看详情
一个有趣的内存泄漏案例 (www.alloyteam.com)
腾讯文档最近基于刚刚发布的 Webpack5 进行了一次编译的大重构,作为一个多个仓库共同构成的大型项目,任意品类的代码量都超过百万。对于腾讯文档这样一个快速迭代,高度依赖自动化流水线,常年并行多个大型需求和无数小需求的项目来说,稳定且快速的编译对于开发效率至关重要。这篇文章,就是笔者最近进行重构,成功将日常开发优化到 1s 的过程中,遇到的一些大型项目特有的问题和思考,希望能给大家在前端项目构建的优化中带来一些参考和启发。
by @技术头条 2021-06-13 23:17 查看详情
实践之后,我们来谈谈如何做好威胁建模 (tech.meituan.com)
对美团安全团队来说,引入领先的安全技术设计能力,构建全方位、多维度智能防御体系,是我们不懈追求的目标。美团有众多基础设施,核心业务系统也需要以成熟的方法论进行威胁评审。本文将着重分享威胁建模是如何帮助美团安全团队评估、发现大量安全设计的风险,以及互联网企业应该如何大范围地实施威胁建模并完整地进行落地。
by @技术头条 2021-06-13 23:17 查看详情
FlutterWeb在美团外卖的实践 (tech.meituan.com)
美团外卖商家端业务围绕数百万商家,在 PC 和 App 上分别提供了交易履约、运营、广告、营销等一系列功能,且经常有外投 H5 的场景(如外卖学院、商家社区、营销活动等)。在这种多形态的业务场景下,如何保障多端体验一致性、如何提升多端迭代效率一直是商家端产研关注的重点。
by @技术头条 2021-06-13 23:17 查看详情
JVM优化之逃逸分析及锁消除 (it.deepinmind.com)
逃逸分析——我们在上一篇文章中所介绍的由编译器完成的一项的分析技术——使得删除锁的优化成为了可能。如果它能确认某个加锁的对象不会逃逸出局部作用域,就可以进行锁删除。这意味着这个对象同时只可能被一个线程访问,因此也就没有必要防止其它线程对它进行访问了。这样的话这个锁就是可以删除的。这个便叫做锁消除,本文是JVM实现机制的系列文章,这也正是今天要讲的主题。

众所周知,java.lang.StringBuffer是一个使用同步方法的线程安全的类,它可以用来很好地诠释锁消除。StringBuffer是Java1.0的时候开始引入的,可以用来高效地拼接不可变的字符串对象。它对所有append方法都进行了同步操作,以确保当多个线程同时写入同一个StringBuffer对象的时候也能够保证构造中的字符串可以安全地创建出来。
by @技术头条 2021-06-13 23:06 查看详情
JVM优化之逃逸分析与分配消除 (it.deepinmind.com)
在Java Magazine的前几期文章中,我们介绍了just-in- time (JIT) 编译技术的一些理论基础,以及如何使用Java Microbenching Harness(JMH)和开源工具JITWatch来进行可视化分析,以便搞清楚HotSpot VM的内部机制。在这期文章中,我们将要深入介绍一下逃逸分析(escape analysis)技术,这是JVM最有意思的优化手段之一。逃逸分析是JVM的一项自动分析变量作用域的技术,它可以用来实现某些特殊的优化,后续我们也会分析下这些优化。在开始之前,你只需要掌握一些HotSpot JVM的基本工作原理就可以了。
by @技术头条 2021-06-13 23:06 查看详情
浅谈 Code Review 之事前准备 (blog.alswl.com)
随着业务规模扩大、团队组成变复杂,如何降低项目实施风险,降低软件复杂度变得尤为关键。 我从 Martin Flower、Joel Spolsky(软件随想录 作者) 等巨匠智慧中寻找解决复杂工程之道,其中 Code Review 是行之有效手段。 我认同 Code Review 价值也是忠实执行者。

加入蚂蚁以后,我在所接触项目中都大力推广 Code Review。 感谢团队信任和支持,目前 CR 协作进展顺利, 项目 CR 从最早不主动,到现在形成基于模块 Owner 制度 CR 和 Peer Review。 我也曾经在 3 个月内处理完成 700 多个 Pull Request,并在 PR 讨论中中都留下一些有价值讨论。 这里我将自己对 Code Review 一些理解记录下来。
by @技术头条 2021-06-13 23:05 查看详情
带噪学习研究及其在内容审核业务下的工业级应用 (www.52nlp.cn)
从人脸识别,机器翻译到智能推荐,人工智能已经深入到现代社会的方方面面。现在工业上最常见的人工智能系统,往往依赖于大量有标签的数据。通常,优质的有标签数据需要耗费大量的人力、物力。而且人工打的标签的准确度,往往随着标注任务复杂度的提高而降低。

一般的人工智能算法,都是在干净的数据集上做学习和优化。在现实中的工业应用场景中存在大量弱监督的情况,即标签缺失(无监督、半监督)、标签错误(错监督)的情况。我们在第一个章节,简单介绍一下我们vivo ai lab两篇AAAI2021关于弱监督带噪学习的工作;并在第二章介绍一下我们的工作在内容审核业务下的工业级应用。
by @技术头条 2021-06-13 23:04 查看详情
华为手机 vs 苹果手机,我的一年评测对比报告 (blog.devtang.com)
前言因为工作的原因,我早年一直从事 iOS 开发,所以一直用着苹果手机。iPhone 的体验一直挺好的。但是我一直比较好奇顶级的 Android 手机怎么样,体验和苹果会差多少,于是我去年就换了华为的 P30 Pro。对比使用了一年,给大家分享一下我的感受。预告一下,前面夸华为比较多,后面夸苹果比较多。
by @技术头条 2021-06-13 22:59 查看详情
本地 git 的 partial clone (blog.delphij.net)
partial clone 是 git 的一项旨在减少空间和网络带宽占用的特性。它会跳过下载那些可能不会用到的 git 对象,而是仅仅在需要时才去下载。对于网络延迟较低且带宽不愁的用户来说,这样做往往会节省掉不少不必要的磁盘空间占用,而代价是可能失去离线访问的能力。除此之外,有些操作,例如 git blame 或者 git log -p 很可能会需要与服务器交互,从而会变得略慢一些。

比较有用的场景是在使用某些历史比较久,或是对文件整体替换较多,而大部分情况下只关注最新版本的代码库。与较早的 --depth 1 相比,partial clone的优点在于想要访问历史时仍然可以像正常的clone一样访问。

今天闲来无事打算把机房的服务器稍微升级一下,于是顺手弄了一下 partial clone,稍微记一笔作弊条。
by @技术头条 2021-06-13 22:54 查看详情
洋葱式信息安全观察:网络安全需求层次的思考 (www.sec-un.org)
组织对网络安全(Cyber Security)的需求是否存在一定规律?

一个组织的存在,必然存在着自己的使命,无论是企业,还是NPO(非盈利组织)、NGO(非政府组织)。为了完成自己使命,一些组织中大量采用信息技术,而其载体网络空间(cyber space)承载着的信息对组织具有重要作用,甚至可以决定其存亡,因此形成了组织对网络安全的需求。对于不同组织而言,如何研究组织对网络安全需求的规律呢?

组织是由若干个体组成的,因此组织的行为学必然带着个体的色彩,不管企业的管理模式是君主制,还是群体决策制,组织的决策都体现了个体的意愿的组合。因此,我们可以借鉴马斯洛的需求层次理论来研究企业网络安全需求的层级。(在每一层级的最后,我们将采用层级关键词来识别一个组织的网络安全需求层级)
by @技术头条 2021-06-13 22:49 查看详情
浅析Course of Action应对措施 (www.sec-un.org)
本着“摸着鹰酱过河”的思路,对现有的几个安全分析框架和模型规范中与Course of Action应对措施相关的内容进行系统性分析和梳理,希望能对从事自动化响应处置、智能运营相关工作的同行有一些帮助和启发。其中,将ATT&CK框架中的Mitigation缓解措施、MITRE的Shield框架中的Active Defense主动防御、STIX模型中的Course of Action应对措施、IACD编排模型中的功能和能力、RE&CT框架中的Incident Response应急响应等内容都纳入Course of Action应对措施的范畴。
by @技术头条 2021-06-13 22:47 查看详情
洞见RSA 2021|备受热捧的“供应链攻击”如何防御? (blog.nsfocus.net)
供应链攻击是一种面向软件开发人员和供应商的新兴威胁。目标是通过感染合法应用分发恶意软件来访问源代码、构建过程或更新机制。

软件供应链可划分为开发、交付、运行三个大的环节,每个环节都可能会引入供应链安全风险从而遭受攻击,上游环节的安全问题会传递到下游环节并被放大。值得注意的是在供应链攻击中受到攻击的是上游厂商,受到威胁的则是上下游厂商。上游的代码风险问题,其实就是下游厂商需要注意的供应链问题。上游管理好软件开发过程中的风险有助于减少下游厂商面临的供应链攻击。代码风险平台能够解决的就是软件开发过程中发生的供应链攻击。
by @技术头条 2021-06-13 22:46 查看详情