ziheng's Blog

zihengCat is here!

macOS 长按连续输入的简单设置方法

Simple Ways to Set macOS Consecutive Input

前言自OS X Lion 10.7以来,苹果对OS X系统自带输入法做出了许多更新与调整,这些改动大多延续至后续版本的macOS系统。其中就包括:在使用系统自带英文输入法的情况下,长按一个元音字母,系统会自动弹出元音音标提示框。 苹果「Apple」设计此功能的初衷当然是为了提高输入便利性,优化用户输入体验。但是,这会对开发人员的日常工作(Coding)带来困扰,因为,我们不能长按连续输入字符......

实时输出流打印 - 缓冲问题与解决方案

Output Buffering in Realtime - Question and Solution

前言现代程序设计语言(尤其是动态脚本语言)的I/O库在设计时,大多会针对输出流「Output Stream」做缓冲「Buffering」机制。其目的是为了最小化「Minimize」I/O操作。众所周知,I/O操作是非常慢、非常费时的,例如:读写磁盘,访问网络,打印信息到控制台「Console」。 缓冲「Buffering」机制在执行I/O操作时,程序会在内存中开辟出一块合适的空间,用作缓存「......

Git 实用技巧 - 删除无用远程分支

前言使用Git工作流「Git Workflow」时,我们有时会遇到这样的情况:远程分支已被删除,但在本地Git仓库中仍然保留着指向改远程分支的引用「References」,我们需要手动清除这些仍留在本地的无用远程分支。 Git删除无用远程分支实际上,Git的开发者们也早已经考虑到了这样的使用场景,并提供了一枚方便的命令来帮助我们做这件事。 $ git remote prune <nam......

Linux 下使用 OpenVPN 连接远程虚拟专有网络

Install and Configure OpenVPN in Linux OS

前言VPN (Virtual Private Network) 虚拟专有网络通过在公网上创建一个专用且加密的Tunnel(网络隧道)进行通讯。在实际的应用中,VPN可以帮助远程用户、公司分支机构、商业伙伴及供应商等之间建立一个安全可信的网络连接。 图:OpenVPN LOGO OpenVPN是一款全功能的 VPN 软件,包含了客户端与服务端,它使用行业标准SSL/TLS协议实现 OSI......

关于 SSH 公钥检查

Something about SSH StrictHostKeyChecking

前言SSH 公钥检查(StrictHostKeyChecking)是 SSH 的一个重要的安全机制,可以有效防范中间人劫持等黑客攻击。但是在某些特定场景下,严格 SSH 公钥检查会破坏一些依赖 SSH 协议的自动化任务(CI Tasks),我们需要一种手段能够绕过 SSH 公钥检查。 关于SSH公钥检查(StrictHostKeyChecking)参看ssh_config说明文档,我们可以了......

持续集成(CI)系统 - 学习与实践

Continuous Integration System - Learn and Practice

前言在现代软件开发流程中,为开发项目配置一套持续集成(Continuous Integration,简称CI)系统是非常有必要的。持续集成的目的,是为了让软件产品在快速迭代的同时,还能保持高质量,减少Bug。持续集成的核心思路是:在分支代码合并到主分支之前,必须跑通自动化测试。 “Continuous Integration doesn’t get rid of bugs, but it ......

LeetCode - 561. 数组分片 I(Array Partition I)

前言本文记录LeetCode - 561. 数组分片 I(Array Partition I)问题。 问题描述给出一个含有$2n$个整型数的数组,你的任务是,将这些数分为$n$组,形如:$(a_1, b_1), (a_2, b_2), … (a_n, b_n)$,使得下式的值取到最大,并输出这个最大值。 $$ S = \sum_{i=1}^{n}\min(a_{i}, b_{i}) $$ ......

Git 实用技巧 - 区分文件名大小写

Git Practical Tips - Ignore Case

前言Git默认配置对于文件名大小写不敏感,即不区分文件名大小写。这意味着,如果我们只修改了文件名大小写(大写字母改小写或小写字母改大写),Git并不会侦测到任何改动。这一默认配置有时候会对项目开发造成影响。 Windows 系统默认不区分大小写,macOS 默认是Mac OS 扩展(日志式)磁盘格式,也不区分大小写,而 Linux 则是区分大小写的,或许是为了系统兼容性考虑,Git选择默认不......

LeetCode - 627. 交换薪水(Swap Salary)

前言本文记录LeetCode - 627. 交换薪水(Swap Salary)问题。 问题描述给出一张名为salary的SQL table(如下所示),其中,m=male,f=female。请你仅使用一条UPDATE查询语句(不建立临时表)交换f与m的值(即将所有的f都变成m,m变成f)。 比如有这样一张SQL表: | id | name | sex | salary | |----|---......

Python学习笔记 - 理解with语句

前言Python的with语句是从 Python 2.5 开始引入的一种与异常处理相关的功能。with语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的清理操作,释放资源,比如文件使用后自动关闭、线程中锁的自动获取和释放等。 基本语法with语句的基本语法格式如下所示,with后接上下文表达式(Context Expression),如果指定了as子句的话,Pyth......