Emlog 5.3.1 兼容 PHP 8.0 错误修复

前言

2020 年 11 月 26 日,PHP 8.0.0 正式发布。笔者不是 PHP 开发者,只是随便看了一些公众号的二手消息摘编凑个热闹。记得改进中有一点是更注重安全性,类型检查及其错误异常似乎更为严格规范了,可见 PHP 欲逐步解决其广受吐槽的弱类型安全隐患历史遗留问题的决心。

笔者想看看 PHP 8 兼容性如何,感受一下性能有没有什么变化,于是下载了 PHP 8.0.0 Windows 包本地玩乐一番。

简单配置完成后运行,发现 PHP 8.0 真的是 breaking change 啊,笔者手上有的、为数不多的 PHP 应用,没有一个能在 8.0 上运行起来,纷纷 Fatal Error;连去年(2019 年)6 月发布的 pma (phpMyAdmin) 都无法运行。好家伙。

Emlog 5.3.1 PHP 8.0 兼容修复

之前笔者已经将自用的 Emlog 5.3.1 程序兼容修复到了 PHP 7.x 下能运行的程度,结果拿到 PHP 8.0 上试,直接空输出,连报错提示页面都没有(因为在错误拦截层之下出错了),走的很安详,是时候抛弃 Emlog ...

阅读全文>>

3466 次浏览 3 条评论 标签:emlog PHP

探究 kirikiri 引擎的存档文件 .ksd / .kdt 内容格式(解析)和存档机制

引言

零知识背景:(ki)(ri)(ki)(ri) 或 kirikiri(简称 krkr)引擎,是一套由 W. Dee [日本程序员] 开发的开源免费视觉小说游戏引擎框架,其提供了一套标记和脚本语言(KAG、TJS)方便游戏制作者快速实现此类游戏常用的界面、流程、音画演出效果和数据管理,使制作者更专注于内容创作而不是底层程序开发;该引擎目前已被广泛应用,不少成功的商业作品正是基于该引擎制作。

笔者观察到一些基于 kirikiri 引擎的游戏的存档文件为 datasc.ksddatasu.ksd,检阅其内容,发现它们是二进制文件,文件头特征为 FE FE 02 FF FE

出于对 krkr 存档内容的好奇,笔者想了解存档文件 .ksd 的文件格式和语义,解析 krkr 存档内容。

krkr2 官方文档之文件说明章节提及,*.ksd*.kdt 文件是 "KAGのセーブデータ" (KAG save data) 即 KAG(krkr) 存档数据。

游戏程序对 .ksd / .kdt 存档文件的读写

查阅 kirikiri 引擎(具体版本是 krkr2)源...

阅读全文>>

10487 次浏览 2 条评论 标签:kirikiri krkr 存档 TJS

中文及亚洲语言在线字体按需加载方案:Dynamic subsetting

上网冲浪时注意到一个设计讲究的中文站点使用了在线中文字体来呈现内容(虽然它拉取的是很朴素的知名开源字体(思源/Noto 系列)而非其他商业设计字体,但效果确实不错)。这个网站的文字内容是从他处动态拉取的,这一点与某些静态商品宣传页不同,后者的文案内容是固定的,在设计阶段就大可把用到的字单独抽取出来准备好;而从网络请求观察发现,这个网站的字体是前端运行时由 js 按需加载的,用到了哪些字才拉取对应的字形(这是理想情况),断断续续加载了数个 400+KB 的数据分片。这个站点使用的在线字体来自 use.typekit.net,可知该在线字体服务提供商为现在已经改名为 Adobe Fonts 的 Typekit。(尽管如此,以下仍称其 Typekit)

众所周知,包括中文在内的亚洲语言(如 CJK)字体体积庞大,完整地在线加载有很多方面的困难。因此这次注意到有网站接入了中文(亚洲)在线字体按需加载技术,我很感兴趣。虽然这项技术应该已经诞生挺长时间了,但是它似乎始终未能铺开应用,甚至毫无存在感,何以见得呢?——到了 2020 年我才意识到这项技术的存在,而且在(中文)搜索引擎中几...

阅读全文>>

5663 次浏览 3 条评论 标签:在线字体 subsetting typekit

在当前路径打开管理员 PoweShell 窗口,以及在既有普通 Shell 提升创建管理员 Shell,维持当前目录不变

Title: "Open PowerShell (Admin) Window Here" from Explorer, and A Ease Way to Start (Elevate) A New Admin Shell from An Normal Shell with Current Working Directory Unchanged.
- Article in Chinese only -

很多人也许知道,Windows 资源管理器打开文件夹,在窗口的空白区按住 shift + 右键单击,这样会弹出“扩展”右键菜单,这个扩展菜单相比普通菜单多出一些菜单项,如 "在此处打开 Powershell 窗口(S)" (Open PowerShell window here) —— 它以当前目录为工作目录打开 PowerShell,而不必我们亲自 cd (Set-Location) 切换,很方便。

不过这样打开的这个 PowerShell 运行在普通非管理员用户身份下,只有普通权限。然而我们有时候想在当前目录下执行一些高权限操作,需要 UAC 开管理员身份的 Sh...

阅读全文>>

Rust 在 Windows 上 Release 编译彻底去除调试符号信息

本文介绍如何让 Rust 在以 Windows 为目标平台的 Release 编译的基础上,通过配置链接参数进一步彻底去除多余的调试符号信息,针对的工具链包括 GNU 和 MSVC。


去除额外的符号信息能减小最终生成程序的体积。如果是在 Windows 上使用 GNU 工具链,那么这一点会很明显。

一个 Rust 的 Hello World 程序,在 Windows 下,使用 GNU 工具链,即便是 Release 编译,最后生成的程序体积也有 3 MB 多。其中调试符号信息占了大部分体积;如果去除,程序体积可以下降至 600+ KB。好在如果使用的是 MSVC 工具链编译,调试符号会另存于 .pdb 文件,程序本体没有这样的体积问题。

在 Linux 下,如果编译时带上了符号信息,编译完还可以用 strip 工具解决这个问题,但是 Windows 下呢?


去除符号信息可以减小 Rust 程序体积,但本文不打算探讨减小 Rust 程序体积的各种技巧,本文只打算纯粹地介绍在 Windows 目标平台上编译 Rust 程序时如何去除额外的调试符号信息

读者如果想进...

阅读全文>>

7755 次浏览 1 条评论 标签:Windows debug Rust strip symbol gnu msvc

关于 Win10 UWP 邮件应用代理设置

本文假定您已经知道 UWP 应用需要解除回环访问(Loopback)网络隔离从而支持本地代理。

如果您不是很了解该内容,请查看 EnableLoopback Utility – 让 UWP 应用也能使用系统代理[Windows]

如果只将 邮件和日历 添加到 Loopback 限制排除名单,在邮件应用内添加其他账户/邮箱的 SSO 登录页面仍无法使用代理。可能提示:

当前无法连接到你所需的服务。请检查网络连接或稍后重试。

经过排查,还需要放行名称开头为 microsoft.windows.authhost 的几个应用才能使得 SSO 登录也支持代理。(其实只是其中的某一个放行就可以了,但是如果懒得测试,就全部放行)

以 AppContainer Loopback Exemption Utility 为例,示意图:

在 EnableLoopback Utility 中放行 microsoft.windows.authhost.*
在 EnableLoopback Utility 中放行 microsoft.windows.authhost.*


阅读全文>>

5754 次浏览 0 条评论 标签:Windows 邮件 UWP SSO 代理 Loopback

Python 3.8 上 ctypes 加载 DLL 库抛出异常 FileNotFoundError: Could not find module 'node.dll'

本文原发于笔者在 Github 上的项目 Issue 讨论中 (https://github.com/ynyyn/Miniblink-Python-SimpleDemo/issues/4),系笔者在 Python 3.8 上测试项目兼容性时觉察到的 Python 行为(与兼容性)变更。

现象

使用 Python 3.8 ctypes 加载 DLL 库,采用相对路径加载,如下写法所示:

mb = ctypes.cdll.LoadLibrary("node.dll") 

启动时抛出 FileNotFoundError 异常,提示 Could not find module 'node.dll'. Try using the full path with constructor syntax.

Exception in thread Thread-1:
Traceback (most recent call last):
  File "...\Python38\lib\threading.py", line 932, in _bootstrap_inner
 ...

阅读全文>>

31066 次浏览 0 条评论 标签:Windows Python ctypes dll

CLion 远程调试控制台`pretty printers setup`错误

背景:CLion 项目的 Toolchains 配置为 Remote Host,即远程编译、远程运行、远程调试。(CLion 2019.2.x)

在运行调试时,调试控制台输出提示:

Error during pretty printers setup: Error while executing Python code.

Some features and performance optimizations will not be available.

虽然不是什么关键性问题...

----

根据

https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000098784-Python-error-when-debugging

为 CLion debugger 模块启用调试级别的日志记录具体看看错误内容。

关键词:#com.jetbrains.cidr.execution.debugger (详见上方链接)


得到相关日志如下:

DEBUG - brains.cidr.exe...

阅读全文>>

Windows 会对 SSD 关闭 Superfetch 吗

【本文状态:草稿】

有很多说法称,如果 Windows 安装在 SSD 上,那么 Windows 默认不会启用 Superfetch 功能。

但我观察到我自己所使用的 Windows 10 却发现,尽管系统安装在 SSD 上,但似乎仍启用着 Superfetch 功能。

于是继续了解了一下。


首先是这则问答:

https://zhidao.baidu.com/question/96522455.html

在固态硬盘上会禁用SuperFetch么?

会,但不是绝对。

微软最初打算完全在固态硬盘上禁用SuperFetch,但在部分系统上碰到了大幅度的性能衰退,后来发现第一代固态硬盘的随机写入和擦除操作过于频繁,最终导致读取速度变得极慢,而开启了SuperFetch和其它预取技术后,性能明显回升。

这则问答的回复时间是 2016 年。


这则问答的内容和下面这篇发表于 2010 年 10 月的帖子里的陈述很接近:

https://forum.51nb.com/thread-1008519-1-1.html

用了SSD的兄弟注意,不是所有Win7都默认关闭...

阅读全文>>

6293 次浏览 0 条评论 标签:无

[更新中] 跟着官方指引文档入门 Hadoop —— 官方指引节选翻译

本文由 Apache Hadoop 官方入门文档(https://hadoop.apache.org/docs/stable/index.html)节选翻译而成。

译:一年又一年

声明:谢绝任何经营性、营利性用途转载或编辑,仅允许开放式转载,但敬请保留译者署名。(行为人包括企业、个人,经营性、营利性用途包括但不限于运营平台公开账号、因流量而间接获利)

英文原文修订时间:2018-11-13;版本: 2.9.2

入门综述

本文档将向您介绍如何入门使用 Hadoop。通过从 建立单节点(Single Node Setup)出发,展示如何以单节点建立 Hadoop 安装;随后进一步介绍 建立群集(Cluster Setup) 以了解如何以多节点建立 Hadoop 安装。

Hadoop: 建立单节点集群.

目标

本章将介绍如何建立和配置单节点 Hadoop 安装,以便能快速地实现运用 Hadoop MapReduce 及 Hadoop 分布式文件系统(Hadoop Distributed File System,HDFS)执行简单操作。

运行要求

支持的平台

  • G...

阅读全文>>

3907 次浏览 0 条评论 标签:Hadoop 入门 翻译 Linux

关于 FFmpeg 合并 HLS/m3u8 流 TS 切片时出现 Non-monotonous DTS in output stream 的问题

这个问题是由 FFmepg 的缺陷导致的,至今(2019年)仍未解决。

引发问题的根源在于 HLS/m3u8 流文件列表中,存在两个相邻切片之间的 TS 包计数不连续。(TS 包计数不连续的情况,可在 直播过程中存在推流中断后重推 的 直播流/回放流列表 中出现)

对于这种情况,HLS/m3u8 流文件列表会在与前者计数不连续的文件前加上 EXT-X-DISCONTINUITY 标签来显式地告诉播放器留意。

但遗憾的是,FFmpeg 的 HLS 处理模块不支持该标签,进而导致遇到计数不连续的 TS 时,无意识地强制合并两个计数不连续的 TS,导致 Non-monotonous DTS in output stream 警告,再加上其他一些缺陷,最终导致合并后时间码不正确。


说明

本文结论由我本人在参阅了大量相关问题汇报、社区提问后得出;部分参阅的文章链接见文末。

其中,最有价值的是

阅读全文>>

14449 次浏览 1 条评论 标签:FFmpeg 解决方案 HLS m3u8 合并 ts

关于 C++ 标准文件流 fstream 对 UTF-8/Unicode 编码文件名的支持的参考文章

一年又一年 | C/C++ | 2019-06-02

参考文章:

https://stackoverflow.com/questions/30829364/open-utf8-encoded-filename-in-c-windows

https://stackoverflow.com/questions/821873/how-to-open-an-stdfstream-ofstream-or-ifstream-with-a-unicode-filename

https://stackoverflow.com/questions/6975267/c-saving-file-with-unicode-name-problem-how-to-save-utf-8-filenames-correctl


阅读全文>>

5422 次浏览 0 条评论 标签:无

对网易云音乐将云盘上传/本地播放的音乐关联匹配到曲库相应条目行为的观察

从他处下载的歌曲A,上传云盘后,匹配成曲库中对应的歌曲A条目。

将歌曲A中间几秒静音,上传云盘后,依旧能匹配成歌曲A。
查看曲库的歌曲A条目,出现云盘标记,播放听到的是做过静音处理的版本。

歌曲A,meta 信息全部被故意修改成歌曲C的,但是依旧能匹配成歌曲A,但仍可确定匹配受到了 meta 的影响,测试中发现带有错误 meta 的歌曲A的日文版,被匹配成歌曲A的英文版拉取了歌词。(错误的 meta 是英文的,但并不是歌曲A英文版的 meta)

首先播放歌曲A,匹配到了歌词。之后将歌曲A文件换成与歌曲A完全不同的歌曲B,保持路径相同文件名相同。再次播放,呈现的依旧是上次匹配到的歌曲A的歌词。

首次频谱分析拉到结果后会将匹配结果按文件路径缓存。重启可使缓存失效,重新进行频谱分析匹配。

meta 会影响频谱分析(听歌识曲)匹配结果,但 meta 对匹配结果的影响仅作用于由频谱匹配相似决定的歌曲范围之内。

换言之,在 meta 中把曲名设置成 Hop 并不能使得一首不是 Hop 的曲子匹配结果为 Hop,
而当这首曲子在匹配到一堆频谱相似的不同版本时,曲名为 Hop 会影响最终选择哪个版本作...

阅读全文>>

7240 次浏览 2 条评论 标签:无

在解决安卓 QQ 聊天记录因故乱码时,有关其加密密钥和纠错重建逻辑的新发现

※本文旨在描述笔者自己遇到的情况和一些新发现,供您作为预案参考,而非任何面向大众的方案。

现在网络上介绍安卓 QQ (手机QQ)聊天记录数据库基本情况(比如异或加密和表结构)的文章和资源已经相对很丰富了,本文就不再赘述。相关技术此前笔者也略有些了解,但没有实际复现研究细节。

直到近日,笔者因一些原因,不慎搞炸了手Q的聊天记录(历史聊天信息乱码),于是终于有机会(被迫)将这方面的技术拿出来检验是否依旧可行,并尝试用其挽回。

※ 切勿模拟复现以下描述所对应的情况,除非您知晓这其中的高风险度。数据无价,意外丢失追悔莫及。


在过程中,笔者参考历史文章公开的技术情况,基本确认了既往的技术到目前(手机 QQ 7.8)为止,依旧适用和有效,进而复现了相关操作。

由于笔者的个人情况的特殊性,在此过程中走了些苦路,不过也观察和发现了一些似乎还没有人公开发表的新技术,主要是关于安卓手机 QQ 对待聊天数据库加密密钥选取、保存和异常重建的一些基本逻辑和现象。大纲如下:


聊天数据库异或加密存在密钥文件 —— 一般情况下密钥为 IMEI 已经不是什么新闻,但因为密钥文件(手机QQ应用数据目录/f...

阅读全文>>

易语言组件字体属性的陷阱

一年又一年 | 易语言 | 2019-02-25

陷阱 1:

当你在易语言 IDE 的窗口属性栏里对组件设置字体字号时:

你选择了一款字体,字体大小为 9 号。

❌ 你以为易语言会做的事情:

  • 存字号,也就是存数字 9.

✔ 易语言实际做的事情:

  • 按照当前的 DC_DPI[1],计算并存这个字号所对应的逻辑大小[2],9 号在 96 DPI 下的逻辑大小是 -12 (0xfffffff4),在 101 DPI 下的逻辑大小 -13 (0xfffffff3).

[1] DC_DPI 指:对屏幕 DC 取 GetDeviceCaps 得到的 LOGPIXELSX/LOGPIXELSY[3].
[2] 逻辑大小的计算方式是 -MulDiv(fontSize, DC_DPI, 72),MulDiv(a, b, c) 等价于 四舍五入(a*b/c).
[3] 通常该值为 96,但笔者的桌面环境设置了自定义缩放,缩放比例是 105%,因为这个比例较小,Windows 不会对不支持 DPI 缩放的程序强行拉伸缩放,而是通过类似调整屏幕 DC 的 DPI 到 96*缩放系数(96*105%=101,即对应的 DPI 为 ...

阅读全文>>

3404 次浏览 1 条评论 标签:无
Ɣ回顶部