Echo's Blog

我把桃花切两斤,且与时光炖了。

打造基于 ShadowSocks + ProxyChains 的全栈式科学上网工具

最近不知道为什么,蓝灯(Lantern)用着经常出问题,要么非常慢,要么报错。 说实话 Lantern 正常的时候,真是要比我放在东京的 SS (ShadowSocks) VPS 快出很多的。看片一点都不费劲。 没办法之下,我切换回了 SS。还好我之前配置的 SS 直接可以拿来用,自动更新脚本也一直运行着。在这里记录一下我之前 Mac 配置 SS 等相关翻墙工具的过程。 你可能会疑惑,...

Bash 风格指南中文版

今天下午整理了一下自己 GitHub 的 starred project,正巧看到以前收藏的一篇 Bash Style Guide, 闲来无事,就给翻译了。 这篇文章很好,他基于的那篇 Wiki 也非常值得看,我阅读之后,确实感到有一些东西是自己曾经忽视了的。 下面是我翻译的文章,如发现错误,还望及时告知。 Bash 风格指南 本风格指南旨在描述如何编写 bash 脚本,并使其安全和...

如何在 Mac 上管理你经常变化的服务器列表?

相比传统运维「日久不变」的服务器运维,步入云时代之后,虚拟机创建和销毁频率比之前不知高了多少个量级,原本几年前想象中的可以根据日常负载自动添加机器什么的,已经完全变成了现实。现在想要找几台机器搭个小架构测试点什么东西,也不必像从前那样拉网线改 BIOS 装系统初始化一忙一上午了。 所以,如果工程师们还是按照原有的传统运维理念去进行运维,基本上就是嫌自己不够忙作死了。 虽然我非常认同云时代...

谁离开了,谁还在?

今天想联系某个同事时,没找到他的电话,忽然发现我已经很久没有更新单位的通讯录了。 于是,下午不忙的时候,找出来以前写的导出单位通讯录的程序,从 OA 上下载了目前最新的通讯录。 在与自己的通讯录合并之前,突然想到,很久没用过了,还是比较一下差异吧。 随着键盘几个简单的敲击,屏幕中突然出现了一大片或熟悉、或陌生的名字…… 我在 2012 年 9 月加入这家单位。 我还记得在上一家...

「提问的智慧」读书笔记

本来我是想放图片上来的,可是太大了……

周末休假在家,重读了「提问的智慧」,并按照自己的理解重新梳理了一下导图的结构。 本来我是想放图片上来的,可是即使压缩完,也太大了…… 你可以访问这里阅读 PDF 版本。

How to run a script after network interface up

顺便还有怎么不登录系统就能看到 ip 地址

我懒,我喜欢让自己的工作环境变得轻松,喜欢 Automate Everything 。 今天在用 Vmware Fusion 测东西的时候,我就发现我虽然在虚机模板上做了各种优化,但是每次新创建一个链接克隆的时候,我居然还要在 Fusion 中进入虚机,登录,敲个ip a看一下 ip 地址,再 ⌃ + ⌘ 退出虚机,然后才能在 iTerm 中 ssh 这个虚机,这让大处女座怎么忍(其实我是...

服务器操作系统应该选择 RHEL/CentOS 还是 Debian/Ubuntu ?

知乎相关问题总结

我第一个接触过的 Linux 是 Fedora Core 4。当时读大一,刚买了电脑,在软件店逛的时候看到了它。当时只是觉得 68 元买一盒正版软件,里面7、8张光盘真是太值了…… 我用了整整一天,按照说明书的小册子终于把它成功装在电脑上。我很开心的玩了几天,然后就把它删了,因为它自带的小游戏太无聊…… 再之后过了大概半年,我忘了究竟是什么原因,可能是上课老师提到这玩意多牛X,也可能...

看看自己平时上网都在干嘛?

分析自己的 Safari 历史记录

昨天在知乎逛,看到一个问题可以用 Python 编程语言做哪些神奇好玩的事情?,其中有一个人写了一个脚本统计自己 chrome 浏览记录的 Top 10,我就在想,诶,这个好玩好玩好玩,我也想看看我平时都看嘛了,虽然心中早有猜测,也看看实际情况跟自己心中所想是不是一样。 于是查了一下,Safari 的历史记录文件是~/Library/Safari/History.db,file 了一下这个...

搜索 rubygems 并安装的 Alfred Workflow

有时候,我会打开 rubygems.org 去搜一个 gem 包。 一般是打开它的 GitHub 主页去查看文档,或是其他一些信息,也有的时候去搜索相关的 gem 进行安装使用。 但是对于懒人来说,还是 Alfred 好用呀,所以十一放假穷极无聊的时候我写了一个 Workflow 用于搜索和安装 gem 。 使用方法: 使用 gem 关键字,后接 gem 名进行搜索。待列表出来后,可选...

Ruby 强制解构

今天在写 Rakefile 的时候,突然想起之前看过 Ruby 的一个小技巧。 我们经常使用 |x,y| 的形式在 block 中对传参的数组进行解构,那么在类似 reduce 的方法中,也可以使用 () 强制对参数进行解构。 例如: [2] pry(main)> a = [['foo1','bar1'],['foo2','bar2']] => [["foo1", "bar...