0%

一线的程序员可能会遇到这种事情:领导安排一个任务,按照自己的能力两个小时就可以做完,但领导偏偏要你用半个小时设计,然后花三个小时给同事讲怎么做,同事做完之后又用半个小时评审,最后觉得还不如自己一个人做得好。既然如此,为什么要把任务交给别人去做呢?

Read more »

去年用微单相机开始摄影以来,我时不时会遇到一个怪现象:一张照片乍看起来很好,但稍稍放大就会发现画面是模糊的。这样的照片,即便构图很好、人照得很精致、色彩也很有吸引力,依旧只能算作废品。在拍过好几个月的照片之后,我终于搞清楚了这背后的原因。

Read more »

不知不觉,从学校毕业已经有两年的时间了,我也终于成长为一个稍有经验的社会人。翻看到两年前写的 《2017 年度规划》,其中既有顺利完成并一直坚持下来的部分,也有半途而废石沉大海的部分。两年之后,我想把自己对 2019 年的一些想法发表出来,以便让多年之后的我能回忆起今天在思考着什么。

Read more »

晨练的体验

去年年中在三藩市区跑过五公里,年底又在伯克利跑了万米,今年轮到半程马拉松了。为了避免中途被救护车敲诈钱财,我预先找了健身教练破财免灾。第一次的训练结束之后,身体伤得不轻,有三四天时间腹部动弹不得,在床上无法坐起来,只能翻滚着下去。第二次训练也没好到哪里去,在回家的路上,因为腿已失去知觉,踩油门和刹车的力度都把握不住了,几分钟的路程还要胆战心惊地把车开回家。周一在公司被经理叫去谈话的时候,我不得不靠着椅子站立,因为“坐下之后就站不起来了”。这种残障人的生活状态,在训练三四次之后才渐渐好转。

Read more »

由于先前良好的运作,我被抽中在十一黄金周国庆假期去佐治亚理工(GT)参加 VMware 的校园招聘。

国庆节当天是我们的首场活动。计算学院(CoC)的学生干部们在红楼里帮我们挤下了两张桌子。不知道这些学生干部是不是学校派来监视我们的间谍,他们每两个小时换一班岗,专职坐在旁边的桌子上刷手机。难道他们就这么闲不需要写作业么?还是在手机里装了 IDE 因此可以用手机写作业?

按照我们招聘经理的吩咐,所有收到的简历分成两堆,一堆是要拿回去的,另一堆是要交给环卫工人的。我们在桌子上摆了一左一右两个完全一样的文件夹,聊完之后会把简历放到其中一个文件夹里。可能每个学生都知道这两个文件夹意味着两种不同的结局,但可气的是他们就算眼睁睁地看着我把简历放进其中的一个,也无法知晓之后的命运。

Read more »

在这篇文章中,我们来讲解一下 git submodule 的实战用法,包括:

  1. 注册 git 子模块
  2. 从已有的文件创建 git 子模块
  3. 向上同步主仓库
  4. 向下同步子模块仓库
  5. 疑难杂症
Read more »

在公司写过一年多的 Java 代码之后,我的直观感受是,每天大多数的时间都用于检索和阅览前人写的代码,而不是动手书写新的代码。我和大多数 Java 开发者一样,使用 Intellij IDEA 作为 Java 开发工具。因此,我认为有必要回顾开发流程,熟练掌握频繁使用的导航类快捷键,以便提升开发效率。

本文以 Windows / Linux 平台的快捷键进行讲解,Mac OS 请查看 Intellij IDEA 的 帮助文档

Read more »

在 StackOverflow 上流传着这样一份用 Python 获取网卡 IPv4 地址的神秘代码。

1
2
3
4
5
6
7
8
9
10
11
12
import socket
import fcntl
import struct

def get_ip_address(ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
return socket.inet_ntoa(fcntl.ioctl(
s.fileno(),
0x8915,
struct.pack('256s', ifname[:15]))[20:24])

get_ip_address('eth0')

但是,很少有人知道这段代码是如何工作的。本文将为你揭开这段代码的神秘面纱。

Read more »

在 HTTP 协议支持的方法中,PUT 和 POST 是比较容易混淆的一对。我们来看看在 RESTful API 中应该如何正确使用这两种方法。

Read more »

2005 年,科普作家 John Gribbin 出版了 Deep Simplicity (《深奥的简洁》) 一书,通过阐述混沌系统理论,为读者提供了认知复杂世界的新工具。作者在序言中说到,一个混沌系统需要满足两个条件:其一,系统状态对初始条件敏感;其二,系统具有反馈机制。总体来说,《深奥的简洁》是一本不错的读物,向读者揭示了一些复杂现象背后共有的简单逻辑。不过我认为,作者的部分论述仅仅停留在了表面现象,甚至有意避开讨论混沌系统的本质。

Read more »

要说关系型数据库的特性,我相信很多人都会想到 ACID 这个词。在 ACID (原子性、一致性、隔离性、持久性) 这四个特性中,最为复杂的是隔离性。在本文中,我们将讨论几种常见的数据库隔离等级,以及它们对数据库应用正确性的影响。


数据库隔离等级概述

所谓数据库的隔离,是指多个事务(transaction)同时发生时,事务之间的相互影响。在理想的情况下,一个事务不应对另一个事务产生副作用。但实践表明,这种数据库的处理速度较慢,若能适当放宽对隔离性的要求,则可以显著增强数据库处理并发事务的能力。

现今通用的数据库隔离等级共分为五级,按隔离性从低到高,分别为:

  1. 未提交读取(read uncommitted)
  2. 已提交读取(read committed)
  3. 可重复读取(repeatable read)
  4. 快照隔离(snapshot isolation)
  5. 可序列化(serializable)

Read more »

2017 年,伴随着比特币和以太币等虚拟货币的暴涨,区块链技术逐渐被越来越多的人知晓。此时,著名即时通讯软件 telegram 高调推出数额巨大的 ICO 计划——telegram open network (TON)。与传统区块链网络相比,TON 在吞吐量、实时性、可扩展性上都引入了突破性的技术,代表了当前区块链技术的巅峰水平。本文将纵览 TON 的整体设计,并探究它实现高性能区块链网络的方法。

Read more »

二月三日,我搭乘飞机回到了离别两年的故土。

三藩机场的候机厅里,有两排座椅格外显眼,那里聚集着一个国内初中生观光团。这些小孩穿着紫色运动衫校服,外面披着鲜亮的橘黄色冲锋衣,观感丝毫没有动画中修学旅行的场景那样和谐。尽管初中生的爸妈通常不会给孩子买游戏机,但这并不影响每个人捧着手机消磨时间。小说和 FIFA 是普遍的,至于屏幕上二次元画风浓烈的那位玩的是不是⎡碧蓝航线⎦,就不得而知了。

Read more »

尽管你可能没有用过,但手机和电脑,都有一个恢复出厂设置的选项。如果不幸把一切搞得一团糟,还有机会可以重新来过。那么,如果把 git 仓库搞成了一团糟,能不能也恢复出厂设置,变成和远程仓库一模一样的内容呢?

你的心中可能已经有了一个答案:

1
2
3
cd ..
rm -rf <git_repo>
git clone <git_repo>

与这种费时费力的做法相比,其实还有一个更加优雅的方案。

Read more »

紧是很重要的

做过这样一个梦。我坐在如中学时代一样的教室里。不知是怎么了,我好像倒了霉运,一再被老师点名回答问题。问题的形式很简单:把日文读出来,再翻译成中文。倘若这日文是写在黑板上的,就算是我这种不怎么背单词的家伙,也能估摸着读个差不多。然而这些日文,不,这绝对是一种装置艺术,是一大堆仪器在几个化学实验铁架台上拼接出来的。我尚不清楚它们是何时矗立在那里的,或许只是全息投影下的幻觉,但现在更重要的是弄懂应该怎么读。老师不耐烦地瞅了瞅我,又叫起了另一名学生——他毫不费力地念了出来,就如同是事先录制好的答案一样。我恨不得找个理由离开教室,却只能一动不动地站在那里……

Read more »

你可能用过 Dropbox 和百度网盘之类的云存储服务,不过 AWS S3 才是当今世界上最大的云存储。虽然 S3 服务的对象多为企业用户,你同样可以使用它搭建个人云存储平台。在这篇文章中,我们来看看 S3 API 的配置,以及如何使用 s3cmd 工具与 S3 存储服务交互。

Read more »

Java 8 提供了一组称为 stream 的 API,用于处理可遍历的流式数据。stream API 的设计,充分融合了函数式编程的理念,极大简化了代码量。

我们来讲解如何将常用的 stream API 与相应的 functional interface (函数式接口)配合使用,达成数据处理的目的。

Read more »

UNIX/Linux 系统有不少好用的工具,用于文本搜索的 grep 或许是其中最常用的工具之一。尽管平时称心如意,在面对数百万行的代码库时,grep 的用户体验实在堪忧。还好,我们有 the silver searcher (即 ag)这样迅捷的替代品,从此再也不必经历漫长的等待了。我建议,在日常操作中,可以用 ag 完全取代 grep

下面来介绍 the silver searcher 的安装和使用方法。

Read more »

故事背景

NSX 是 VMware 的支柱产品之一,旨在为企业提供一体化网络虚拟化方案。NSX vSphere 已在市场站稳了脚跟,公司正逐步把开发力量转移至它的后继者:NSX Transformers。去年发布的 Transformers 1.1 版本 [Crosshairs] 正在某家合作伙伴服役,今年推出的 2.0 版本 [Dropkick] 预计会在十余家企业推广试用。

NSX Transformers 曾经使用了 Pivotal 出品的 NoSQL 数据存储套件 GemFire。由于商业调整,GemFire 的核心组件被捐给了 Apache 基金会,产品开发陷入停顿。为了避免使用停止维护的产品,我司把目光投向了 VMware Research 编写的开源数据库 CorfuDB,并打算在 Dropkick 完成实装。这半年多的故事,都是围绕更换数据库展开的。

Read more »