0%

今年的股市因为受到新型冠状病毒的影响,走出了不寻常的行情。虽然一只股票的短期走势受到外部因素的影响很大,但它的长期走势,主要是由公司的经营状况来决定的。要想了解一家上市公司的经营状况,最直观的方式是阅读公司的财报。

在美国上市的公司,有义务在每年和每个季度披露公司财报。年度财报和季度财报都可以在 SEC 网站上查询。考虑到大部分行业都具备一定的季节性,分析公司基本面一般会重点考察年度财报。

大多数公司的年度财报通常有 50 页以上,可见其中包含的内容极为丰富。作为投资者,我们最关心的有如下一些信息:

  1. 公司在过去的一年中,收入和支出分别是多少。这些信息可以从损益表(income statement)中获取。
  2. 公司当前的资产和负债分别有多少。这些信息记录在资产负债表(balance sheet)中。
  3. 过去一年中,公司账户上现金数额的变化及其原因。现金流量表(cash flow statement)里包含了这方面的信息。

下面以苹果公司 2019 年度的财报为例,提取上面三个维度的信息。注意,本文的分析结果仅供参考,并没有推荐购买相应的股票。


Read more »

I used to run a VM in my mac with VMware Fusion. As my mac is getting older, the VM is becoming slower and slower. One day I got an ESXi host which had sufficient resource to run that VM, but migration from VMware Fusion to ESXi was not a straight forward task. If you are facing similar problem with VMware Workstation or Fusion, the following steps will help you.

Read more »

创业路上

从 2017 年 2 月开始,我在 VMware 工作已经有近三年的时间了。前两年在平台组做了一系列项目,大部分和分布式系统治理有关。不能否认在那里学到了很多知识技能,但总有一天我会彻底厌倦看日志修 bug 的循环往复。2019 年 3 月,我换了一个组,投入到了新产品的开发工作中。

进组的时机正逢项目从第一行代码起步。全组像一家创业公司:我们有大致的目标和方向,但所有的宏观设计和微观实现都需要自己摸索。与许多其他创业公司一样,踩各类知名开源软件的坑是大家都会经历的事情。

我们的项目决定使用 druid 作为时间序列数据库。新数据通过 kafka 源源不断进来,经索引后存放在数据库中,这一过程称为数据摄取。官网上的文档和例子还算齐全,示例程序运行起来也一切正常,但换成我们自己的数据后就立刻出现各类错误,以至于不得不深挖源码一探究竟。这么一个看似照葫芦画瓢的任务,最后花费了我三天时间。

之后我们想比较两种不同的数据摄取方式,其中一种依赖于 twitter 某个 scala 开源库的两年前的代码。那些代码过于古老,存在一系列编译和运行的问题。每一次运行,我都觉得,这是最后一个错误,再过片刻就可以把程序跑通了。但每一次,又会出现新的错误。那些莫名其妙的异常信息迷惑着我,但我没有时间探索这个开源库的细枝末节,与其确切地知道为什么会出错,不如凭借直觉把解决的方法猜出来。经历近一星期的煎熬,我终于跑通了流水线,拿到了两种方案的对比结果。我们最后没有选择这套开源库,但我不认为这是一项做完即被丢弃和遗忘的工作。对创业公司而言,知道为什么某种方式不好,并且有理有据地避开它,可能会在未来节约不小的成本 [1]。

从三月到九月,经历过一周连续五天的 war room,经历过打团战从上午十点到晚上九点半,经历过周六周日接连两天来公司点外卖,我们终于发布了产品的第一个版本。正当所有人想好好庆祝一下的时候,我们的客服电话被打爆了。

Read more »

1936 年,阿兰·图灵发表了图灵机理论,证明了存在一种计算机可以执行任何能被算法表达出来的计算过程。1945 年,第一台图灵完备的电子计算机 ENIAC 投入使用,它和后续的电子计算机改变了人类的历史进程。关于量子计算的研究始于 1980 年代。尽管时至今日,尚未出现能进行复杂计算的量子计算机,但量子计算的相关理论已经成熟。

一般来说,完成一次计算需要做三件事:

提供输入 -> 执行计算过程 -> 提取输出

对于电子计算机而言,输入和输出都可以表达为一串比特。计算过程,就是处理单元在程序的控制下,通过 AND, OR, NOT 等逻辑门电路修改这些比特的过程。

而量子计算机,输入的是量子比特(qubit)。计算过程是量子门(quantum logic gates)修改量子比特的状态(quantum state)。输出的是量子比特观测的结果。

因此,理解量子计算,需要搞清楚量子比特、量子门和量子观测。考虑到量子计算的物理实现有多种方法,且许多细节均为机密,本文只会阐释量子计算的理论基础。

Read more »

尽管相机厂家为了推动低端单反/微单相机的销售,很少特意强调相机是全画幅还是残画幅,但我们并不能因此低估它的影响。

所谓相机的全画幅和残画幅,是指相机感光元件的大小。全画幅使用 36 x 24 mm 的传感器,常见的残画幅 APS-C 使用 23.6 x 15.7 mm (佳能是 22.2 x 14.8 mm)的传感器。全画幅与某种画幅的传感器的长度之比,称为裁切系数(crop factor)。很容易算出,全画幅的裁切系数为 1,普通 APS-C 画幅的裁切系数为 1.5,对于佳能来说这个值是 1.6。



常用的相机画幅


知道裁切系数有什么用呢?由于画幅不同,为了取得相同的摄影效果,在不同相机上需要设定的焦距、光圈大小和感光度并不一样。有了裁切系数,我们就可以在不同画幅间进行转换:

使用残画幅,在已知某张照片焦距、光圈大小和感光度的条件下,若改为全画幅相机,需使用的焦距、光圈大小和感光度。

或者反过来:

使用全画幅,在已知某张照片焦距、光圈大小和感光度的条件下,若改为残画幅相机,需使用的焦距、光圈大小和感光度。

Read more »

这周日,我被拉去本地某个基督教会听福音。传道者精心准备了演讲,在一个小时里把基督教的核心逻辑说清楚了。这篇文章我就加上自己的理解,以一位非信徒的身份转述一下。各位读者阅毕如果有兴趣,可以去教会聆听正宗的版本。

宗教可以认为是一种高度严密和仪式化的信仰。至于信仰,按照我的理解,便是那些无需证明就自动为真的命题。基督教作为一种宗教,它的信众会相信下面几个基本命题:

  1. 世界上存在着一位神,他创造了万事万物。
  2. 神依照自己的形象创造了人。
  3. 所有人都是有罪的。
  4. 人在死后会经过审判,有罪的人会下地狱,无罪的人可以上天堂。
  5. 凡相信这位神和基督耶稣的存在,便会得到救赎,可在审判时洗刷一切罪过。

这些命题都是无法证明的。传道者正确的做法,是通过举例,让听众觉得这些命题应当是真的。当听众不再质疑命题的真伪时,他们就完成了从福音听众到基督徒的转变。

下面我来逐条解释一下这几个命题。

Read more »

在热血的战斗场面从脑海中逐渐消退之后,《心理测量者》留下的,是虚渊玄对正义、理想社会与人生信念的诸多思考。

在这样一个架空的世界里,西比拉系统(Sibyl System)通过测量人的犯罪系数来预测犯罪行为,并允许刑警对犯罪系数高的人实施惩戒。在这个世界,何为正义,是由西比拉决定的。那么正义到底是什么呢?正义与非正义又是如何界定的呢?假设火车会轧死铁轨上的五个孩子,但是你只要把一个胖子从桥上推下去就能救那五个孩子的命,这种行为是正义的么?因为判定正义,是西比拉拥有的特权,所以西比拉可以使用任何逻辑上自洽的判断标准。比如说,比起不作为,把胖子推到桥下的人拥有更高的犯罪系数,因此用一个胖子的命救五个孩子的命是非正义的。更广义的说,正义与非正义并不存在一个绝对的界定,它只要能被普罗大众接受即可。

Read more »

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

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 »