2019

如何在普通网络环境下上北邮人

在学校里看剧、电影,下载破解游戏基本都靠北邮人。一方面资源比较全,另一方面是走 IPv6,不需要走计费的校园网 IPv4 流量。不过由于北邮人只支持 IPv6,而国内 IPv6 基本只有校园网有。问题来了,怎么在校外的纯 IPv4 环境下使用 IPv6 Only 的北邮人呢?

目前已经有一些运行商为家庭网络提供了 IPv6,但是北邮人这种教育网 IPv6 资源站点常常封禁了这些家庭 IPv6 网络。

IPv6
Feb 25
Shadowsocks 中继:从 IPv4 到 IPv6

最近墙又双叒叕加高了。在春节前就发现自己的 VPS 无法连接,后来发现还好只是端口被封禁,换成其他的端口就能使用了。不过这才撑了半个月新的端口访问又不太稳定了。如果再换端口,或许也可以。但是不是长久之计。不过我的 VPS 是支持 IPv6 的,一般来说,墙对于 IPv6 流量的拦截比较弱。或许可以想办法先把自己的流量转换成 IPv6 然后再出去。 Hello GFW, Goodbye GFW

Feb 21

2018

树莓派上搭建视频流服务的方法尝试

最近实验需要在树莓派上搭建一个简单的视频服务,而且,希望画质一定的情况下,消耗的带宽越少越好。关于带宽的问题,其实开始并没有考虑太多,但是在尝试用uv4l工具创建 mpeg 流的时候发现,尽管分辨率很低(720p)不到,需要的数据率却达到了大约 5MB/s。我们待测试的通信层不具备这样高的传输传输能力。因此需要想办法把数据率降下来。综上,我们需要产生一个编码后的视频流,如 H264。

Dec 26
Node.js | Dependency Injection

Dependency Injection 这个概念是我之前在实习的时候做 Java 开发的时候接触的。Dependency Injection 可以大大降低模块之间的耦合度,提高系统的可扩展性和鲁棒性,不过这个概念对于新人来说理解起来还是存在比较大的障碍。由于当时实习的时间比较短,对于这个概念我并没有吃透。这次学习 Node.js 的时候,又在 awilix 这个库里面遇到了这个概念。以此为契机就来好好学习一些 Dependency Injection 和其后的设计逻辑与方法。

下面的内容翻译自:Dependency Injection in Node.js。这篇文章浅显地介绍了 Dependency Injection 的基本理念。选择这篇文章是因为我在阅读 awilix 模块作者关于 Dependency Injection 的系列文章中时,作者在开篇提议阅读此文。

不过这篇文章毕竟是 2015 年的文章,在 js 的一些语法和模块细节上和今时今日的有些不同,但是并不妨碍我们对于其核心理念的理解。

Dec 12
Gitlab|安装-迁移-删除

GitLab 由乌克兰程序员 Dmitriy Zaporozhets 和 Valery Sizov 开发,它由 Ruby 写成。后来,一些部分用 Go 语言重写。截止 2018 年 5 月,该公司约有 290 名团队成员,以及 2000 多名开源贡献者。 GitLab 被 IBM,Sony,Jülich Research Center,NASA,Alibaba,Invincea,O’Reilly Media,Leibniz-Rechenzentrum (LRZ),CERN,SpaceX 等组织使用。

Dec 10
TCP:拥堵控制

网络数据包如果一次发送太多,就会造成网络拥堵;如果发送太少,就浪费了带宽,延长了通信时间。TCP 协议有一个拥堵窗口机制,负责动态调整每次发送数据包的数量。本文通俗地解释了这种算法的细节。

本文翻译自 Intro to Congestion Control

Dec 05
Make|自动生成依赖关系

Make 一般是在 Unix 环境下使用的自动化编译工具。他本身不是编译器,而是将众多 C/C++源文件组织起来,确定其编译方式和编译顺序的工具。一旦我们写好的 Makefile 配置文件,那么无论多么复杂的工程我们都可以用一条 make 命令来解决。事实上,尽管通常和 C/C++搭配起来使用,make 也能应用到其他的编程语言之中。

在使用 make 过程中的第一个核心问题是处理文件依赖的问题。例如:

1
2
foo.o : foo.c defs.h       # foo模块
cc -c -g foo.c

这里 foo.o 依赖于 foo.cdefs.h 。当后面两个文件发生变化时,make 会自动运行 cc -c -g foo.c 命令更新 foo.o 文件。但是,随着项目扩大。这种文件之间的依赖关系会变得非常复杂,一个小的改动可能会涉及到众多依赖关系的修改。因此有必要在项目的开始就引入自动构建依赖关系的工具链。

Dec 03
酵素

今天在朋友们的群里又看到有朋友在谈论吃酵素的事情。这让我想到了 2017 年二月,我去东京交流访问,参观了日本最大的酵素生产商之一:中原株式会社。有意思的是,这家公司虽然是日本的公司,却是中国人创立的。之所以公司的名字叫做中原,是因为创始人是郑州人。当时接待我们的人中,有一个负责做产品研发的生物博士,筑波大学毕业,也是中国人。他带我们参观了公司总部顶楼的一个小型的检测间。有一个随行的朋友很实诚地问道:“酵素这个东西到底有没有用。”那名生物学博士倒也没直接回答,而是笑着说:”大家都是学工科的,都懂“。

Nov 22
macOS绕过SIP安全机制限制的一种办法

SIP(System Security Protection)是苹果在 OSX EI Capitan 及其后版本的操作系统中引入了一种新的安全机制。望文生义就可以看出,这个安全机制是用来维持系统的完整性,保护系统免收恶意软件的篡改。具体来说,SIP 限制了 root 账户的权限范围,限制了 root 用户在对一些系统保护目录即其中文件的操作能力。但是任何对于安全性加强都意味着对灵活性的削弱

Nov 21
Shadowsocks 上手配置

Shadowsocks 配置的一个非常便利之处在于,Shadowsocks 支持将配置信息导出成二维码再在其他机器上导入。这节约了很多沟通成本。所以在开始这篇教程之前,你需要有一个 Shadowsocks 的配置信息。可以是具体参数,或者是一个配置二维码。

Nov 20
开源对象存储服务(OSS) Minio 及其在Hexo中的使用

研究对象存储服务(OSS)是因为考虑到将来可能会有在博客上放出一些可供分享的文件下载的服务需求,直接使用现有图床,容易混杂乱。因此我考虑重新建立一个独立 OSS 存储服务。直接 Google 搜到了Minio这个框架,10k+的 Star,就决定选择这个了。Minio 框架有如下几个优势:

  • 可以 Docker 部署,非常省事
  • 文档完善
  • 全面的平台支持
  • 多种客户端语言支持(有完善的 JS SDK)
Nov 16