用 launchd 实现 on-demand 的 SSH tunnel

VNC 是 telecommute 的好方法。我经常 VNC 到实验室的机器和虚拟机上,使用装在上面的 MATLAB 和 Vivado。众所周知要把一个 VNC 服务器配的安全(证书认证 + 端到端加密)是个比较精细的活,所以最省力最安心的方法实际上是让 VNC server bind 到 localhost,然后用 SSH local forwarding 之类的方法连过去。所以一直以来我都是两步,第一步起 SSH local forwarding

讲一讲备份

前几天的 WannaCry 勒索软件给很多 PC 用户都留下了深刻印象,在国内重灾区是教育网。对于没有备份习惯的用户,就是要么交钱,要么放弃数据的选择。但对于有良好备份习惯的用户,被攻击的后果顶多也就是重装下系统。这次攻击(hopefully)给大部分普通用户形象地展示了备份的重要性。事实上,备份的好处远不止防备这种 ransomware。从计算机被盗、手残误删,到硬件故障乃至自然灾害,良好的备份习惯都是有效的保险手段。 Rule of Thumb: The 3-2-1 Principle 什么算是良好的备份习惯?United States Computer Emergency Readiness

制作 Kindle 电子书

在看一般的书的时候,Kindle 相比纸质书有压倒性的优势。之前我一直误认为 Amazon 对 Kindle 电子书的制作并不提供官方的公开支持,而是选择和大出版商合作。事实上,Kindle 电子书的文件格式相当开放,Amazon 也提供制作需要的工具链,而且用起来也非常方便。 1. 准备源文件和工具 源文件方面,只需要准备文本和插图就可以。如果书的内容比较复杂,可能还会有视频、声音等素材。 工具方面,Amazon 提供了 kindlegen,用它就可以把源文件打包成 Kindle 可用的格式。kindlegen 可以在 Amazon 的对应页面下载。

从 Gmail 切换到 FastMail

一月初,我把主要邮箱从 Gmail 切换到了 FastMail。下面是切换的原因、过程和一个半月的使用体验。 tl;dr FastMail 作为邮件服务商,注重用户隐私,商业模式可靠。对邮件协议的支持注重标准规范,可以托管域,另外在 iOS 原生 Mail 上支持推送,十分值得推荐。 切换原因 我几乎不换邮箱,到现在一共也就这四个: 03 年注册的 Hotmail、09 年注册的 Gmail、学校邮箱和刚开始用的 FastMail。从

自制 Homekit “智能家居”设备

整个尝试起源于我想躺在床上看纸质轻小说:开学前在 Kindle 里放了 6 本,然后又跑到朝阳门买了 5 本纸质的,结果 Kindle 里的两周就看完了,纸质的到现在才看了 1/6 本。问题被归结到床上照明不好,看纸质书比较累,于是我决定在床边装个 24 小时可以亮的灯。 现有的设备有床底下的蓄电池、Beaglebone、一个宜家的 USB 小灯(没开关)。我最初的想法是把小灯接到 Beaglebone 上,Beaglebone 本身就接着蓄电池以保证 24

控制 Beaglebone Black 的 USB 电源输出

每次我在寝室想躺床上看看书,都会因为床上太暗而很难受,最终只好戴个头灯看。事实上我有一个宜家买来的 USB 小灯,亮度还不错,本来打算夹在床边当床头灯,只可惜它没有开关,所以用起来有些麻烦。 最近在寝室放了块 Beaglebone Black 用来把寝室和实验室用 VPN 连起来,刚才灵机一动,想到说不定可以通过控制 Beaglebone Black 的 USB 电源输出来开关灯,这样灯就可以一直插在 Beaglebone 上,然后用软件方法开关,可以衍生出各种玩法,岂不美哉!于是稍稍查询,发现确实可行,方法在这里记录如下。 Linux

PKU ITS 网关的新 API

计算中心在上学期启用了一套新的网关 API,用来实现“断开指定连接”之类的功能。新的 API 用在了新版的网关客户端上。 不像 5428 端口的那个,这个新 API 强制 HTTPS,所以给反向稍稍带来了一点麻烦。我在 iPhone 上进行了 MitM 攻击截取通信,摸清了这套 API。下面是一个简单的文档。我没有测试“断开全部连接”功能,也还没有仔细检验文档的正确性。 可以看出,ITS 的新 API 对编程不是很友好,

升级运行在 docker 中的 ghost 站点

我的 Vultr VPS 中的所有应用全部放在 docker 里跑,一开始选择这种方法考虑的就是降低维护成本。最近把这个站点的 ghost 从 0.7 升级到 0.9,也确实地感觉到容器化减轻了我维护站点的工作量。 下面是升级的简单流程,作为备忘。如果你想参考这个流程操作,请务先必看完全文再三确认,以免丢失数据。 首先,要停下原来的 container。container name 是 blog。 docker stop blog 站点的数据我了用独立的 data

Veertu: macOS 下的 Native Virtualization

虽然没有在笔记本上跑 Windows 的需求,但我还是会装一个虚拟机。事实上,虚拟化的好处远远不止“在 Mac 上跑 Windows 程序“那么简单。 就我而言,当要完成的工作会对系统产生未知的操作(比如执行一个需要 root 的脚本)时,我喜欢在一个新建的虚拟机里进行,然后事情做好连虚拟机一起删掉。这样可以保证 host 系统的安全,把系统维护成本降到最低。 我之前一直用 Parallels Desktop。这个虚拟机一度被称为 Mac 上的黑科技,因为它的性能确实非常好,而且有不少方便的功能,我试用半小时后马上就购买了,

坐市郊铁路 S2 线去八达岭玩

由于贵校丧心病狂地连续停电 19、20 号两晚,正好 20 号本学期所有考试就结束了,所以确定没事后,开始计划 20 号考完下午坐市郊铁路S2线去八达岭或延庆住一晚,第二天回来。和 Jueast 一说后,他也同去。 市郊铁路 S2 线是在 08 年北京奥运会之前开通的,那时的主要功能是运载来看奥运的游客去爬八达岭长城,无论坐几站,统一票价 ¥16 。在奥运会结束后,这条线路沦为运椅子专线。在客流不断减少的情况下,北京市政府和北京铁路局签订协议,以 GPPS 即 Government

提醒自己经常更新Archlinux

刚刚在Cubieboard上装好Archlinux。知乎上有些人说滚动更新的发行版,太久不更新就容易“滚坏”。我可不希望哪次更新后就再也boot不了了。所以想找个方法保证更新频率。 首先想到的当然是搞一个cron job定时自动更新。但是这种做法是被强烈反对的,因为若在更新时产生了.pacnew和.pacsave文件,而又没人处理,是非常危险的。比如,某次更新把/boot目录下的boot.scr改了,那U-Boot就可能无法成功引导,也就进不了系统了。另外,重大更新前最好看看Arch的首页新闻,看看有没有坑。 反正,无人值守的自动更新是被strongly discouraged的。如果有需要,可以在pacman -Syu的时候多pass进一个-w表示只下载不更新,这样至少可以省掉用户等待下载的时间。但实际处理还是有人工介入比较好。 如果无法自动更新,那就只好想办法避免自己忘记了。

把图片直接写入Framebuffer

Linux frame buffer 是 Linux 对显示设备的一种抽象,它就像内存空间和显示设备每个像素的一一映射。修改这个设备文件的内容时,显卡会把这个修改反映到屏幕上,这样就修改了屏幕上的显示。 使用窗口管理器的现代 Linux 发行版上,直接与 frame buffer 进行 I/O 很可能会失败。所以往往在嵌入式设备上会比较有用,可以不依赖窗口管理,创建带显示功能的程序。事实上,在程序里把 frame buffer 的设备文件 mmap 一下,就可以很方便地控制显示。如果需要稍稍复杂的图形处理,还有

受限环境下通过串口传送二进制文件

最近要在学校开放日做一个实验室项目的 Demo ,需要在嵌入式板子 Cubieboard 2 上跑一个小程序。板子上跑的 Linux Kernel 和 Root FS 都是我自己裁剪并用 Buildroot 提供的交叉编译工具链编译的。其中,无比精简的 Root FS 压缩后和 Kernel uImage 链接在一起,启动时直接作为 RAM Disk 挂载为 Root 文件系统。板子和我 Mac 的唯二连接:一根电源线和一个串口。

使用 Yubikey 放置 OpenPGP 密钥

我使用OpenPGP进行简单的文件加密和git tag、commit签名有一段时间了,一直以来私钥都是和整个钥匙链一起放在本地Mac上。至于Yubikey,它刚支持U2F的时候我就听说了,但一直觉得应用面太窄而没有买。前几天偶尔看到他们网站上说推出了Yubikey 4,支持4096位OpenPGP密钥,感觉有点用,于是果断购入。 对重要文件加密的好处不用多说,我个人习惯把已经完成的项目资料tar之后加密,传到Onedrive之类的地方。git tag和commit的signing有助于保证代码完整性和防伪,而且这个功能前几天刚被GitHub支持。所以搞个自己的OpenPGP Key好处多多。但像这些RSA体系最脆弱的环节就是私钥的安全性。就像UNIX哲学“Whoever has physical access to the machine owns it."一样,拿到私钥和口令就可以直接以此身份签名、

配置FreeRadius和相关的证书信任链

寝室一直使用我的WNDR4300给全寝室提供Wifi接入。昨晚我突然想利用一下DD-WRT上自带的FreeRadius,然后用WPA2 Enterprise,然后给每个人一组用户名密码以便于管理。下面是配置过程和遇到并解决了的问题。 首先打开FreeRadius。DD-WRT给的配置界面比较傻瓜,看着配置就行。首先填写用于RADIUS服务器的证书,然后Generate Cert,路由器就会给自己签发一个证书。之后,Client里添加上要使用这个RADIUS服务器的主机的地址(其实也就是hocalhost),User里创建一下帐户就行。 之后,进到无线安全页面,认证模式选WPA2 Enterprise,加密算法务必选AES,鉴权服务器地址就填FreeRadius运行的主机的地址(其实也是localhost),Passphrase填刚才创建Client的时候写的那个。之后,就能正常运行了。 如果认为这样就能把WPA2 Enterprise无缝部署到所有设备上,那就大错特错了!事实上,昨晚搞定上述步骤之后,不同的设备上出现了不同的问题。

在Linux上从源码安装和使用C库

为了准备超算竞赛,我被分配在实验室的cluster上跑通RNA序列构建工具Trinity(SC15 SCC题目)。虽然cluster跑的是CentOS,但是可惜我没有root权限,所以在解决各种依赖时稍稍花了点功夫,所有依赖都必须从源码编译,而且要自行配置。 由于无法修改/usr/lib,所以我只好把要用到的库全部装在自己的用户目录下。在make install或configure时,加上--prefix=$HOME就可以做到。如此一来,我的用户目录下有了lib/,include/,bin/,man/,share/。第一个存放库的ELF文件,第二个存放头文件,后面三个和Linux根目录下这些目录的作用一样。 由于库没有安装在“标准”位置,所以gcc和ld一般来说会报错表示找不到文件。设置这些环境变量可以解决:$CPATH=$HOME/

用于分析序列随机程度的Linux程序ent

这是我写混沌与分形论文用到的程序,输入二进制流,以字节为单位分析,计算卡方分布、单位字节信息熵、蒙特卡洛法求pi值、算数平均值和序列相关系数。同时也会给出完美随机序列应有的值,于是可以比较一下自己生成的随机序列好不好。 由于需要喂给ent的是二进制流,而且ent以字节为单位分析,所以在输出之前可以做一个到[0, 255]的映射,存在unsigned char类型中,然后用fwrite()写入到stdout(这样出来的是二进制),然后用UNIX管道导入ent中。 使用起来非常方便,不用自己折腾,缺点是输入信息限制比较大,只能按照字节或者比特输入。

我的 TeX 上手环境(BasicTeX)

最近为了写“自然科学中的混沌与分形”课程论文,决定学习一下TeX。首先需要配置TeX环境。 我的系统是OS X 10.11.3 beta,在StackOverflow上搜到不少Mac配TeX环境的教程,知乎上也有一些,大都推荐了MacTeX。它是一个2GB+的.pkg安装包,按介绍说包括了一般用得到用不到的所有相关文件,还带了图形界面编辑器。但是我比较想要从头自定义一个环境,这样用起来比较顺手还不臃肿,所以转而选择BasicTeX。它是一个最小化的TeX Live Destribution,装好大约300MB大小。这篇回答我感觉写的不错,讲到了装好BasicTex之后需要干的事。我的配置流程大致就是按照它的思路做的。 事实上安装完TeX Live之后,只需要找个编辑器就行。其实比如vim、

libpagure 进入 Fedora Package Repository 了

libpagure是我暑假参加GSoC时新建的项目。起因非常简单,我写的GSoC项目需要大量调用Pagure的API,所以就跟创建者Pierre联系,开了libpagure这个坑。Pagure的API不多,所以我花了一晚上用简单的OOP封装了一下就完成了。完成之后基本就没再动过,后来和Pierre邮件里说起要写一组单元测试,因为开学马上就很忙所以也一直没填这坑。 月初忽然收到Chowdhury发来的邮件,说给libpagure提交了一个Pull Request但我一直没回复,才发现确实有个PR放着一周没处理。邮件里说他做一个项目用到Pagure,也要用到libpagure,顿时又开心又害怕,开心觉得自己的项目被人用上了,害怕觉得自己花一晚上写的代码肯定有不少问题。处理完之后Pierre回邮件问我是不是很忙,有没有空管理这个项目,如果没空的话愿意帮我一起管。我马上把他加进Repository Admin,回邮件时候顺便赞扬了下这学期占用我不少时间的ICS课。 这两天忽然想起这件事,google了一下,看到Redhat的bugzilla里有人讨论libpagure的bug,才发现Pierre他们已经打包好libpagure发布到Fedora Package Repository。看来寒假还是要把这个坑好好地填好,不然Fedora用户装上之后出一堆bug就太不好了