macOS Firefox Emoji 输入框召唤不出来
这个问题最常体验到的异常是,在 Firefox 里按 control + command + space (空格) 无法调出 Emoji 表情符号输入框。
直接原因是 Firefox 的“编辑”菜单里缺失了“表情与符号”(以及“听写”)这两个系统菜单项目。
省流:当 Firefox 原生语言不是系统语言,而是用了语言包切换语言时发生。如果系统语言是 zh-cn,就需要下载一个原生语言为 zh-cn 的 Firefox,如果下载原生为其他语言(如 en-US)的 Firefox,再到首选项里下载语言包切换语言,就会发生这个问题。
相关讨论:https://bugzilla.mozilla.org/show_bug.cgi?id=1478347
不打补丁的火星 Windows 7,安装 .net 4.X 失败,时间戳签名和/或证书无法验证或已损坏
我有一台 Windows 7 的虚拟机,不用想,没有打过安全补丁,是一个火星 Windows 7。今天找出来测试软件,要装 .net 4.7 运行库,本来跃跃欲试了,结果进度条走一半安装失败,原因如题。错误代码:0x80096005。对应英文版应该是:The timestamp signature and/or certificate could not be verified or is malformed.
懂技术的朋友应该能明白其中的缘由,是系统由于没有打过安全补丁,内置的信任根证书列表太旧失效了,无法验证、信任微软自家用新证书签名的 msi 安装程序(主要是时间戳证书无法验证可信),导致微软“我杀我自己”阻止了安装。为了安全嘛,验证系统库安装程序签名并阻断不信任的情况,应该的应该的,道理我都懂。但我理解现在的这个局面的症结,真想让 Windows 无视证书错误继续安装,但可惜 Windows 是个程序,不是工程师,无法和他交流表明技术意图让他给我变通变通。
解决方法:
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 ...
探究 kirikiri 引擎的存档文件 .ksd / .kdt 内容格式(解析)和存档机制
引言
零知识背景:
笔者观察到一些基于 kirikiri 引擎的游戏的存档文件为 datasc.ksd
和 datasu.ksd
,检阅其内容,发现它们是二进制文件,文件头特征为 FE FE 02 FF FE
。
出于对 krkr 存档内容的好奇,笔者想了解存档文件 .ksd
的文件格式和语义,解析 krkr 存档内容。
krkr2 官方文档之文件说明章节提及,*.ksd
、*.kdt
文件是 "KAGのセーブデータ" (KAG save data) 即 KAG(krkr) 存档数据。
游戏程序对 .ksd / .kdt 存档文件的读写
查阅 kirikiri 引擎(具体版本是 krkr2)源...
中文及亚洲语言在线字体按需加载方案:Dynamic subsetting
上网冲浪时注意到一个设计讲究的中文站点使用了在线中文字体来呈现内容(虽然它拉取的是很朴素的知名开源字体(思源/Noto 系列)而非其他商业设计字体,但效果确实不错)。这个网站的文字内容是从他处动态拉取的,这一点与某些静态商品宣传页不同,后者的文案内容是固定的,在设计阶段就大可把用到的字单独抽取出来准备好;而从网络请求观察发现,这个网站的字体是前端运行时由 js 按需加载的,用到了哪些字才拉取对应的字形(这是理想情况),断断续续加载了数个 400+KB 的数据分片。这个站点使用的在线字体来自 use.typekit.net,可知该在线字体服务提供商为现在已经改名为 Adobe Fonts 的 Typekit。(尽管如此,以下仍称其 Typekit)
众所周知,包括中文在内的亚洲语言(如 CJK)字体体积庞大,完整地在线加载有很多方面的困难。因此这次注意到有网站接入了中文(亚洲)在线字体按需加载技术,我很感兴趣。虽然这项技术应该已经诞生挺长时间了,但是它似乎始终未能铺开应用,甚至毫无存在感,何以见得呢?——到了 2020 年我才意识到这项技术的存在,而且在(中文)搜索引擎中几...
在当前路径打开管理员 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 程序时如何去除额外的调试符号信息。
读者如果想进...
关于 Win10 UWP 邮件应用代理设置
本文假定您已经知道 UWP 应用需要解除回环访问(Loopback)网络隔离从而支持本地代理。
如果您不是很了解该内容,请查看 EnableLoopback Utility – 让 UWP 应用也能使用系统代理[Windows]
如果只将 邮件和日历
添加到 Loopback 限制排除名单,在邮件应用内添加其他账户/邮箱的 SSO 登录页面仍无法使用代理。可能提示:
当前无法连接到你所需的服务。请检查网络连接或稍后重试。
经过排查,还需要放行名称开头为 microsoft.windows.authhost
的几个应用才能使得 SSO 登录也支持代理。(其实只是其中的某一个放行就可以了,但是如果懒得测试,就全部放行)
以 AppContainer Loopback Exemption Utility 为例,示意图:
在 EnableLoopback Utility 中放行 microsoft.windows.authhost.*
手机 QQ 聊天记录迁移“准备数据”时无提示且速率为 0KB/s
安卓手机 QQ 在 8.2 版本附近引入聊天记录迁移功能并开放内测。当时笔者很感慨这个功能终于做掉了。之前帮别人迁移数据的时候,无法在非 Root 状态下(使用同一手机厂商品牌的数据迁移软件归属于 Root 状态下)迁移 QQ 聊天数据,感到挺遗憾的。
该功能首次亮相的几个月后,在机缘巧合之下,笔者正好有了一次体验这一功能的机会。笔者进行功能体验时所使用的版本为 Android 手机 QQ 8.2.6 (正式版),发布于 2020-01-03,为时下的最新版本。
迁移前的授权逻辑
授权逻辑和微信聊天数据迁移有类似之处。以从“旧设备”迁移数据到“新设备”为例,从旧设备登录账号,进入 设置—通用—聊天记录备份与迁移—迁移聊天记录到另一台设备
,在旧设备上勾选要迁移聊天记录的联系人/群,确定后旧设备会生成一个二维码,要求新设备和旧设备接入同一局域网后,使用新设备登录账号,并扫描该二维码。扫描二维码成功后,新设备和旧设备建立连接,数据就开始传输了。这个授权逻辑和微信基本一致。
UI 提示问题:“准备数据”时无提示且速率为 0KB/s
接下来,手Q的逻辑和微信略有不同。
...
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
...
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都默认关闭...
[更新中] 跟着官方指引文档入门 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...
关于 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 警告,再加上其他一些缺陷,最终导致合并后时间码不正确。
说明
本文结论由我本人在参阅了大量相关问题汇报、社区提问后得出;部分参阅的文章链接见文末。
其中,最有价值的是
- FFmpeg 的 bugtrack ticket #5419:https://trac.ffmpeg.org/ticket/5419
- 名为 user2286522 的用户在...