Zhao Li https://livc.io 2018-02-14T16:57:50+00:00 livc@outlook.com Telegram Client 开发 https://livc.io/blog/211 2018-02-15T00:00:00+00:00 Zhao Li https://livc.io/blog/211 Telegram 有丰富的机器人 API 供开发者使用,与此同时也允许对个人账号进行 API 的调用。比如在一个群组中我想对一些内容做出自动回复,但是由于我不是管理员不能添加机器人做这个事情,只能用我自己的账号来完成,这就涉及到了其 Client 开发,同理甚至可以开发出一个全新的第三方客户端。

客户端开发有很多库,比如基于命令行的 tg-cli 和基于 Python 的 Telethon,但是我看 cli 版本好多年没更新了就没有用,这里以 Telethon 为例。

首先去 https://my.telegram.org 上申请个人开发者的标识:主要包括 api_id 和 api_hash。

from telethon import TelegramClient

api_id = 12345
api_hash = '0123456789abcdef0123456789abcdef'

client = TelegramClient('session_name', api_id, api_hash, proxy=(socks.SOCKS5, 'localhost', 8889), update_workers=4)
client.start()

第一次运行会验证账号,按照提示输入手机号(+861xxxxxxxxxx)后会在客户端上收到一串验证码,继续按照提示输入即可验证完成。

实现自动回复的全部代码:

from telethon import TelegramClient
import socks
from telethon.tl.types import UpdateNewChannelMessage

api_id = 12345
api_hash = '0123456789abcdef0123456789abcdef'

client = TelegramClient('session_name', api_id, api_hash, proxy=(socks.SOCKS5, 'localhost', 8889), update_workers=4)
client.start()

def replier(update):
    if isinstance(update, UpdateNewChannelMessage) and update.message.reply_to_msg_id is None:
        client.send_message(update.message.to_id, 'Test', reply_to=update.message.id)

client.add_update_handler(replier)
input('Press enter to stop this!')
client.disconnect()
]]>
Telegram Bot 开发的代理设置 https://livc.io/blog/210 2018-02-13T00:00:00+00:00 Zhao Li https://livc.io/blog/210 在开发 Telegram Bot 时,我们要在本地测试机器人,但是其服务被墙,这里以 python-telegram-bot 为例,列出一些解决方法。

1. Updater

https://python-telegram-bot.readthedocs.io/en/stable/telegram.ext.updater.html#Updater.running

updater = Updater(token=TOKEN, request_kwargs={'proxy_url': 'socks5://127.0.0.1:1080/'})

2. Bot

https://python-telegram-bot.readthedocs.io/en/stable/telegram.bot.html

proxy = telegram.utils.request.Request(proxy_url='socks5://127.0.0.1:1080')
bot = telegram.Bot(token=TOKEN, request=proxy);

3. proxychains4

直接使用 proxychains-ng 运行程序:

proxychains4 python main.py

4. VPS

最后一种最简单的方法就是直接在墙外 VPS 上开发,潜在的缺点是延迟太高导致打码有迟钝感,这可以通过 mosh 缓解。

]]>
比特币区块哈希算法 https://livc.io/blog/209 2018-02-07T00:00:00+00:00 Zhao Li https://livc.io/blog/209 本文主要介绍比特币区块链上的每个区块的地址是如何产生的。

区块头部(Header)主要包括:

  • Version:区块版本号,4 Bytes
  • hashPrevBlock:上一区块地址,32 Bytes
  • hashMerkleRoot:默克尔树,一种用来表达链上历史交易记录的数据结构,32 Bytes。
  • Time:时间戳,4 Bytes
  • Bits:网络难度,4 Bytes
  • Nonce:随机数,也就是 PoW 要计算的数,4 Bytes。

比特币使用两次 hash 来计算:SHA256(SHA256(Block_Header))

以高度为 1 的区块为例,它的地址是 00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048

$ curl https://blockchain.info/rawblock/00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048

{
    "hash":"00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048",
    "ver":1,
    "prev_block":"000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",
    "mrkl_root":"0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098",
    "time":1231469665,
    "bits":486604799,
    "fee":0,
    "nonce":2573394689,
    "n_tx":1,
    "size":215,
    "block_index":14850,
    "main_chain":true,
    "height":1,
......

首先把 ver, prev_block, mrkl_root, time, bits, nonce 拼接起来,得到 header_hex

在拼接之前需要先把 ver, time, bits, nonce 转换为十六进制字符串,然后将这六个属性由大端序转换为小端序,最后才拼接成一个字符串。

大端序和小端序是计算机硬件存储地址排列的两个通用规则,简单来说高位字节在前就是大端序,这和人类的认知一致;低位字节在前就是小端序,这是因为电路计算都是从低位开始的,方便计算机计算,这和人类计算方式也是一致的。具体可以参考阮一峰的《理解字节序》

# Source: https://livc.io

import hashlib, struct

ver = 1
prev_block = "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f"
mrkl_root = "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098"
time = 1231469665
bits = 486604799
nonce = 2573394689

def deal_str(big_endian):
    # [::-1] 改变字节序
    return big_endian.decode("hex")[::-1]

def deal_int(n):
    # < 代表小端序
    # L 代表 unsigned long
    return struct.pack("<L", n)

header_bin = deal_int(ver) + deal_str(prev_block) + deal_str(mrkl_root) + deal_int(time) + deal_int(bits) + deal_int(nonce)

其中 deal_int(time) + deal_int(bits) + deal_int(nonce) 也可以通过 stack.pack("<LLL", time, bits, nonce) 实现。

然后做两次 sha256 计算,这一步也就是挖矿做的工作:找到一个 nonce 使得这个结果满足某个条件(比如前八位都是 0)。

hash = hashlib.sha256(hashlib.sha256(header_bin).digest()).digest()

最后将结果转回大端序,即为当前区块的地址。

cur_block = hash[::-1].encode('hex')
print(cur_block)
> 00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048

Reference

]]>
斯坦福 CS007:写给工程师的理财指南(三) https://livc.io/blog/208 2018-02-04T00:00:00+00:00 Zhao Li https://livc.io/blog/208 本文是这个公开课系列的最后一篇,前两篇在:

Know Your Worth

资产流动性

流通性

如何在需要时快速获得现金?市场流动性指市场允许资产以稳定的价格买卖。资产流动性是衡量个人或公司能用其现有的流动资产满足其财务义务的程度。不要低估流动性的价值,资产的流通性是投资的力量之源。

流通性与收益率呈典型的负相关,比如现金的流动性很好而私募股票的流动性很差。流动性并不等于安全性,一张五年的 CD 很安全但是流动性很差,特斯拉的股票流动性很好,但是很容易蒸发。

应急资金

美联储在 2015 报告说,47% 的美国人没有足够的储蓄来支付 400 美元的紧急开支。流动性意味着当你需要资金时就可以获得资金。应急资金可以在短期内保护你的长期资产或计划,以免出意外。应急资金通常建议至少有 3 个月的生活费用。

不要把应急资金放在投资上,它是一种缓冲和保险,而不是资产,并且不到万不得已的时候不要使用它。

资产与负债

资产是任何具有经济价值的资源,比如投资于现金、债券、股票等的金融资产和房地产、收藏品、商品等的固定资产。除此之外,你的技能和能力是你最大的资产,这种“无形的资产”是最好的投资。

负债是一种财务义务,通常是债务,如房屋贷款、汽车贷款、学生贷款、信用卡、税务责任等。良好的信用评分会对大多数贷款的资格至关重要。

债务是坏事吗?MM 模型认为公司市值由营收能力和风险资产决定,而不是资本结构的组成(是否负债)。权衡理论 认为存在企业的最优资本结构。

通过绘制资产负债表来知道你的净资产,这对评估个人资产也很有帮助。

All About Debt

复利

复利就是复合利息,它的利息要并入本金中重复计息,俗称的“利滚利”。复利几乎是所有长期投资的关键,因为这种指数的函数每个时间段的收益都建立在前一个周期之上,因此尽早启动复利的投资会很有好处。但它的初期回报率比较小,所以关键的是要坚持下去。

72 公式:翻倍所需年数 = 72/年利润百分比

也就是说如果年利润是 12% 的话,那么你的钱在 72/12=6 年后就会翻倍。72 公式也可以用于计算通货膨胀,也就是说如果通货膨胀率是 8% 的话,那么在 72/8=9 年后,你手中的等额钱的价值就会变为一半。当然,我们前面说的是利润的复利,如果是债务也同样有效。

年度百分率(Annual Percentage Rate,APR)是指复利计息按一年一次来计算的利率(因此不包含复利)。它是衡量预期投资回报的标准方法,因为会有各种各样的收费方法和利率结构。而存款年收益(Annual Percentage Yields, APY)是包含复利的。

例如,假设你以APR 5%存了10000元,并且利息只有一年,那么一年后你将得到500元利息。

另一方面,假设利息是按月支付的。这就意味着,5%的APR将被分成12期,0.42%每期。第一个月之后你将收到10042元,第二个月时,0.42%的利息将会以10042为基数计算,以此类推。

由此,虽然APR是5%,但实际上1年后,你受到了512元。这就意味着APY是5.12%。

—— 百度百科

债务类型

  • 学生贷款:很多学校可以申请毕业后几年内再交学费,还有一些 P2P 的校园网贷也差不多是这种?不过非常有风险。美国的学生贷款负债有 1.4 万亿美元,而且这个数字还在增长。政府会对学生贷款的利率有所优惠或减免。(一般是 10 年、无担保)
  • 抵押贷款:抵押的可能是房子或公司。在美国有 14.3 万亿美元的抵押贷款,而其中 10.3 万亿美元都是用来买房子。(一般是 30 年、有担保)
  • 汽车贷款:1.2 万亿美元(截至 2017 年中期)(一般是 3-5 年、有担保)
  • 信用卡:7840 亿美元(截至 2017 年第二季度,一般是 30 天,无担保)

信用评分

建立良好的信用评分对大多数贷款的资格至关重要,它是贷款资格和贷款利率的决定因素之一,许多产品和服务也利用它们来评估信用风险,此外还经常被用于身份验证。

贷款利率

分期偿还:借款人在还款期内分次偿还贷款,还款期结束,贷款全部还清。这种方法减少了借款人无法偿还所带来的风险。

财务计划及目标

什么是财务计划?

对当前和未来财政状况的综合评价,是一个决定一个人能否通过合适的金融资源管理实现人生目标的过程。它可能包括了对现金流和资产的分析,投资、退休、税收、风险、保险等方面的各种策略。

为什么需要?

  1. 人们如果缺乏足够的储蓄动机,往往会花更多的钱
  2. 短期奖励与长期回报。
  3. 需要时间来建立资产、明确财务计划增加成功的可能性
  4. 当涉及到一个人以上(夫妻/家庭)时,极为重要

什么是财务顾问?有权威的两个认证:CFP和CFA,理财规划师有助于人们避免行为错误,收费也十分高。但是,在未来10年内,可能会被个性化、数据驱动的自动化解决方案所影响。

财务目标是什么?财务目标是具有明确财务要求的资产、收入目标,比如还债、买车、买房、退休等。

Additional Topics

Bitcoin

为什么比特币有趣?

  1. 对于财务交易,比特币交易公开透明并且未经审查
  2. 无法强迫复制,也就是稀缺性
  3. 加密安全

什么是 ICO ?将新发行的数字货币直接出售给投资者,参考 IPO,ICO 在2017年呈现出巨大的激增,存在着重大的监管问题,参考中国 94。

比特币是资产类别吗?尽管具有波动性,比特币回报率在任何风险调整措施下都是惊人的。迄今为止,比特币似乎与其他任何现有资产类别几乎完全不相关。但数字货币成为一个资产类别的可能性正在增加。

绝大多数金融业人士认为比特币是一个泡沫,许多科技界人士认为这是一个互联网扩张的机会。是否具有长期投资价值将验证数字货币是否是泡沫,然而有趣的是,比特币在 2013 年就被认为是一个泡沫。比特币的发展仅仅有几年,如此短的历史与其他金融资产相比,仅仅依靠财务数据无法预测未来 20 年内会发生什么。

衍生品

金融衍生产品(Derivative)是指其价值依赖于标的资产Underlying Asset)价值变动的合约。2015 年金融衍生产品总价值为1.2万亿美元,超过 10 倍的全球 GDP 规模。

金融衍生产品的共同特征是保证金交易,即只要支付一定比例的保证金就可进行全额交易,因此具有杠杆效应。以期货为例,如果投资一万,杠杆 20 倍,就相当于拿着 20 万投,赚 10% 实际上就赚了 2 万,当然亏损的话也是同理,如果本金也亏损没了,那就是爆仓,因此建议不要轻易碰杠杆,一夜暴富确实有,一夜倾家荡产的更多,尤其是币市,因为数字货币已经相当于自带杠杆!

写在最后的话:读完这个系列后你需要做的事情——

  1. 积极思考你的财务计划和决定。
  2. 与你的朋友和家人讨论个人理财和相关话题。
  3. 不要害怕做出决定,从错误中吸取教训。在你的钱和责任都不多时,开始学习个人财富管理。
  4. 对任何快速实现财务成功(一夜暴富)的途径持要持怀疑态度。
  5. 永远记住:好的投资是无聊的,要耐得住寂寞。
]]>
比特币勒索与 MongoDB 的用户认证 https://livc.io/blog/207 2018-01-25T00:00:00+00:00 Zhao Li https://livc.io/blog/207 最近写的小工具 CryptoHub 中使用了 MongoDB,也是第一次用这种数据库。后来发现 VPS CPU 经常飙升到 100% 以上,然后上面的所有程序都挂了,必须手动重启。重启后发现 MongoDB 中数据全部丢失,多了一个 Warning 数据库,打开一看:

后来上网一搜才知道,MongoDB 默认是不开认证的,参考 从 MONGODB “赎金事件” 看安全问题,而且这个事情从 2017 年初就开始出现了,所幸我保存了所有 insert 语句的日志,恢复起来也比较容易。

由于比特币账本全部透明,我们可以根据黑客的地址查询到他的交易记录:https://blockchain.info/address/13yDqr3VptUpYr84s3id3HFAd3HC1KmLPm,结论就是他没有收到过任何比特币。。。还有一个可能是他对每个被攻击者留下了不同的钱包地址。

为 MongoDB 提供用户认证的方法很简单:

  1. mongod 启动服务。

  2. mongo 进入 MongoDB,默认会进入 test 数据库。

  3. > use admin # 切换到admin数据库
    switched to db admin
    # 添加管理员用户,如果是新版本需要用 db.createUser({user:'livc', pwd:'pass', roles:['root']})
    > db.addUser("livc", "pass")
    WARNING: The 'addUser' shell helper is DEPRECATED. Please use 'createUser' instead
    Successfully added user: { "user" : "livc", "roles" : [ "root" ] }
    > db.system.users.find(); # 查询
    { "_id" : "admin.livc", "user" : "livc", "db" : "admin", "credentials" : { "MONGODB-CR" : "9efd6764037f18abe15260de80f003a5" }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
    
  4. mongod —auth 以认证模式重启 MongoDB,重新进入 mongo

  5. > use admin
    switched to db admin
    > db.auth("livc", "pass") # 进行授权
    

之后即可正常操作数据库。

]]>
GPU 挖矿:从零开始,拥有自己的比特币 https://livc.io/blog/206 2018-01-21T00:00:00+00:00 Zhao Li https://livc.io/blog/206 以比特币为代表的数字货币作为区块链技术的重要应用,正在慢慢进入人们的视野,拥有自己的数字资产也是一件很酷的事情,如果你不想买,那么最好的获取方法就是挖矿。

挖矿之前,我需要作几个简单的说明,以澄清潜在的误区:

首先,是不是数字货币只有比特币呢?

答案显然是否定的。数字货币行情分析网站非小号目前共收录了 1700+ 种数字货币,其中市值前十名的为(2018 年 1 月 21 日):

除比特币之外的数字货币一般被称为“山寨币”(altcoin)。这个词并不是一个贬义词,因为在山寨币中有很多优秀的项目比如以太坊(ETH)、EOS 等等,但多数山寨币仍是空气币这个现象确实是存在的,所以不少人制作了 SB 币懵币等网站调侃。

第二个误区是,“比特币这么贵了,我一个都买不起呀?”

实际上,比特币最小单位并不是 1,而是“聪”,没错,就是中本聪的“聪”。1 BTC = 1 亿聪,也就是说最小单位是十的负八次方。但是人们习惯了货币的整数交易,对小数点后这么多零有天生的认知障碍,因此很多人认为这是影响比特币在现实世界中流通的重要原因之一。

最后,我们并不是要直接挖比特币(再看一眼标题,还真没说挖比特币!!),而是挖山寨币然后换成比特币,最后也可以换成法币。

为什么不直接挖比特币呢?

这里有一张比特币挖矿的难度变化图,显示其呈指数级上涨。也就是说在机器配置不变的情况下,你的 BTC 产出是越来越少的,同时由于 BTC 的设计机制,每个区块产出的 BTC 也是在不断减少的(当然 BTC 本身也是在不断增值)。作为个人玩家娱乐挖矿的话,山寨币是一个较好的选择。如果把挖矿当做投资的话,还是推荐 BTC、ETH 这种主流的货币,也可以参考 whattomine 的收益估算。

挖矿算法

目前的挖矿机理都是基于 PoW(proof-of-work, 工作量证明)的,它通过大量简单的重复运算产出一个符合要求的结果,并且这个结果很容易验证。

举个例子,为了通过考试不挂科,你需要不断地大量练习,才能解出一道题,然而对于阅卷而言只需和标准答案对比一下就完了,几乎不需要成本。PoW 的技术原理主要通过 hash 实现,这里先不讨论。

挖矿设备

挖矿设备主要经历了从 CPU -> GPU -> FPGA -> ASIC 的变化,挖矿效率也是越来越强大。

与 GPU 相比,CPU 包含多数(对于挖矿计算而言)无用的控制单元等结构,因此性价比很低。这就好比让两个大学教授和 100 个小学生一起计算一些 10 以内的加减法,显然小学生们计算的更快,教授就是大材小用了。

FPGA 的芯片生产困难,因此生存时间很短。在将 FPGA 中不需要的逻辑实现删掉后, ASIC 矿机问世。

ASIC 矿机(也就是目前我们所说的矿机)是为挖矿量身定制的,因此挖矿速度非常快(价格也比较高),除了挖矿什么都做不了。一旦遇上“矿难”,那你面对的就是一堆废铁,而显卡至少还有其他用处。

钱包

挖矿前需要准备一个钱包,存放自己的数字资产。这里推荐使用比特派,它支持的币种比较多,你也可以选择其他钱包,但无论如何一定要保存好私钥,这是验证使用者身份的唯一凭证。

除此之外你也可以选择使用交易所的充值地址,这样挖到的币直接被转入到交易所中,可以随时卖了它,否则你需要先从钱包转入交易所,这个过程会收取矿工费。

矿池

加入矿池相当于选择组队挖矿,因为一个人可能很难挖到一个币,但是在矿池中就可以按照你的算力占全矿池的算力比例来给你分配收益。这就好比一个人买彩票几乎没啥希望,但是如果规定一亿个人一起买,中奖的平分的话,这样收益就稳定多了。当然,矿池会收取一定的费用。

我们在 https://blockchain.info/pools 可以看到比特币全球矿池的算力分布。其中最大的矿池 btc.com 只支持比特币和比特币现金(BCH)两个币种,为了能够挖到更小众的山寨币,我们可以选择其他矿池。

接下来我用两个矿池来挖两个币种,并分别使用开源闭源挖矿软件。

蜜蜂矿池 —— HSR

蜜蜂矿池支持三个 GPU 挖矿币种,以 HSR 为例进入 http://hcash.beepool.org 中,这里有一份矿池的教程,我们还需要一个挖矿软件,这里我们使用开源挖矿软件 ccminer

首先默认你已经安装好了显卡驱动和 CUDA。

以 ubuntu 为例,先安装依赖:

sudo apt-get install libcurl4-openssl-dev libssl-dev libjansson-dev automake autotools-dev build-essential

切换到 gcc/g++ 5 (CUDA 的要求),并 clone 仓库:

sudo apt-get install gcc-5 g++-5
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 1
git clone https://github.com/tpruvot/ccminer

在开始编译前,你需要检查 nvcc_ARCH 以确保它和你的显卡型号是兼容的:

wiki 中找到显卡对应 Compatibility 和与之对应的 nvcc_ARCH,然后按照说明修改 Makefile.am,最后编译并运行:

./build.sh
./ccminer --version
./ccminer -a hsr -o stratum+tcp://hcash-pool.beepool.org:9509 -u HCHSsFEuYqkGsyJZTDfetomyPb8AYkCNwB.livc -p x -d 0,2,3

其中,

  • -a 为算法,这里对应的是 hsr,也就是我们要挖的
  • -o 为矿池服务器地址
  • -u 为你的钱包地址,你需要把这个地址替换成你自己的(hsr)地址,其中 livc 为矿工名字
  • -p 密码,默认即可
  • -d 指定 GPU 设备,默认全部

这时你的矿工已经开始工作了,你可以在 http://hcash.beepool.org/miner/你的hsr地址 查到实时的状态和收益。更多细节可以参考 ccminer 的 READMEINSTALL

UUPool —— BTW

BTW 是 BTC 最近分叉的一个币,因此挖的人比较少。我们可以按照矿池的教程(http://uupool.cn/course/btw)直接下载挖矿软件。

以 N 卡为例,矿池提供的 EWBF’s Zcash CUDA miner 是一个闭源挖矿软件,其项目主页发布在 bitcointalk。可见它实际上是一个 Zcash(ZEC)的挖矿软件,但因为 BTW 和 ZEC 的加密算法完全一致,我们可以直接拿来用。

编辑 miner.cfg 配置文件:

[server]
server btw.uupool.cn
port   3600
user   WY6MG5aAubs7E3xsjErgYh3ggAzSkow2QH(你的 BTW 地址)
pass   x

然后把下面两个 additional server 删掉即可,这是防止一个矿池连接出错保证连接到备用矿池上,默认的两个备用矿池应该是作者的钱包地址。

最后运行程序,

./miner --config miner.cfg

http://uupool.cn/btw/你的btw地址 上可以查到实时的状态和收益。

值得一提的是,闭源软件由于作者的优化可能带来更多的收益,但软件作者也会收取一定的 dev fee, EWBF’s Zcash CUDA miner 默认收取开发者费用 2%,当然这个是可选的,你也可以通过 —fee 来调控比例甚至拒绝支付这笔费用,也可以通过一些方法 hack 掉开发者费用,当然我并不推荐这么做,因为你只是损失了 1% 或 2% 的收益,而软件的作者损失的是全部的收益。

挖矿部分到此结束,每天矿池会给你的钱包中转入收益,比如:

今天我收到了 3761 个 BTW,在 coinegg 上目前是三毛钱一个,那我昨天的收益就是 3761*0.3 = 1128 元!!哈哈,其实对于 BTW 还并不能这么算,因为 BTW 目前只上了这一个交易所,而且还没有开放充值,也就是有大量的像我一样的 BTW 矿工无法将 BTW 转入到交易所卖掉,所以当开放充值时一定会被严重砸盘的。

对于 HSR,可以将它转入到交易所换成 BTC(类似于股票交易),再通过场外交易卖成人民币。有人问为什么不直接卖成 RMB 呢?因为现在的交易所都是以 BTC 为单位的币币交易,这样就可以跟法币撇清关系,或者你也可以直接找人进行点对点的交易,这样风险比较大。

币币交易所推荐币安火币,币安是世界交易量第一的交易所,上面的币都比较靠谱,而火币自带法币交易,方便变现。这两个都是中国人搞的,减少潜在的风险。

最后,不要指着自己的几块卡能挖出多少钱来,如果自己娱乐的话,找几个看好的币挖着玩玩,几年后升值了也许能赚一点,如果将挖矿视为投资的话,你需要做充分的调研:对比不同的矿机、不同的挖矿软件、不同的矿池、选择最有发展前景的币种,这样才能获取最大的收益。

]]>
斯坦福 CS007:写给工程师的理财指南(二) https://livc.io/blog/205 2018-01-16T00:00:00+00:00 Zhao Li https://livc.io/blog/205 Getting Paid

薪水的构成

  1. 基本工资:主要受职位、等级、地理位置等影响,基本工资的调整主要受年度通货膨胀、内部审计、市场竞争力、晋升等因素的影响。
  2. 奖金:签字费(通常有追回条件)、年度/季度奖金(通常是基于绩效的固定普调)、短期激励(不太常见)。
  3. 股权:在 IT 行业内几乎所有等级和职位上都很常见,其他行业倾向于偏向高管。两种常见形式是股票期权和限制性股票。
  4. 员工福利:税收福利、健康保险、退休保障、股票优惠等,在大型资金充裕的科技公司中,能够普遍地看到相当昂贵的津贴(食品、交通、健身等)。

什么是股权?

股权就是员工分享公司拥有权的价值,有许多种类之分,最简单的情况是,你的股份除以公司总股份。

  • 上市公司(Public Company):上市公司往往试图发展更大,对其财务结果和内容的公开透明有严格的规定,股票和股票期权的市场价格极其透明。
  • 私有公司(Private Company):大多数公司都是私有的,有多种股票类别,通常当公司是私人的时候,你不能出售你的股票。

股票期权与限制性股票

股票期权就是公司给你在一定的期限内按照某个既定的价格购买一定公司股票的权利,你可以在公司上市后卖掉赚差价,收益为(卖出价格-行权价) * 股票数(行权价可以理解为买入价),如果公司股票一直下跌低于行权价,那就一毛钱都赚不到。

限制性股票(RSU)是实实在在的股票,收益是卖出价格*卖出股票数,只有在股票价格是 0 的时候才会一毛钱都赚不到。


图为腾讯 2017 年圣诞晚会抽奖

二者通常都是逐年实现的,比如第一年给 20%,第二年 50%,第三年 40%。很显然,限制性股票的价值更高,所以公司通常会给期权而不是限制性股票。

你的选择

这里有四个真实的 Offer(2017 年 8 月):

  公司 A 公司 B 公司 C 公司 D
规模/人 10000+ 1000+ 30 100000+
市值 超过 2000 亿 超过 20 亿 A 轮融资 1000 万,估值 5000 万 超过 2000 亿
职位 软件工程师 软件工程师 软件工程师 银行分析员
基本工资 115k 105k 89k 85k
签字费 25k 10k 3k 5k
年终奖 10% 60k(每年多20k)
股票 当前价值 200k 的 RSU(四年) 0.01%的期权(四年) 0.5% 的期权(四年)
员工福利 多的数不过来,50%的 401(k) 免费食物,许多津贴,无 401(k) 基本健康保险,401(k),停车费交通费 较高的理财收益,没什么津贴,相当多的飞行公里数

思考这四个 offer,如果以一年为标准,那么看起来公司 A 是最值得的,因为它的基本工资很高;如果是五年呢,你会发现公司 D 更有价值,因为它的年终奖很给力。

那么从长期来看,驱动职场价值的因素是什么呢?

  • 股份:在硅谷,拥有股份通常会有意外的惊喜
  • 职业:也就是你的工作内容,都是技术岗位也有非常多的区分
  • 公司的成功
  • 多次加入中等规模超快速增长的公司会得到显著的好处
  • 你可能想过几百种成功的方法,但也要吸取企业失败的教训

钱并不能决定一切

首先你要考虑公司未来市值的增长空间,这样你的股份才有价值;然后需要明白,公司的成功与否并不一定会影响个人,但个人的技术提升可能转瞬即逝,因此持续提升自己永远是最重要的;最后,学会沟通永远是职场最重要的元素之一,大公司在薪酬公平方面做得要比小公司更专业,因此要敢于真诚而坚定地跟经理讨论薪酬的问题。

Spend Less Than You Make

收入与支出

不要花超过赚的钱是个人理财的终极秘密,别买你买不起的东西,不管你有多少钱,这条定律都非常重要。

储蓄率:应该存多少?

美国个人储蓄率在 2017 年 8 月是 3.6% 不要花费在没有未来收入的事情上。比如房子是资产,它可以带来源源不断的收入;而购买汽车则相当于负债。

房子是一种强制储蓄,截至 2017 年,63.7%的美国人都是房主(拥有自己名下的房子),当你每个月还房贷时,慢慢就会还清债务,留下资产,这提高了净值,就像储蓄一样。因此每月本金支付的强制功能可以有效地引导未来(几十年)里用房子创造可观的价值。

理财的目标:理想收益率 10%~15% 如何实现呢?首先要减少花费,也就是把尽量多的钱去存起来,让闲钱像工人一样继续帮你赚钱,而不是躺在兜里睡大觉。第二要增加资本池,因为短期都是有风险的,定投会更加安全。

自动化的好处:先支付自己的费用,然后建立预算,计算储蓄,自动取回。当薪水增加时尽量省下那个百分比,没有到手的钱就不太可能被花掉,这样无形中渐渐增加了自己的储蓄率。

收益表

收益表是一个财务报表,报告一个公司在特定期间的财务表现。个人也可以通过收益表来回顾一段时间的收入、支出和储蓄等情况。如果所有收入和开销都坚持使用软件来记账的话,那么很多软件都可以自动生成这种统计的图表。

收益表需要每个季度、每年定期检查和分析,改变和完善生活习惯,使用自动化的流程提高效率,减小出错的空间,并且努力持续维护它。

预算:钱都去哪了?

预算就是支出的分类,其实现在有很多记账的软件,使用它们可以追踪和分析自己的消费情况。同时需要在一定的上下文内(比如相同经济条件),把它和同学、同事对比,分析消费是否都是有价值的。

最后,一定要坚信存储是有效果的,因为很多比你赚的少的人都在努力省钱,也有很多比你赚得多的人正在破产。

事实已经证明,制定预算的行为减少了人们的花费。如果你已经超出了预算,不要感到惊讶,你需要一个平衡收入和开支的缓冲区。

]]>
程序员如何玩转《冲顶大会》? https://livc.io/blog/204 2018-01-07T00:00:00+00:00 Zhao Li https://livc.io/blog/204

冲顶大会是最近很火的一款直播答题游戏,每天指定时间开放,12 道题,每题 3 个选项,10 秒作答,所有通关者分享奖金(每场奖金五万元或十万元),邀请好友可以获得复活资格。类似的游戏还有很多比如头条、映客、花椒直播等都推出了自己的答题游戏,这类模式的鼻祖是美国去年 8 月上线的 HQ Trivia。

看到这你可能会想,这尼玛不就是《开心辞典》搬到手机上了吗?这也能赚钱?没错,就是这样。

我这几天玩了几场,经过观察发现每场人数在三十万到五十万之间,现在互联网流量这么贵,花几万块钱就能在这么短时间带来这么多用户,相当值啊。罗振宇在跨年演讲时引用了德鲁克的一句话:“对创新的最大赞美,莫过于人们说——这太显而易见了,为什么我就没有想到呢?”,我想直播答题就是这样的现象级创新产品,它甚至没有任何内容上的创新,但它有很多非常值得探索的盈利模式。

道高一尺,魔高一丈,我们看看有哪些可以 Hack 的方法。

题目出现再去搜索肯定是来不及的(除非你单身 40 年的手速),广大人民的作弊策略也是层出不穷。最简单的是一群人一起玩,可以利用网络延迟有多几秒的读题时间,遇到不会的每个人分开选,这样你只需要 3^12=531441 台手机即可通关。还可以使用两台设备,一个手机等主播读题,另一个利用百度的语音搜索也能查出答案,但是感觉这种速度要比较慢。

那么程序员应该如何玩呢?

首先用 WDA 来获取屏幕截图。WDA 本是 Facebook 开发的一套 iOS 测试框架,前几天看见大家都用来做微信“跳一跳”的外挂,便特意去了解了一下,发现也能用在冲顶大会上。

之后 crop 出题目所在的位置(可能需要适配手机屏幕),然后调用开放的 OCR 接口读取出文字文本,最后调用搜索引擎,就可以达到之前 gif 图的效果。这套环境是 iOS + Mac,如果是安卓应该有更方便的方法。

其实最初的想法是希望搜索+选择答案全部自动化完成的,思路是 OCR 题目和候选答案,组成三个组合扔到百度或谷歌里搜索,然后哪个组合的结果出现次数最多就选择哪个。试了几个问题后发现并不是这样,比如上面图片的“骆驼的驼峰是存储什么的?”,可能多数人都会认为是水,因此出现的次数最多,其实是错误答案。

最后还有两个痛点:

  1. 免费 OCR 接口调用次数有限,所以不能一直去截屏识别,只能等题目出现时运行程序。
  2. 官方也很套路,有的问题是没法搜索的。。比如这种:

附上代码,不知大家有没有更好的想法:

# python3
import wda
import io
import urllib.parse
import webbrowser
import requests
import time
import base64
from PIL import Image

c = wda.Client()
# 百度OCR API
api_key = ''
api_secret = ''
token = ''


while True:
    time.sleep(0.5)
    c.screenshot('1.png')
    im = Image.open("./1.png")
    region = im.crop((75, 315, 1167, 789)) # iPhone 7P
    imgByteArr = io.BytesIO()
    region.save(imgByteArr, format='PNG')
    image_data = imgByteArr.getvalue()
    base64_data = base64.b64encode(image_data)
    r = requests.post('https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic',
                      params={'access_token': token}, data={'image': base64_data})
    result = ''
    for i in r.json()['words_result']:
        result += i['words']
    result = urllib.parse.quote(result)
    webbrowser.open('https://baidu.com/s?wd='+result)
    break
]]>
无监督学习中的 online-em 算法 https://livc.io/blog/203 2018-01-05T00:00:00+00:00 Zhao Li https://livc.io/blog/203 EM 算法有很多变体。一次使用所有数据训练的称为 batch em,但它收敛的很慢,online em 能够让收敛速度明显加快,并达到更好的效果。

这篇文章讨论两种 online em 方法,分别是 incremental EM 和 stepwise EM,这两种方法都是每个样本或每个 mini-batch 后做参数更新。

对于 stepwise em 来说,好的 stepsize(后面会介绍)和 mimi-batch 大小十分重要,以词性标注实验为例,stepwise em 在两次迭代后达到 65.4% 的准确率而 batch em 在 100 次迭代后只能达到 57.3%。

如果比较最终收敛时的效果,可以使用一句话来总结:online em 能够更快地达到收敛,但不会取得比 batch em 更好的效果。

Batch EM

概率模型 中的 是输入(比如一句话), 是输出(比如一个parse tree), 是参数分布(比如 grammar rule 概率),而 是充分统计量,可以理解为求解的目标(比如 parse tree 中 rule 的次数)。

batch em 很简单,在 e-step 使用所有样本计算出 ,在 m-step 使用 (一个 batch 后赋值给 )重新估计参数。由于 m-step 的计算很简单,所以表中把它包括在了 中,没有单独列出这个计算步骤。

Online EM

在 online em 中,对第 i 个样本会计算一个充分统计量 ,根据如何把新的 更新到 上的方法分为两种主要的变体。

第一种就是 incremental EM(iEM)。在 iEM 中,首先要把 初始化为所有样本对应 的和,在处理每个样本时需要加上 后减去旧的 ,然后更新

在 Stepwis EM(sEM) 中,引入了 stepsize ,其中 k 是 已经更新的次数。

这个 实际上是一个衰退的过程,也就是在不断学习中要适当忘记旧的统计量。stepsize 一般采用 , 。这个 被称为衰退指数, 越小, 越大,保留旧的 就越少,也就是忘的更快。

在实际训练中很少一个样本一个样本做参数更新的,一般使用一个 mini-batch 来更新,设这个 mini-batch size 为

作者在四个应用上进行实验:POS tagging, Document classification, Word segmentation, Word alignment。结论是与 batch em 相比,在前两个任务中,sEM 能取得更好的效果和更快的速度(相同 iterations),然而在后两个实验中效果并没有太大差别。

作者认为,在一些任务上 sEM 能够提升 accuracy ,比如说 POS tagging 和 Document classification 这种“聚类”任务,这种任务会有一个潜在的 label。然而在 Word segmentation 和 Word alignment 这种“结构”任务中,驱动训练的是组合结构(segmentations 和 alignments),不能达到更好的效果。

在参数的选择上,作者观察到更大的 batch size ( )和更小的 stepsize () 会带来更好的效果。

Reference

  • https://cs.stanford.edu/~pliang/papers/online-naacl2009.pdf
]]>
周鸿祎:一个颠覆者的离经叛道 https://livc.io/blog/202 2018-01-02T00:00:00+00:00 Zhao Li https://livc.io/blog/202 从李志的跨年音乐会归来,回上海的高铁上一口气把周鸿祎的这本自传《颠覆者》的剩余部分读完了,堪称酣畅淋漓。

我对读名人传记一直保持着非常谨慎的态度,现在仍对几年前看到的一个段子记忆犹新:

不要痴迷于从阅读成功人士的传记寻找经验,这些书大部分经过了精致的包装,很多重要的事实不会告诉你。

  1. 盖茨的书不会告诉你,他母亲是 IBM 董事,是她给儿子促成了第一单大生意。
  2. 巴菲特的书只会告诉你他 8 岁就知道去参观纽交所,但不会告诉你是他国会议员的父亲带他去的,是高盛的董事接待的。
  3. 王石的那些自传更不会告诉你,他的前老丈人是当年的广东省委副书记。
  4. 华为的任正非不会告诉你其岳父曾任四川省副省长。
  5. 马化腾不会告诉你他的父亲是盐田港上市公司董事,腾讯的第一笔投资来自李泽楷,李泽楷与盐田港母公司啥关系无需多说。
  6. 任志强不会告诉你他父亲是曾经的商业部副部长。
  7. 潘石屹不会告诉你他的发迹是和女富豪张欣结婚后开始的。

再看现在的 BAT 三家,其实李彦宏的出身是最普通的,然而上帝是公平的,给了 Robin 二马所没有的,那就是脸。举这个段子的例子并不是否认了成功人士的个人努力,而是想强调在一部传记作品中,你只能沿着他们的成长经历去体会学习,而不能将其信奉为唯一的信条。

很多传记都非常不诚恳:主角都是神童,自带光环,从小优秀到大,“顺理成章”地成为一个成功人士,但对背后的故事闭口不提。与此同时,经常使用夸大其词的说法为自己贴金。印象最深的就是李开复《世界因你不同》整本书大量自夸,粉饰履历,我真的是读到一半就放弃了,结合他这几年在公共场合的观点,越来越觉得是个大忽悠。但这本书的名字我还是非常喜欢的,每个人都应该以“世界因我不同”自勉。

传记最应该读什么?读错误。很多前辈做的选择在今天如果以同样的方法重现一遍的话,很可能根本不 work,因为时代的发展太快了。但是他们犯下的错误是有价值的,如果不知道应该怎么做,那就一定要知道不应该怎么做。吴晓波有一个系列,叫做《大败局》,专门分析中国知名企业失败的案例,其实也正是这个道理。

原以为红衣教主这本自传也是鸡汤满满,所以我并没有在第一时间购买它,甚至根本没打算看它。但是,周鸿祎这个人实在是太富有争议了:一直被认为是流氓软件的鼻祖,然后居然自己搞了个杀毒的;经常在社交媒体上“开炮”,几乎和所有巨头都正面撕过;他的敢说敢做、真实直接甚至是偏执,都是中国企业家少有的特点……如果没有周鸿祎,中国互联网会失去很多色彩。

一个最近的例子, 360 借壳江南嘉捷上市 A 股,在媒体说明会上,有记者问为什么最终选择借壳上市,放弃 IPO?周鸿祎拿着稿子读:“360之所以选择重组,还是公司根据资本市场的发展和我们众多股东的意愿,综合各方面的考虑做出的战略性选择。”读到后半句突然笑场,可能是自己都编不下去了,随之现场媒体哄堂大笑……[视频链接]

为什么感觉近几年周鸿祎低调了很多,不再喷人了?我觉得可能是因为在他体量不大的时候,与巨头博弈能带来更多的焦点,而近几年自己也成为巨头,就要防备着其他人来蹭热点。还有一个原因,我觉得可能是 3Q 大战对他的磨砺。

总之,我对这个“异类”的人物形象实在是太好奇了,忍不住还是想读,才意外地发现原来这本自传干货满满,全是猛料,带来远远超出期望的惊喜。

熊孩子时期

读书时期的周鸿祎,并没有太多的异于常人的地方,这也是我认为本书比较诚恳的地方。整本书花了 30% 的内容来介绍这个时期,包括很多琐事,我觉得篇幅比较重。

如果拿几个关键词来总结这个时期,我会选择:优秀、叛逆、极具商业意识。

周鸿祎从小学习出色,读大学也是保送,闲余时间热爱读书,革命书籍、四大名著、外国文学、童话故事、诗歌杂志均有涉猎。“阅读的好处是增进了认知,坏处是助长了性格里的孤傲。阅读习惯让我步入理工男的逻辑世界时,依然拥有人文学科的视野。”

《乔布斯传》的作者曾说:“一个具有强烈个性的人身上集合了人文和科学的天赋后所产生的创造力,是在 21 世纪建立创新型经济的关键因素。”现实生活中不难发现,很多程序员技术很好,却缺乏基本的人文认知,不会与人沟通,这是致命的软肋。

周鸿祎自称“正统教育的出离者”,他的叛逆行为可以体现在:

  • 同学的老乡经常找这个同学蹭吃蹭喝,周鸿祎看不下去(实际跟他没有任何关系),用双截棍敲了对方的脑袋。之后被“江湖人士”报复,头部被啤酒瓶砸开了花,腰也被刀子划了一刀。
  • 无意进入学校计算机系统,将口令文件移走却忘记位置,导致整个计算中心瘫痪。
  • 偷用学校电脑为反病毒卡测试,被警察当作小偷,遭遇逼供,利用仅存的理智找到老师,逃过一劫。
  • 挑战老师,挑战女同学……

从大学开始,周鸿祎就在认真考虑怎么赚钱。他摆摊卖参考书、用电脑给别人“科学算命”、校外兼职、软件公司实习、开设电脑培训班……

开始创业

受《硅谷热》这本书的影响,周鸿祎决定创业,做一个产品疯子。初次创业的反病毒卡,是一个外接电脑的硬件设备,周鸿祎为了卖它奔走各地寻找代理商,最终卖掉了一两千张。但卡不能及时更新,跟不上病毒的变化,因此被历史淘汰也是必然。

此时与团队成员的利益分配观点不一致,导致负责技术的合作伙伴离开团队。虽然第一次创业失败了,但它带来的沟通、谈判、管理和团队建设上的经验仍然是很有价值的。

在这个过程中,周鸿祎还养成了一个收集软件的习惯,他会观察每个软件的界面、文案和设计等,把优点一一记录在小本资上,练就了丰富的产品思维。

第二次,周鸿祎做了一个平面广告创意系统——“飞扬”,实际上就是拼凑了几个国外的软件,然后汉化,加上自己设计的宣传册。不想遇到别要用心的投资人,提供场地给周鸿祎,却想将周的电脑设备占为己有。之后手下的人发现了周鸿祎的产品实际就上把外国软件汉化了,这个人就偷偷把软件偷走,改个名字自己卖。

这时候周才意识到投机取巧的弊端:你能投机取巧,别人也能,而且比你更高明。

两次失败的创业让周头破血流,最终决定去方正上班。在方正教授政府部门的人如何使用电子邮件时,周鸿祎将电子邮件系统拟人化(图形界面),更适合小白用户使用,实际上就是在命令行外面加了一层壳。

这个系统得到了领导的肯定,周想让更多的人使用它,便带人封闭开发。周向上级请示将系统免费开放给大众,对企业用户收费,结果遭到拒绝,公司也不再允许周继续开发这个系统。

中文域名

这时的周鸿祎萌生了中文域名的想法:“为什么互联网的世界,域名一定是英文的呢?”周再次请示上级,结果领导们根本不用互联网,完全是鸡同鸭讲。互联网蓬勃发展时期,方正仍然沉迷出版系统的开发,和市场严重脱节,这最终让周离开方正,决定开始车库式创业。

“中国人上网时不再以 www 开头,不用再输入斜杠和 http,扔掉上网地址本,直接在地址栏输入中文”,3721 应运而生。投资人要求 3721 在 18 个月内上市,而周过于相信了未到账的二次融资,结果被鸽。二次融资四处碰壁让周鸿祎明白了,如果想和国际资本对接,需要有海外背景的人和懂得规范做法的人的帮助,因此请了两个海归。

然而,虽然资金拿到了,但海归文化和土鳖文化开始出现激烈的碰撞,高管想像西方公司一样分散投票权,被周拒绝后他们开始和周作对,最终周鸿祎忍无可忍,将一位 CMO 解雇。

周鸿祎开始竞价拍卖黄金中文网址使用权,如”软件下载“、”免费邮箱“等,这让周鸿祎找到了赚钱模式。

当时周鸿祎和投资人开始聘请一位雅虎副总裁担任创业顾问,他认为 3721 方向有问题,应该做搜索。说完就谁都不理,拒绝沟通。这让周气炸了,开始抵触搜索,甚至让程序员拿掉了网站上的搜索框。就这样,周鸿祎错误地抗拒搜索,突出地址栏的理念,让他犯下又一个错误,给竞争对手(百度)的野蛮生长留下了足够的空间。

这时,周鸿祎遇到了两个竞争对手。

美国企业 RealNames 让普通人在地址栏输入公司名,实现对地址的一键式到达,这和 3721 的业务模式几乎一模一样,并且开始和微软 IE 合作。周想和 RealNames 合作未果,所幸 ReanlNames 未造成太大的威胁。

这时 CNNIC 出现了,它的中文名是中国互联网信息中心,自称有政府背景。CNNIC 想和 3721 签署霸王条款来换取合作:交出技术、注册系统、解析以及源代码等所有的核心机密。这让周开始对 CNNIC 的官方身份产生质疑,经过调查才发现,原来 CNNIC 根本不是一个独立的单位,只是中科院下属的一个科室,根本不属于任何国家政府编制里面的机构。

双方随即公开宣战,然而 3721 实力并不强,当时的职业经理人 CEO 建议缴械投降。这位 CEO 外企工作经验丰富,对员工友善却对管理细节从不接触。具体做法就是从外面招人,不行就换。这其实引出了一个常见的问题:职业经理人和创始人,应该如何选择?大敌当前,职业经理人怎么可能像创业公司创始人一样爱公司呢?周与 CEO 的矛盾濒临爆炸,顿然领悟:3721 找职业经理人找得太早了。自此,周鸿祎重新执掌 3721。

这时,RealNames 宣布和 CNNIC 合作。

周鸿祎从 Flash 插件安装上得到灵感,开始使用插件的方式推广。至此,3721 开始和竞争对手互相删除对方插件,恶性竞争开始。周开始采用“小区域独家代理”的方法跑代理商,在非典期间仍竭力宣传,这让 3721 通过铺天盖地的渠道推广实现商业化。

RealNames 和微软合作终止,周鸿祎抓住机会,与微软达成战略联盟。这时,百度开始崛起了。周找到李彦宏,想和百度合作,希望在百度的搜索框前面放一条 3721 的链接。Robin 听了说:“我觉得 3721 本质上做的也是搜索,以后肯定会有竞争”。此后双方开始在地址栏插件上厮杀,双方你删我我删你,后来 CNNIC 也加入进来,变成了三国大战。百度将 3721 起诉到法院,周鸿祎和 Robin 都亲自出席(当然现在是不可能了)。

经过持续不断的商战后,周鸿祎萌生退意,由于内心还想拿下错过的搜索市场,周鸿祎将 3721 以 1.2 亿美元的价格卖给雅虎,出任雅虎中国 CEO。

情困雅虎

在痛苦的磨合期里,到处都是本土文化和美国公司文化的冲突,这让很多原雅虎员工和高管开始离职。周鸿祎向美国总部建议使用独立品牌优先发展搜索,得到了总部的强烈反对。周鸿祎不得不拿出 3721 被收购的资金开始着手,这样雅虎没有任何资金投入,也就默许了。

外企职业经理人是一个非常尴尬的位置。周想把搜索品牌嵌入到王小丫的《开心辞典》中,向总部申请 500 万推广费被拒绝。申请中国用户邮箱 ID 独立后,遭到老雅虎年轻员工不合作的态度,周将其开除后收到雅虎总部措辞严厉的调查邮件;建议雅虎中国进军网络安全领域,再次遭遇冷漠……

这时周鸿祎才明白,自己只是雅虎的一次财务投资,想在这个平台上实现自己的理想,真的是想多了。在外企里,每一件事都需要极长的决策时间,都想当和事佬,大家只要能够保住自己的位置,少得罪人,就是一种成功:

2005 年的雅虎中国,需要的不是一个耳听八方、野心勃勃的将士,而是一枚言听计从的棋子。

离开雅虎,周鸿祎反省自己:

  1. 对杨致远的崇拜心理,导致自己不够自信,在应该竭力坚持的时候选择了妥协。这一点在我们今天看来,叫做不要迷信权威。
  2. 没有理顺跨国公司的重重上报的制度,不会用精彩的 PPT 交流想法,作为国内摸爬滚打出来的创业者,依靠的更多是直觉。
  3. 对公司绝对的控制权、话语权的掌握至关重要。马云曾问周鸿祎,跟雅虎合作的体会是什么,答:无论怎么样,不能失去公司的控制权。

分手后,雅虎高层也开始反思雅虎中国和 3721 合并失败的案例,结论是:必须完全放弃对本土公司的控制权。

此后,雅虎中国与阿里巴巴置换股权,雅虎进入马云时代。

“一个艰难的决定”

离开雅虎后受限于竞业协议,周鸿祎做了一年的天使投资,看着蓬勃发展的百度,周鸿祎坚定了搜索模式的重要性。但他已经错过了最好的机会,就要必须接受别人的成功。

周鸿祎认为:如果一个事别人已经做了很久并且很成熟,没有破绽,你用同样的方法再去做,肯定没有机会。打败搜索的肯定不是第二个搜索,打败 QQ 的肯定也不是第二个 QQ。这让我想起了马化腾的一句话:“我们什么都没有做错,就错在我们变老了。”

在竞业期结束时,周鸿祎和老搭档齐向东开始集中力量做社区搜索——奇虎。因为那时很多社区内的即时信息人们无法获取,也搜不到,周想利用这些机会与百度避开正面竞争。

这是周鸿祎截至目前的最后一次创业,然而社区搜索并没有收到预期的效果,因为那时互联网用户尚未细分得如此深入,用户更需要的是网址导航类的简单垂直服务。这时周鸿祎又犯了不专注的错误:将触角伸向了短信、彩信、图铃下载、播客、音像搜索等无线业务,但无一聚焦,无一强大到产生足够大的收入。

社区搜索的失败,周鸿祎又总结了几个教训:

  1. 创业团队豪华:有技术、有经验、有钱、还跟百度单挑过。但心态浮躁,觉得自己无所不能。
  2. 仍然以平台化思想为主,没有聚焦于一个切入点,忘记了要专注。就像女人生二胎一样,不能因为有了生孩子的经验,就想加大努力两个月就生出来。

这时,2006 年,流氓软件开始横行,严重干扰上网体验,人们把所有流氓软件的罪名都加到了周鸿祎的头上。周鸿祎认为自己只是率先使用插件推广模式,后来人在模仿它时出现的升级改造、瞒天过海的奇招损招都没有他的参与。周鸿祎突然发现,自己打开的潘多拉盒子,只能自己亲手关上。

因为这个,早期的 360 安全卫士起步了,最初团队不到十个人,而且完全没有商业动机,更没有想到未来要做免费杀毒、浏览器、做搜索。做 360 的原因很简单,就是要把流氓软件干掉。

其实,现在我们使用的很多产品早就驶离了创业初期的规定航线。比如腾讯最初就是想做个寻呼机系统,根本没想到最后做成了一个 PC 端的 IM 工具。这带来的启示就是,任何时刻都不要规划太过长远的目标,而要活在当下。

360 系列的免费策略横空出世,让国内一片惊呼,360 用户数逼近 3 亿,这就是免费带来的颠覆性力量。归功于安全卫士和杀毒获取的海量用户,360 的商业化模式异常顺利:安全浏览器市场占用率位居第二,仅次于 IE。360 的利润来源涵盖了网址导航、搜索分成、软件下载、游戏运营等诸多方面。这时,腾讯来了。

关于 3Q 大战,我并不想在这里讲述来龙去脉了。这是中国互联网上最为著名的一次战役,也值得被选入商学院和法学界教学案例来仔细研究,在周鸿祎这本书和《腾讯传》中都有大量的篇幅描述。经典的“一个艰难的决定”的“二选一”声明,也是中国互联网前所未有的。

与此同时,360 正在紧张地准备上市,3Q 大战的爆发,让主承销商决定撤退。

3Q 大战以政府的介入告终,360 与 QQ 恢复兼容,中国互联网恢复宁静,一场史无前例的反思也随之而来。

腾讯邀请专家做了多次“诊断腾讯”的研讨会,为未来企业制定下更加开放的战略。腾讯开始从自建网络帝国的商业模式过渡为通过收购、投资和兼并的方式来构建生态圈。

奇虎 360 一战全球成名,在美国纽交所的 IPO 总计获得 40 倍超额认购,是 2011 年中国企业在美国最成功的 IPO 交易之一。

这里面有一个很有意思的事是,3Q 大战期间有一天早上 360 出现了 30 多个警察,周鸿祎急忙出逃香港;腾讯起诉 360 不正当竞争,360 起诉腾讯反垄断的两个官司,360 都输了,书里特意指出了审判长的名字——奚晓明,并加上了注释:2015 年严重违纪被开除党籍。

这个细节很值得玩味,红衣教主似乎在暗示着什么不能说的秘密。其实腾讯送进监狱的人不少了,珊瑚虫 QQ、快播、刘春宁等等,听说腾讯在南山法院没输过……

这本书以 360 上市美股为时间终点,之后的私有化和上市 A 股,未来周鸿祎可能还会写一本书来介绍。总体来说,书中的内容是比较客观和理性的,几次商战看了真的感觉像在打仗一样,战场上的快意恩仇、指点江山、命悬一线,加上周鸿祎火爆直接的人物形象,在人脑海中挥之不去。

有一些很有意思的事件,本书并没有提及。比如 360 安全卫士的功臣傅盛的离职,这里面的恩怨情仇又是一堆讲不完的故事。当然,商场上很难评判谁是谁非,“小孩才分对错,大人只看利弊”。

360 是几个科技巨头中唯一上市 A 股的公司,这段时间周鸿祎也在公众场合多次宣称 360 要做”网络安全的国家队“,可见其野心远远不止于此。未来,是周鸿祎带领 360 更进一步,成为寡头?还是归尘归土,重新创业?这可能要在下一本书中寻找答案。

]]>