英雄所见略同

Relying on complex tools to manage and build your system is going to hurt the end users. […] “If you try to hide the complexity of the system, you’ll end up with a more complex system”. Layers of abstraction that serve to hide internals are never a good thing. Instead, the internals should be designed in a way such that they NEED no hiding.

依赖复杂的工具来管理整个系统的结果是给最终用户带来恶化的体验。[…] “如果你尝试隐藏系统的复杂性,于是就得到一个更加复杂的系统。” 为了隐藏内部机制而设置抽象层并非良好的架构方法,而应该把内部机制设计得精良而无需隐藏。

— Aaron Griffin

在 k8s 中开一个 shell

经常需要一个远程临时的 shell 做些什么事,比如实验一下某个需要运行一晚上的脚本,用完环境就扔了。在 AWS 或者 Azure 上开一个新的 VM 总是感觉不够快捷,也不想专门浪费一个 VM 的资源为这个目的留着。

还好我有个 Kubernetes 下创建 pod 的权限,这下就方便多了。

首先创建一个 shell.yaml 来描述一个可以运行 bash shell 的 pod(容器镜像用的是官方的 bash 镜像):

apiVersion: v1
kind: Pod
metadata:
  name: shell
  labels:
    purpose: shell
spec:
  containers:
  - name: shell
    image: bash
    command: ["tail"]
    args: ["-f", "/dev/null"]
  restartPolicy: OnFailure

然后执行下面的命令来创建这个 pod:

$ kubectl apply -f shell.yaml
pod/shell created

成功之后,就可以通过下面的命令获得一个远程的 shell 环境了:

$ kubectl exec -it shell -- bash --login
shell:/#

这个新创建的环境是基于 alpine linux 的,自然什么工具都没有自带。需要什么工具,只要用 apk add 命令安装就好了。我因为工作需要一般都会安装下面这些工具:

apk add git
apk add nodejs-current
apk add npm
apk add python3

如果想从或者向这个 pod/shell 复制文件的话,用下面的命令就好了:

kubectl cp ... ...

Microsoft Tag

公司以前曾经发布过一个 Live 服务,就是可以把文字嵌入到 QR Code 里面,以方便带相机的手机可以立刻获取包含在这段文字里的信息。后来就不知道为什么没有了。两年半以后,才发现原来是有另外一种编码方式来代替,就是 Microsoft Tagimage

看来是时候把上面这个 Tag 打印到自己的 T-Shirt 上,然后满大街的闲逛了。

手机又复活了

image 总算没有枉费孜孜不倦地跟 WM 组的人纠缠的这几天,我的 HTC WIZARD 于今天下午吃晚饭的时候在关键的 CID Unlock 上有了让人意想不到的突破。当然,不敢再乱尝试新的 ROM 了,于是再次刷了一遍之前那个 build,终于恢复了老样子。而且 WM 组的人都非常热情,最后还送了一个同样的机子给我。

要记下来几个有用的连接:

  1. Wizard Service Tool – 用来 Unlock CID 的必备工具,还可以修改 IMEI
  2. 所有的 CID Block 集合
  3. LokiWiz – 解 SIM Lock 用的
  4. ftp://xda:xda@xda-developers.com/ – 不用说了
  5. http://wiki.xda-developers.com/index.php?pagename=Wizard_ROM_Layout – 拯救手机的关键就是要了解数据结构

不要小看 HTC Wizard 8125 的潜力,虽然只有不到 200mHz 的主频,可是已经满足我的最基本需要了,包括查公司邮件、Skype、WLM、SSH、看电视直播……谁叫咱穷呢,买不起 Touch 啊。