为不支持自定义字体的Electron应用替换宋体

现在有越来越多的应用开始基于 Electron 技术构建,如 Discord、Microsoft Teams,但是由于历史遗留原因,Chromium 在近期才将中文系统下网页默认字体切换为从系统中读取,之前的版本一直是使用宋体作为默认字体的,因此很多国外产品的中文字体显示都十分不理想。

其中一些软件可能不再更新,或更新周期很长,也可能开发人员拒绝为 CJK 用户做特殊优化,鉴于忍是不可能忍的,那就自己动手解决吧。

警告: 使用以下方式来替换应用的字体为系统字体将会破坏应用的数字签名,可能导致包括但不限于性能下降、安全软件误删、应用崩溃、更新失败、无法启动的问题。

前言

这个问题已经不是第一次被提出了,很多其他应用也有类似的问题,比如使用 QT 的 Telegram 客户端以及一些其他公司基于 WinForm 平台开发的应用。

之前较流行的方式有注册表替换、注入 DLL 替换等,但是如果使用前者直接替换宋体为微软雅黑,将会有很多应用的界面布局错乱以及文字无法显示,而后者仅限于 Telegram 客户端。

这两种不对应用本身做修改的方式都不适合我们当前遇到的场景:需要修改字体的应用是一个浏览器。

继续阅读为不支持自定义字体的Electron应用替换宋体

为Debian 10升级Linux Kernel 5.x

目前 Debian 10 自带的内核版本为 4.19,可能由于种种原因...比如不升级手痒,十分希望体验一下新版内核,这篇文章可以指导你如何正确的查询并安装新版内核。
以下方法同时也适用于未来以及先前的 Debian 版本,步骤一致,唯一的区别是将文中的 buster-backports 中的代号更换为你正在使用的系统的代号。

开始

首先来到 Debian Backports 网站查询当前版本是否已经提供 Backports 支持,如果是刚刚发布的版本这里可能没有哦...
也可以访问 Debian Package List 选择 buster-backports 查看可用的软件包列表。

如果要升级内核,可以在 Debian Package List 页面找到 Kernel 分类并进入对应的页面,并使用浏览器搜索 linux-image 来查看可用的内核版本。
但是要注意,linux-image-5.2.0-0.bpo.2-amd64 这种并不是我们想要安装的软件包,如果安装了这种特定版本的软件包会导致未来 Backports 中有新版本发布时系统仍然停留在已安装的特定版本内核,不会自动更新。

那么如何找到适合自己的设备呢?以下提供一些例子:

继续阅读为Debian 10升级Linux Kernel 5.x

使用S3 Glacier备份Amazon LightSail 实例

Amazon LightSail 是 EC2 的廉价和精简版,相比 EC2 拥有更低的价格,更简单的使用流程,但也增加了一些限制,例如无法在 EC2 控制台中操作 LightSail 实例。

LightSail 目前 2019-02-07 对于实例快照的定价是 0.05$/GB,快照似乎是通过直接将虚拟机磁盘镜像压缩保存的方式实现的,这将会导致实际快照计费大小大于文件系统内实际文件大小。
一般普通用户并不需要频繁的创建和恢复快照,只是偶尔创建一份备用,所以 LightSail 自带的快照功能也是一笔不小的开销,甚至超过了低配实例一般的价格,这种情况可以尝试自行备份实例硬盘并传输至 S3 使用 Glacier 存储保存。Glacier 的优点是价格十分低廉,缺点是不能随时读取且最低存储(起步价)90天,并且取出数据操作需要收费。具体价格可以参考 AWS S3 Glacier 定价

AWS 为 Glacier 提供了一定的免费额度,假设 S3 Bucket 与 LightSail 实例在同一区域,经过 gzip 压缩后的镜像小于 10GB,并且每个月最多只尝试一次恢复操作,那么月存储成本 <= 0.5$

使用条件

本文将以 Debian 9 为例,使用 e2image、tar、s3fs 三种工具以及一个额外挂载到实例的硬盘创建并存储备份。

继续阅读使用S3 Glacier备份Amazon LightSail 实例

Scaleway ARM 独立服务器测试

配置与价格

文章中使用的是 Scaleway 的 C1 ARM 独立服务器,每月€2.99,仅在巴黎 PAR1 区可用。

具体配置为:

CPU: 4核心 ARMv7 (Marvell Armada 370, 32 Bit)
内存: 2GB
硬盘: 50GB
带宽: 200Mbps 性能测试:

性能测试

硬盘测试

root@baremetal:~# dd if=/dev/zero of=./test.bin bs=1M count=1024 conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 10.195 s, 105 MB/s
继续阅读Scaleway ARM 独立服务器测试

在Windows 10中访问玩客云Samba共享

玩客云中的 Samba 使用的是 Samba 1.0(CIFS) 协议,而微软已经在 Windows 10 Version 1709 及以上中默认关闭了这个老旧且不安全的协议,从旧版本系统升级到新版的用户可能会收到 0x80070035 的提示,无法访问玩客云的共享目录。

同时由于一些不可描述的...Bug?开启密码访问后,在 "网络" 中访问玩客云设备时会收到 0x80004005 的提示,其他版本系统遇到同样错误时也可以尝试参考修复。

继续阅读在Windows 10中访问玩客云Samba共享

在PowerShell中使用Git创建Patch

Emmm...

如果你是一个经常在多台机器之间切换写代码,又不愿意将乱七八糟还没有整理好的代码推送到仓库中的人,并且还在使用 Windows,那么你可能需要这篇文章。

由于一些众所周知的编码问题,直接在 PowerShell 中使用 git diff | Out-File changes.patch 会导致 Patch 中的中文和特殊符号乱码,并且 Patch 文件的编码是 UCS-2,不方便直接在其他应用中使用。

继续阅读在PowerShell中使用Git创建Patch

使用CoreRT编译C#项目为机器码

关于 CoreRT :

CoreRT 是一个可以将 CIL(MSIL) 中间码编译为机器码 (例如 X64, X86, ARM 架构) 的工具链,CoreRT 默认使用 RyuJIT 作为编译器(AOT),它也是 .NET Core 的默认 JIT 编译器,除了可以将代码编译为机器码可以无需运行库直接分发以外,还带来了一定的性能提升。

CoreRT 目前 (2018年8月) 仍处于 Alpha 阶段,请酌情使用。

准备工作:

要尝试 CoreRT,需要安装 .NET Core SDK,请访问 官方下载页面 根据介绍下载并安装,本文编写时已在 Windows 10 和 Ubuntu 18.04 上测试。

为了减少外部因素带来影响的概率,将使用 .NET Core CLI 默认的 Hello World 作为演示。 继续阅读使用CoreRT编译C#项目为机器码

使用PowerShell Profile快速设置 HTTP 代理

因为...

Windows 系统本身可以通过系统设置来HTTP代理,但是由于应用的编写方式不同,有的来自 Unix/Linux,有的是跨平台应用,有的是 PowerShell 脚本,在设计时没有专门编写读取 Windows 系统内的代理设置的代码,就需要手动设置环境变量来为应用设置代理。

由于应用读取代理的方式各不相同,例如环境变量 http_proxy, https_proxy, 或是大写的 HTTP_PROXY 或是 HTTPS_PROXY,也可能是调用 Windows 系统中设置的代理,还有的 PowerShell 脚本是读取 [Net.WebRequest]::DefaultWebProxy ,每次设置和取消都需要执行 N 条命令和多次点击操作,设置起来非常麻烦,所以查了下资料写了一段脚本,方便在 PowerShell 中快速设置 HTTP 代理。

这个脚本支持为通过上述方式获取代理设置的应用快速设置代理,也可以同时将设置应用到系统中。

继续阅读使用PowerShell Profile快速设置 HTTP 代理

解决Windows 10中Surface Pro的电源选项滑块丢失

在安装了 Windows 10 的 Surface 上,电源选项中除了以往常见的 "节能"、"平衡"、"高性能" 模式以外,在电量信息界面还可以通过滑块调整设备的电源选项,从最长续航到最高性能最多有 4 个级别可供选择。
这个滑块在某些情况下可能会消失,例如第三方软件更改了电源模式设置,但点击任务栏底部的电池图标后除了滑块消失以外没有明显的特征表明出现了什么问题。
通过搜索,类似的提问在微软中文社区中没有找到可靠的答复,于是搜索了微软英文社区,得到以下解决方案:

  1. 右键单击任务栏中的电源图标,选择 "电源选项"
  2. 在弹出的界面中展开 "隐藏的附加计划"
  3. 选择 "平衡(推荐)"

完成以上的步骤之后电源选项应该会立刻出现在电量信息的界面中

WebPack / Gulp / Babel 是什么?

What the hell is WebPack / Gulp / Babel?

在 2017 年,提到 WebpackGulp 或是 Babel 大多数前端应该都很熟悉了,至少应该听过它们,这篇文章试图用最简单的方式为初学者和会用但是还不理解的人讲解这些工具的作用和使用场景。

文章的每一部分都使用了 入门成本 它是什么 使用场景 大致原理 来帮助你理解这些工具,以便更好地选择使用哪一个来进行工作。

Gulp

入门成本

★☆☆☆☆ - 非常低

任何人都可以使用它,即便你是一个新手,也可以仅通过几行代码做许多事

它是什么?

Gulp 是一个 任务/工作流 自动化工具,简单的说,就是可以将一些需要反复进行多次的工作作为脚本来自动完成。

使用场景

  • 项目可能较小
  • 代码需要编译后才能运行在浏览器之中
  • 希望在代码修改时浏览器窗口中能实时预览变更
  • 代码处理以外的工作,例如自动按 Major.Minor.Patch 的方式变更版本号,或上传到指定服务器

工作原理

启动用户选择的任务 > 根据事先定义的规则寻找要处理的文件 > 传送文件内容到插件 (Plugin) 或自己的方法中进行修改 > 重复上一步直到任务中的工作完成 > 根据事先定义的规则将文件写入目标位置

WebPack

继续阅读WebPack / Gulp / Babel 是什么?