基于RNN实现加法

知乎上有人问题了个有趣的问题:

深度学习能够学会加法吗?

撇开所谓的哲学意义不谈,已经证明了通过RNN可以模拟实现图灵机,这篇神奇的论文看这里。我的大致理解是,图灵机也是一种模式匹配,而只要有足够多的学习样本,RNN总是可以学会这种模式匹配的。

假设我们要让神经网络学会3位数的加法,比如111+222=333,123+987=110,注意为了简单期间,我们不考虑最高位的进位。

加法可视为两个加数构造的序列来预测作为和的序列,因此可以用RNN来实现。示意图如下:输入序列、输出序列长度均为3,使用一层RNN存储进位信息。输入输出均使用one-hot编码后,输入特征数为20,输出特征数为10,中间层使用RNN,其隐藏节点数设为32。

addtion-by-rnn-1

使用keras搭了一下模型,图示如下:

addtion-by-rnn-2

代码如下:

注意为了画上述示意图,需要安装Graphviz

# -*- coding: utf-8 -*-

from keras.models import Sequential
from keras.utils import plot_model
from keras import layers
import numpy as np

import os
os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'

class CharacterTable(object):
    """
    one-hot encode/decode
    """
    def __init__(self, chars):
        self.chars = sorted(set(chars))
        self.char_indices = dict((c, i) for i, c in enumerate(self.chars))
        self.indices_char = dict((i, c) for i, c in enumerate(self.chars))

    def encode(self, C, num_rows):
        x = np.zeros((num_rows, len(self.chars)))
        for i, c in enumerate(C):
            x[i, self.char_indices[c]] = 1
        return x

    def decode(self, x, calc_argmax=True):
        if calc_argmax:
            x = x.argmax(axis=-1)
        return ''.join(self.indices_char[x] for x in x)

TRAINING_SIZE = 50000
DIGITS = 3

chars = '0123456789'
ctable = CharacterTable(chars)

questions = []
expected = []
seen = set()
print('Generating data...')
while len(questions) < TRAINING_SIZE:
    a = ''.join(np.random.choice(list('0123456789')) for i in range(DIGITS))
    b = ''.join(np.random.choice(list('0123456789')) for i in range(DIGITS))
    key = tuple(sorted((a, b)))
    if key in seen:
        continue
    seen.add(key)

    ans = str((int(a[::-1]) + int(b[::-1]))%1000).zfill(DIGITS)[::-1]
    
    questions.append((a,b))
    expected.append(ans)
print('Total addition questions:', len(questions))

print('Vectorization...')
x = np.zeros((len(questions), DIGITS, len(chars)*2), dtype=np.bool)
y = np.zeros((len(questions), DIGITS, len(chars)), dtype=np.bool)
for i, (a, b) in enumerate(questions):
    x[i] = np.column_stack((ctable.encode(a, DIGITS), ctable.encode(b, DIGITS)))
for i, ans in enumerate(expected):
    y[i] = ctable.encode(ans, DIGITS)
    
print('Split data...')
indices = np.arange(len(y))
np.random.shuffle(indices)
x = x[indices]
y = y[indices]

split_at = len(x) - len(x) // 10
(x_train, x_val) = x[:split_at], x[split_at:]
(y_train, y_val) = y[:split_at], y[split_at:]

print('Training Data:')
print(x_train.shape)
print(y_train.shape)

print('Validation Data:')
print(x_val.shape)
print(y_val.shape)

HIDDEN_SIZE = 32
BATCH_SIZE = 128

print('Build model...')
model = Sequential()

model.add(layers.SimpleRNN(HIDDEN_SIZE, input_shape=(DIGITS, len(chars)*2), return_sequences=True))
model.add(layers.TimeDistributed(layers.Dense(len(chars))))
model.add(layers.Activation('softmax'))
model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

print('Plot model...')
model.summary()
plot_model(model, to_file='model.png')

print('Training...')
ITER = 20
for iteration in range(ITER):
    print()
    print('-' * 50)
    print('Iteration', iteration)
    model.fit(x_train, y_train,
              batch_size=BATCH_SIZE,
              epochs=1,
              validation_data=(x_val, y_val))
    print("10 validate examples:")
    for i in range(10):
        ind = np.random.randint(0, len(x_val))
        rowx, rowy = x_val[np.array([ind])], y_val[np.array([ind])]
        preds = model.predict_classes(rowx, verbose=0)
        question = ctable.decode(rowx[0][:,:10]) + '+' + ctable.decode(rowx[0][:,10:])
        correct = ctable.decode(rowy[0])
        guess = ctable.decode(preds[0], calc_argmax=False)
        print('Q', question[::-1], end=' ')
        print('A', correct[::-1], end=' ')
        print('√' if correct == guess else '×', end=' ')
        print(guess[::-1])

能在较短时间内训练到100%的准确率。毕竟,这个模式识别起来不太复杂。

至于如何让机器理解什么是加法,这就是另外一个问题了,毕竟我们也难以理解人类是如何学会理解加法的,甚至人类是否理解加法都不知道。

朝闻道家庭基金2017年报

2017年开始仔细记录家庭投资资金的详细进出,经统计,若按净值法计算,2017年收益率为103%。这种计算方法比较简单,但是如果在净值高点增资太多,则计算结果容易变形:如果增资后一路下跌,可能真正的损失已经超过之前的浮盈,而按净值法计算仍然是赚钱的。公募基金是按净值法计算的,而韭菜都爱在市场火热的高点买基金,这也就是很多基金统计净值一路上扬,而投资者不见得赚得到钱的原因:追涨杀跌。

适合个人使用的更精确的统计方法是资金加权收益率,也就是计算现金流的资本内部回报率,用Excel的XIRR公式可以很方便的计算出来,据此计算2017年收益率为101%,对我的实际情况而言,两种计算方法差别不大。总的来说,今年的收益翻倍了,这是大大高出我年初10%~15%的预期的。

收益率 资金加权收益率(XIRR) 时间加权收益率(净值法)
2016 25.26 % 25.26 %
2017 101.04 % 103.87 %
平均 63.36 % 59.80 %

回顾2017年的投资策略,可以总结为守正出奇:大仓位的股权仓位,持有蓝筹股分仓打新,此为守正,小仓位的区块链投资,此为出奇。至于效果如此之好,也只能归结为运气好了。对此应当有清醒的认识,要不断提高自己收益中的确定性部分,而少依靠虚无缥缈的运气,千万不要以为收益高就是自己水平高。

股权投资

在我年初定下分仓打新的策略时,并不太清楚什么样的股票最适合作为打新标的,但是基本判断未来中国会持续消费升级,公司发展的蛮荒时代可能渐渐过去,在一些领域形成赢家通吃的局面,所以选择打新门票的原则基本上就是熟悉的各行业龙头,比如茅台、格力、万科等,其中茅台、格力买完就一路上涨,万科则一度浮亏20%以上但是后来也一路上涨了。在后续不断补仓的过程中,才慢慢考虑是否有一些行业偏向低估,因此补充了一些银行股和有龙头潜质的公司。有一种投资理念叫“低估分散不深研”,因为散户确实很难把公司研究透,即使是机构也很难,我基本上认同这种理念,我“浅研”的基本标准有三点:

  1. 增长逻辑:有一个我认为简单易概况的未来的增长逻辑,在这个逻辑没有变化前,买入后一直持有,比如茅台的逻辑是白酒消费升级,茅台有一定提价能力,能抗通胀,格力的逻辑是多年的技术积累,强大的运营能力,在空调收益安全垫的基础上极有可能发生技术迁移产生超额收益。
  2. 股东回报:多方看看对公司的评价,看是否有欺骗股东的行为,最好是尊重股东、能合理分红的公司,像茅台和格力都是能长期稳定分红的好公司。
  3. 估值较低:考虑到股价,当前估值相对比较低。对于这一点,其实我还远远不能真正准确估值,主要也就看看历史PE、PB,同类公司的PE、PB等,所以可能我也买了不少估值偏高的股票。

另外很重要的就是分散了,看看历史(出长牛股的行业),再看看未来,我基本上确定的几个行业方向是:消费、医药、金融,其他方向还在探索之中,目前股票分散为二十支左右,如果不是要打新,我可能会考虑指数基金,一般认为小资本没有必要这么分散,但是我自认为研究能力有限,对买入的股票并没有十足的信心,也只能分散一点了。

现在有一个说法是2017年是中国的价值投资元年,如果开着后视镜这样说也未尝不可。对我来说,实在没有什么投机的天赋,本金也不多,也只能老老实实赚打新的钱了。新股是个修罗场,不管这个公司是干啥的,都会多个涨停,开板就卖出的老实人赚的其实是炒作的第一波红利,类似步长药业这种新股,股价翻上了天,慢慢又跌到破发,其实也是A股的一个特色,这个特色应该不会持续多久了,新股直接破发的时候,A股会变得像美股或港股一样正常一点,但这个老实人红利就不存在了。我没有单独仔细计算股权投资的收益率,按照我在雪球的模拟盘估算,大致为79%,估计实际由于打新会更高一些。

区块链投资

2017年,比特币价格涨了10倍不止,我虽然仓位很小,也算是参与了一场伟大的试验,获得了一些浮盈。比特币以目前的价格(约$13000),上下的幅度可能都会高达20倍,看起来确实不适合作为投资产品而只是投机品。但是我试图从资产配置和价值投资的角度来看待以比特币为代表的各种区块链资产:

  1. 比特币有深厚的数学、经济学理论基础,它确实在解决或者至少试图去解决一些问题,它带有极大的实验成分,因此定价非常困难,有点像风险投资,甚至比风险投资的不确定性更大,但是这却是普通人能参与“风险投资”的绝佳途径,让渡一部分自己的劳动成果,去鼓励区块链的发展,参与一场社会学试验,可能带来丰厚的回报;
  2. 投资比特币或者其他区块链资产,仍然像选股票一样,要注重基本面:它是否在解决真正的问题,是否真正提出了好的解决方案,如果无法看懂它们的价值,最好不要投资,如果看不懂还一定要投资,需要极大的定力,看不懂时品种的选择则可以很简单:买市值最大的几种。
  3. 低仓位参与,最好是其他投资的收益能安全的覆盖掉区块链投资的本金,比如股权投资预期收益10%左右,那么拿5%左右的本金来投资区块链,从资产配置的角度来说,往下是可以保本的,而往上,则可以期待区块链资产10倍的涨幅,为资产组合贡献50%的涨幅。
  4. 更严格的说,投资区块链的钱要当已经丢掉了,我买比特币的钱主要是来自别人借我很久都不还的钱,俗话说“还回来的钱当捡的钱”,虽然金钱本质上都是平等的,但是建立好心理账户,才能应对区块链资产价格上下几十倍的振幅。
  5. 我认为对一般人而言,看待区块链资产价格波动的最重要的是无视它,不成功便成仁,要么该技术成为主流技术,价值高到改变你的资产位数,要么价值归零,自认倒霉。我见到无数的聪明人在为比特币的价值争吵,很多我尊敬的投资者有看好的,也有认为一文不值的,这巨大的分歧是巨大的机会,也告诫我平常心看待价格的涨跌,放弃一切预测和“操作”,这样投资也不会占用你太多的时间。

2018年的期待

  1. 2018年的收益率目标仍然和2017年一样,是10~15%,考虑到打新收益可能越来越少,只能期待2017年后续配置的一些相对低估的品种有好的表现吧。2017年极有可能是我投资生涯收益率最高的一年,高兴过后还是面对现实吧。
  2. 能够开始接触港股、美股,持续优化自己的资产配置结构,完善自己的选股标准,开始学习量化投资,建立1~2个中长期量化模型。

附录:2017年净值增长表

时间 净值 沪深300(比率)
20160101 1.0000 3470.41 (1.0000)
20161231 1.2526 3297.76 (0.9503)
20170126 1.2566 3387.96 (0.9762)
20170226 1.3245 3473.85 (1.0010)
20170331 1.3604 3456.05 (0.9959)
20170430 1.4060 3439.75 (0.9912)
20170531 1.5623 3492.88 (1.0065)
20170630 1.7505 3666.80 (1.0566)
20170731 1.7594 3737.87 (1.0771)
20170901 1.9810 3830.54 (1.1038)
20170930 1.8337 3826.50 (1.1603)
20171031 2.2097 4006.72 (1.2150)
20171130 2.2339 4006.10 (1.2148)
20171231 2.5537 4030.85 (1.2223)

期末持仓品种:

  1. A股除可转债外共23支股票:
    1. 家用电器:格力电器、美的集团
    2. 食品饮料:贵州茅台、伊利股份、涪陵榨菜、汤臣倍健
    3. 房地产:万科A、华夏幸福
    4. 银行:平安银行、建设银行、民生银行
    5. 非银金融:中国平安
    6. 汽车:福耀玻璃
    7. 计算机:分众传媒、海康威视
    8. 建筑装饰:中国建筑
    9. 休闲服务:中国国旅
    10. 纺织服装:歌力思
    11. 医药生物:恒瑞医药
    12. 商业贸易:永辉超市
    13. 纺织服装:歌力思
    14. 化工:利尔化学
    15. 建筑材料:海螺水泥
    16. 其他:少量可转债。
  2. 基金:广发中证养老产业指数A、富国中证红利指数增强、广发中债7-10年期国开行债券指数。
  3. 区块链资产:BTC、BCH、EOS等。
  4. 其他:少量拍拍贷散标。

朝闻道家庭基金201711月报

本周蓝筹股在月中爆发式增长,然后在月底持续回调,本月股票收益基本收平。借着优化打新账户的机会,对持仓进行了较大的调整:

  1. 清仓老板电器、苏泊尔,认为估值偏高;
  2. 清仓双汇发展、雅戈尔,认为未来成长性不大;
  3. 暂时清仓宇通客车、中国巨石;
  4. 加仓格力电器、认为估值偏低,看好智能制造;
  5. 建仓民生银行,华夏幸福,认为银行和地产为估值洼地;
  6. 建仓分众传媒,看好线下场景垄断;
  7. 建仓歌力思,看好高端女装消费升级;
  8. 持有新股润禾材料。

比特币价格突破10000美金,主要的利好包括:美国芝加哥交易所和纳斯达克交易所拟推出比特币期货,比特币分叉活动热火朝天,本月产生了BTG,BCD等两个分叉币。国内交易所大多换了个马甲继续营业,通过C2C交易可以比较方便的变现。对数字资产的计价做如下调整:

  1. 按照BitKan全球指数的90%计价比特币;
  2. 考虑到极高的风险,对不掌握私钥的数字资产不再计价,等获得私钥时再计价。

经过这样的处理,保证所有的数字资产能真正的按价格及时变现。调整后数字资产和上月基本持平。所以最终基金净值和上月基本持平。

拍拍贷散标累计年化收益率16.63%,监管部门规定现金贷费率不能超过36%。

时间 净值 沪深300(比率)
20160101 1.0000 3470.41 (1.0000)
20161231 1.2526 3297.76 (0.9503)
20170126 1.2566 3387.96 (0.9762)
20170226 1.3245 3473.85 (1.0010)
20170331 1.3604 3456.05 (0.9959)
20170430 1.4060 3439.75 (0.9912)
20170531 1.5623 3492.88 (1.0065)
20170630 1.7505 3666.80 (1.0566)
20170731 1.7594 3737.87 (1.0771)
20170901 1.9810 3830.54 (1.1038)
20170930 1.8337 3826.50 (1.1603)
20171031 2.2097 4006.72 (1.2150)
20171130 2.2339 4006.10 (1.2148)

期末持仓品种:

  1. A股除新股外共覆盖11个行业18支股票:
    1. 家用电器:格力电器、美的集团
    2. 食品饮料:贵州茅台、伊利股份、涪陵榨菜
    3. 房地产:万科A、华夏幸福
    4. 银行:平安银行、兴业银行、民生银行
    5. 汽车:福耀玻璃
    6. 计算机:分众传媒、海康威视
    7. 建筑装饰:中国建筑
    8. 休闲服务:中国国旅
    9. 纺织服装:歌力思
    10. 医药生物:恒瑞医药
    11. 商业贸易:永辉超市
    12. 其他:润禾材料(新股)。
  2. 基金:广发中证养老产业指数A、富国中证红利指数增强、广发中债7-10年期国开行债券指数
  3. 其他:拍拍贷散标、比特币(及比特币算力)。

朝闻道家庭基金201710月报

基金净值自成立以来首次突破2.0,原因有两个:一是以茅台为代表的蓝筹龙头股再度大涨,沪深300指数终于突破4000点,二是比特币价格突破6000美金。

贵州茅台股价突破600,甚至一度突破650。说实话已经偏向高估了,不过我做好了坐过山车的准备,所以会一直拿着。其他如海康威视也屡创新高。

本月股票唯一的操作是新股华阳集团开板后卖出,买回之前凑钱卖掉的伊利股份和格力电器,中签的收益全部加仓中国建筑,目前是支没人要的龙头股,市盈率不到10。

对比国内交易所关闭时的恐慌价格,比特币翻了一倍不止,所以拿着不动是最简单的也是最难的。

拍拍贷散标累计年化收益率16.79%,拍拍贷公司将在美国上市。

时间 净值 沪深300(比率)
20160101 1.0000 3470.41 (1.0000)
20161231 1.2526 3297.76 (0.9503)
20170126 1.2566 3387.96 (0.9762)
20170226 1.3245 3473.85 (1.0010)
20170331 1.3604 3456.05 (0.9959)
20170430 1.4060 3439.75 (0.9912)
20170531 1.5623 3492.88 (1.0065)
20170630 1.7505 3666.80 (1.0566)
20170731 1.7594 3737.87 (1.0771)
20170901 1.9810 3830.54 (1.1038)
20170930 1.8337 3826.50 (1.1603)
20171031 2.2097 4006.72 (1.2150)

期末持仓品种:

  1. A股:贵州茅台、双汇发展、伊利股份、恒瑞医药、格力电器、美的集团、老板电器、苏泊尔、中国国旅、宇通客车、福耀玻璃、万科A、雅戈尔、平安银行、兴业银行、涪陵榨菜、中国建筑、海康威视、永辉超市、中国巨石。
  2. 基金:广发中证养老产业指数A、富国中证红利指数增强。
  3. 其他:拍拍贷散标、比特币(及比特币算力)。

停止日更

从今年元旦开始,每天更新一篇博客,已经约280天,如果我愿意的话,可以像行为艺术一般坚持下去,不过我觉得坚持日更的目的已经达到了,它拉动了我思考学习的进程,但是非要每日一更已经成为一个负担,真正有创造性的东西要日更几乎不可能,而片言只语式的更新只能算是微博,如果只是读书笔记又其实不适合用博客的形式写出来。接下来博客的写作主要做以下几件事:

  1. 由日更变为周更,每周1~2篇质量较高的,有一定创造性的文章;
  2. 将过去的博客中原创性较低的读书笔记以gitbook的形式重新整理发布到learn子域名;
  3. 整理过去的博客,修正错别字,有一些内容不完善的补充完善;
  4. 对有价值的内容在主页上做好导航。

学习、创造与分享

今天看到一个说法,说爱学习也可能是一种懒惰的行为,对于国庆七天都在写Python代码的我来说,这是一种很刺激的说法。

对大部分人来说,让他们学新东西是很要命的东西,但也有一部分人,很喜欢学习新的东西,把学习当成一件有乐趣的事情,终身学习,“活到老学到老”是他们的信条,所以我之前一直把“活到老学到老”这句话作为博客的口号。但是今天我认真思考了一下,察觉到这是不够的。

学习这一行为,基于学习者不同的主动程度,会体现出不同的创造性,随便看看公开课视频、朋友圈文章,看看罗辑思维,也可以算是学习,而在教程的指引下写出自己的一个小程序,也是一种学习。学习和创造的界限不是那么分明的,但是总归学习还是偏向于自我修炼,产生变化的主要是自己的脑子,而创造则需要将自己的想法作用于现实世界,所以创造不是空想。

在物质文明越来越发达的今天,精神文明产品创造的意义日益凸显,如果你有好的想法,做成了好的产品,借助于信息时代的传播工具,其复制成本会接近于零,今天游戏产业和电影产业都非常挣钱,其实它们都是精神层面的需求。所以在信息时代,分享是非常简单的,重要的是你的创造。

我没有谈到钱或者价值的问题,因为显而易见,如果创造物是有价值的,那么借助网络效应,很容易获得相应的价值回报。

仔细分辨的话,我的学习中似乎是有一些躲在舒适区的懒惰,但是这都不重要,重要的是更加注重创造,这是三者中最重要的一环。

Peter Norvig的编程建议

Peter Norvig是Google的大牛之一,他在Udacity开了一门课计算机程序设计,用Python语言讲授,这门课程的实践性很强,下面是他在课程中提到的一些编程建议:

  1. 修改程序的几个维度:正确、效率、特性、优雅,需要在几个维度间平衡,更优雅的代码对软件改进没有直接作用,但可以为未来可能的修改打下更好的基础,而重构就是修改代码使其更优雅。
  2. 程序员应当善用别人的代码,提现在两个层次,一个是编程语言的库,应当熟悉常用的并善于查文档,二是一些大的功能模块,比如网页服务器、Email通信组件等。
  3. 学习一些高级的复杂的语言特性,应当去理解这个语言特性解决的痛点是什么,这是它出现在这个语言中的原因;
  4. 好的代码要长还是短,取决于是否清晰的进行了沟通,即别人能否容易读懂你的代码,太长或太短都可能影响沟通;
  5. 自顶向下设计还是自底向上设计,取决于对问题的清晰理解在哪个层次,如果对问题的大尺度理解很清晰,就适合自顶向下设计,不要害怕写一些代码桩。反之,如果大尺度都不清楚,则可以写一些已经分析清楚的小模块,然后进行组合试验。
  6. 现在学习编程的条件很好,但是要注意多和他人沟通,多向他人学习。
  7. 针对问题,可以先找到快速,dirty的解法,并估算算法的复杂度,看是否有必要进一步优化,优化应当建立在分析焦点操作的基础上。
  8. 在必要的时候,要认真读文档。
  9. 读代码要主动,最好在IDE环境下读,改一改看结果会怎样。要有整体读代码,获取架构的能力,也要有读片段,迅速找到所需的能力。
  10. 智力游戏问题定义清晰,而又足够复杂,很适合进行编程训练。
  11. 在三种情况下考虑递归:
    1. 数据结构本身时递归定义的,比如二叉树
    2. 有数学递推式
    3. 能够进行尾递归优化

朝闻道家庭基金201709月报

基金净值自成立以来第一次出现月度下降,原因有两个:一是国内叫停ICO之后又关闭比特币交易所,比特币价格回调,二是个人对部分资产计价使用了更加保守的方式。

单就股票账户而言,本月其实大幅上涨,贵州茅台股价突破500,伊利股份节前大涨两天,之前被埋的中国国旅、永辉超市,被深埋的万科A,都大幅上涨,取得浮盈。本月唯一的操作是最后一个交易日卖出部分伊利股份和格力电器凑钱,因为中签新股华阳集团,中签的收益要体现到下个月了。

本月比特币市场可谓风云突变,国内叫停ICO后,有小道消息称将关闭交易所,大部人还不相信,我是相信的,但是因为种种条件限制,加上没有时间,在国内外市场差价四五千的阶段也只是看看而已,所采取的唯一措施就是启用了自己的冷热钱包,将所有在交易所的BTC提现,BCC卖出换取BTC,在大的浪潮来临时,很容易发现什么是真正可能有价值的。月底各大交易所停止交易,国际市场币价逐步回升到之前的水平。之前用比特币买了一些算力,也投资了一点比特币储蓄产品,现在看来都是错误的方向。数字货币依然在试验阶段,币只有拿在自己手上才是最安全的,以后还是安心做一个屯币党吧,最简单的投资方式往往才是最有效的。

出于安全考虑,以后比特币资产计价将按国际主流交易所美元计价计算,然后折价20%汇兑损失。算力资产将按100%折旧计算,即不计入资产。

拍拍贷散标累计年化收益率16.50%,本月开始,拍拍贷资产计算使用了更加保守的方式,计提坏账之外,还剔除了待收收益,我觉得是负责任的好事。

时间 净值 沪深300(比率)
20160101 1.0000 3470.41 (1.0000)
20161231 1.2526 3297.76 (0.9503)
20170126 1.2566 3387.96 (0.9762)
20170226 1.3245 3473.85 (1.0010)
20170331 1.3604 3456.05 (0.9959)
20170430 1.4060 3439.75 (0.9912)
20170531 1.5623 3492.88 (1.0065)
20170630 1.7505 3666.80 (1.0566)
20170731 1.7594 3737.87 (1.0771)
20170901 1.9810 3830.54 (1.1038)
20170930 1.8337 3826.50 (1.1603)

期末持仓品种:

  1. A股:贵州茅台、双汇发展、伊利股份、恒瑞医药、格力电器、美的集团、老板电器、苏泊尔、中国国旅、宇通客车、福耀玻璃、万科A、雅戈尔、平安银行、兴业银行、涪陵榨菜、中国建筑、海康威视、永辉超市、中国巨石、华阳集团
  2. 基金:广发中证养老产业指数A、富国中证红利指数增强。
  3. 其他:拍拍贷散标、比特币(及比特币算力)。

iPad1电子相框制作

闲置的ipad1基本上没有什么用了,大部分看视频的软件都不再适配iPad1,不过iPad本身就有电子相框功能,所以把iPad1彻底变成电子相框是个不错的主义。

1 硬件准备

首先,买点3M的无痕魔力扣,像这样的,用起来像魔术贴一样。

高曼™ 无痕魔力扣中号

用这个挂iPad绰绰有余,而且不用在墙上打洞,具体方法请参看3M产品的说明书。

还要在适当的位置准备一个电源接口,怎么隐藏一下这就是个人发挥的艺术了,一般来说iPad充一次电还是能用蛮久的。所以可以不必一直插着电用。

2 软件准备

iPad删除所有能删除的程序,连上WiFi,到App Sotre装一个QQ,新版的QQ自然装不上,但是App Store会提示你安装历史版本,这样就行了。

在Windows或Mac系统上挑选自己喜欢的照片,统一存放到一个文件夹中。

iPad连上Windows或Mac系统,点开iPad管理界面,使用iTunes的照片同步功能,选择你挑好的文件夹将其同步到iPad。具体的操作可以参考这里

把iPad电源关掉,然后打开,看到锁屏界面,点一下滑动解锁旁边的电子相框按钮即可进入电子相框模式。此外,在iPad的设置中也有电子相框设置可以调节效果。

将iPad挂上墙

3 后续维护

如果有大量的照片需要更新,可以将iPad取下来(这也是3M无痕魔力扣的方便之处),重新进行照片同步,注意同步会把之前同步的照片先删除

如果只是零星的照片想上墙,直接在其他设备如电脑、手机登陆QQ,iPad也登陆QQ,通过QQ传送文件到“我的平板电脑”即可。

使用netlify改善github pages服务

一直很喜欢github pages,所以一直用着,但是有两个问题一直很难一起解决:

  1. github因为某事件屏蔽了百度的爬虫,博客在百度上搜不到,通过在个人主机或coding pages建立镜像,然后用dnspod分流的方法可以解决;
  2. github pages支持强制https,支持自定义域名,但还不支持自定义域名的强制https。可以用cloudfare的cdn服务解决。

但是上述两个问题很难同时解决,虽然我有个人主机,但是懒得用来托管博客。今天发现netlify服务解决了两个问题。基本步骤如下:

  1. netlify在注册后,可以申请权限接通你的github pages的repo;
  2. 然后简单配置一下部署命令,对jekyll来说,命令为jekyll build,生成的文件目录配置为_site
  3. netlify可以修改子域名为yoursite.netlify.com,然后也可以配置自定义域名,将dns的CNAME记录指向yoursite.netlify.com即可。
  4. 开启https服务(可以用自己的证书,也可以用netlify自带的Let’s Encrypt证书),以及强制的https转换。
  5. 以后,只要你向github提交更新,netlify就会通过钩子自动重新执行jekyll build命令部署站点。

测试了一下,国内访问会被cdn到日本节点,速度还算可以。