原油期貨跌到負值紀念文

今年詭異的事情真多, 這次紀念原油期貨的歷史性價格. 有人用很便宜的價錢買了原油期貨, 預期頂多跌到 0 元, 但想不到它竟然可以負很大, 導致慘賠畢業. 元大石油追蹤的 NYMEX西德州 (WTI) 輕原油期貨創下了前所未有的紀錄. 雖然現貨還是正的, 但期貨結算變成負值, 我想已經改寫人類歷史了.

minus-oil-768x641

抄油價的底是很多人都想做的事. 大約 3/16 左右就有高手高手高高手買進 RDS.B. 既賺到差價, 又享受 RDS.B 免預扣美國 30% 的配息所得稅. 不過這只是單一一家公司, 不是 ETF, 我不太敢買. 後來 “秒選" 了 XLE 這個 ETF, 畢竟這裡面有好多家. 無論油價怎麼低, 加油站都可以活得下去吧? (Philips 66 好歹我也光顧了幾次).

rds.b-6-month-1-768x628

說 “秒選" 是因為我從來沒有研究過石油 ETF, 那些追蹤個股? 那些追蹤期貨也搞不清楚. 總之, 抱著再不買就來不及上車的想法, 很快抓了內容比較豐富的 XLE. 至少五大石油公司涵蓋了 EXXON, Chevron. 另外三大就是 SAOC (有保證配息, 我很想買但美國沒掛牌), RDS.B 和 BP. 

XLE-6-month-620x200

目前看來, 兩支股票反彈的幅度差不多. 如果回到去年配息的話,  RDS.B 是配 3.76 元, XLE 是配 5.284 元. 5.284 打七折後 3.6988 元和 RDS.B 差不多. 不過 XLE 是去年Q4 一次配超多, 正常來說美季都是 0.5 出頭. RDS.B 的常態是每季配 0.94. 所以 RDS.B 的殖利率才是可供參考的. (0.94 x 4) / 36.8 = 10.21 %!!

最後回顧一下在秒選名單中的 USO. 由於它主要追蹤期貨, 故反彈狀況也是不佳. 雖然老巴近年來可信度大減, 但買股票就是擁有公司的觀念還是深植我心 = 買期貨就是賭博.

USO-6-month-768x630

對了! 我本來以為 RDS.B 就跟波克夏 B 股一樣, 結果 RDS, RDS.A, RDS.B 雖然是同一家公司, 但是課稅比例完全不一樣. 只有 .B 是免稅的 [1].

[後記]

剛寫完就看到 RDS.B 要砍配息 [2]. “The first oil “supermajor” to cut its dividend, Shell reduced its quarterly payout to 16 cents per share from 47 cents." 這個應該是指 per share, 而非 per ADS [4]. ADS  (American Despositary Share) 和 ADR (American Depositary Receipts)  類似,前者是外國股票在美國掛牌,後者是美國銀行買了外國股票再發行憑證。

消息一出, RDS.B 大跌 13.2%, 相對地, XLE 只跌 2.21%. 這應該是投資人對個股比較敏感. 不然大家都反映同一個理由 (covid-19) , 為何有差別待遇. 難道是不見棺材不掉淚嗎? 原本以為股息跌 16%, 盤中股價也跌 15% 左右, 這樣算是題材消化完了. 但其實股息是跌到 16 cent, 還真是滿嚴重的, 當然這樣還是比暫停配息好啦!

new-shell-2020-620x200

new-shell-2020-620x200

[Note]

  1. 【2017-美股投資】為什麼一個公司會有兩個不同的股票代碼
  2. Shell cuts dividend for first time since second world war
  3. https://www.shell.com/investors/dividend-information/historical-dividend-payments.html
  4. https://www.investopedia.com/ask/answers/06/adrvsads.asp

DTCP Key Format 小註解

因為 OEM 在問, 所以我上網找了些公開的資料. DTCP (Digital Transmission Content Protection) 的概念類似 HDCP, 由 DTLA (Digital Transmission License Administrator) [1] 所維護. 顧名思義 DTCP 強調傳輸的部分.

版本又分成 DTCP [3] 和 DTCP2, “2″ 和 “1″ 不相容, DTCP2 主要是用來保護 4K, 8K 的 content. 舊版的的 DTCP 主要用來保護 HD 的影像. 再來就講到 key 的內容了, 首先分成 unique key 和 common key.

CK flag (1 bit): A value of zero indicates the device is using unique DTCP2 keying material
(Unique-key Device) and a value of one indicates that the device is using common keying material
(Common-key Device).
 

詳細的說明在 [4] 的 P.6, 本來每個 device 的 key 都要長得不一樣. 但是如果你是大戶買很多把的話, 就可以都用一樣的 key 比較方便, 這個叫做 common key. 當然 common key 被濫用的話, 必須要能夠被註銷. 這些規範寫在 Section 2.2 of the Procedural Appendix. F (p. 60).

2.3 Device Certificate and Device Keys. Device Certificates and Device Keys are necessary to
manufacture Licensed Products. These are generated under the direction of DTLA and, except in the
case that Adopter elects to use a Common Device Certificate and Common Device Key for certain
devices as described in the Procedural Appendix and Compliance Rules, are generated uniquely per
device. Without limiting any other provision of this Agreement, Adopter may not use the same
Device Key or Device Certificate in more than one individual unit or copy of any product or
component except for the use of Common Device Keys and Common Device Certificates in
accordance with Section 2.2 of the Procedural Appendix. F

Unique key 在 DTCP 有三種 certificate format, 在 DTCP2 只有一種. DTCP 的三種 format. 定義在  RFC7562 [2]. Format 0 給計算能力比較有限的 device 用. Format 1 給計算能力強的 device 用, Format 3 就給有額外需求的 device 用 [3]. 看起來 embedded system 比較適合 format 0.

Certificate Format (4 bits). This field specifies the format for a specific type of certificate. Currently three
formats are defined:
o Format 0 = the Restricted Authentication device certificate format (See Chapter 5).
o Format 1 = the Baseline Full Authentication device certificate format.
o Format 2 = the Extended Full Authentication device certificate format (NOT ESTABLISHED2
).
o Other encodings are currently reserved.

DTCP certificates issued by [DTLA] to DTLA-compliant devices come in
   three general variations (see Section 4.2.3.1 of [DTCP]):

   o  Restricted Authentication device certificate format (Format 0):
      Typically issued to devices with limited computation resources.

   o  Baseline Full Authentication device certificate format (Format 1):
      This is the most commonly issued certificate format.  Format 1
      certificates include a unique DeviceID and device EC-DSA public/
      private key pair generated by the DTLA.  (See Section 4.3 of
      [DTCP]).

   o  Extended Full Authentication device certificate format (Format 2):
      This is issued to devices that possess additional functions (e.g.,
      additional channel ciphers, specific device properties).  The
      presence of these additional functions is indicated by the device
      capability mask as specified in Section 4.2.3.2 of [DTCP].  Format
      2 certificates also include a unique DeviceID and device EC-DSA
      public/private key pair generated by the DTLA (see Section 4.3 of
      [DTCP]).

   The mechanism specified in this document allows only Formats 1 and 2
   DTCP certificates to be exchanged in the supplemental data message
   since it requires the use of the EC-DSA private key associated with
   the certificate.

既然 DTCP2 用來保護 4K, 8K 的內容, 當然就不用顧及老弱殘兵的計算能力了. 按照 2018 年的 DTCP2 spec., 就只有 format 1 一種.

Format (4 bits): This field specifies certificate format and currently only one format is defined:
116 : DTCP2 Device Certificate Format 1
 

[Ref]

1. https://www.dtcp.com/default.aspx

2. https://tools.ietf.org/html/rfc7562#page-6

3. http://www.dtcp.com/documents/dtcp/info-20130605-dtcp-v1-rev-1-7-ed2.pdf

4. http://www.dtcp.com/documents/licensing/dtla-adopter-agreement.pdf

ECM 與 EMM 小註解

初學的時候, 對這兩個名詞很容易搞混, 只是硬記.

ECM = Entitlement Control Messages

EMM = Entitlement Management Messages

後來看了 RDK Summit 2019 的文件, 覺得解釋得很好. 在腦海中翻譯成中文後就更加心領神會了.

首先我有一個受保護的資料要解擾, 因此用一個 Control Word 來解擾它. 解擾和解密的差異在於 Control Word 會一直換, 達到擾亂的目的. 就算一時可以矇對, 可能每隔 15 秒就換一次 Control Word. 

Control 是控制的意思. 我們那屆的控制系, 班服背後就寫著大大的 “Everything is under Control" , 穿起來很風光. 而我們電信系的班服上的 “Commuication" 因為少了一個 n 所以很少人穿.  咳… 管理 Control word 的資訊當然就是 Control Message. 因為表彰管理權限, 給予權利, 所以是 Entitlement Control Message.

ECM –> Decrypt –> Control Word 

Scrambled data + Control Word –> Discramble –> Clear data

控制是針對普遍性, 但管理要考慮獨特性. 因此在控制的上面要多一層管理. 對事情、對人、對 key 都用這個聯想, 就變好記了. 國有國法、家有家規, 凡事都按照規定來做是控制, 而上面要有一個 Manager 就是要管理差異性.

EMM + Device Unique Key –> ECM key

ECM + ECM Key  –> Dercypt –> Control Word

Scrambled data + Control Word –> Discramble –> Clear data

美國股市鎔斷小筆記

最近一週美國股市上上下下, 蔚為奇觀. 所以筆記起來供日後參考.

當然大家都知道這次災難的主因就是武漢肺炎, 又名新冠病毒, 或者 Covid-19. 但是後續發展充分展現了各國不同的世界觀, 透過這個窗戶, 我又重新認識了這個地球. 

病毒剛發生的時候, 大陸應該是最嚴重的地區, 但是我手中的中國 ETF 不跌反漲, 即使不計歷年領到的股息, 股價也突破了我過去的買點, 在 2020/1/14 來到最高點.我只能說根本在護盤.

美國人大概認為那是中國人的事, 就算世界工廠震盪一下, 也不影響他們. 所以股市穩定到 2020/2/24 左右. 在這段期間, 我個人當然也就歡樂地創下個人資產新高. 後來美股稍微走勢疲軟, 陸股也慢慢有點不行了. 這段期間都還是高檔盤旋.

我從同事們聊天的訊息中得知, 上下游廠商的訂單都還不鬆手, 大家都樂觀地等著大陸的疫情收斂, 然後加班兩個月把失去的一個月產能補足, 這樣今年還是可以跟往常一樣過去.

接著在 228 假期當晚, 美股出現了大跌. 才跌個 3~4%, 朋友便用大屠殺來形容. 所以我也開始執行先前宣告的 QQQ 買進計畫.  話說錢從那裡來呢? 因為我認為大陸根本護盤, 所以就不老實也不客氣地把手中的中國 ETF 賣賣賣賣賣…, 抽出幾千萬貝里來備戰, 時間非常充裕.

2020/2/28 我第一次試買 QQQ, 當時買在 200 USD 以下就覺得很便宜了. 到 2020/3/3 美股回彈還小賺. 畢竟已經有幾次一日危機的歷史經驗, 只跌一兩天確實並非不可能. 我看到網路上有人說這是非經濟因素, 不需要恐慌. 但我認為人命關天, 會死人就是最基本的經濟因素, 沒有人哪有經濟呢! 同理, 外星人入侵也是經濟因素, 外星人會顛覆社會價值觀, 推翻宗教, 幾十億人的想法都改變當然會影響經濟.

喔, 言歸正傳. 美股鎔斷的 (收盤) 數據整理在下面, 寫著寫著又多了一筆, 根本投資人的日常.

日期 道瓊跌點 道瓊跌幅 Nasdak跌點 Nasdak跌幅 S&P500跌點 S&P500跌幅 近因
1997/10/27 554.26 7.18% 亞洲金融風暴
2020/3/9 2013.76 7.79% 624.94 7.29% 225.81 7.6% 新冠肺炎+原油價格戰
2020/3/12 2352.6 9.99% 750.25 9.43% 260.74 9.51% 新冠肺炎+禁歐洲令
2020/3/16 2880.01 12.12% 976.74 12.4% 326.03 12.02% 降息 4 碼
2020/3/18 1338.46 6.3% 344.94 4.7% 131.09 5.18% 撒1.2兆美元?

如先前所說, 要付應美元貶值造成的匯損, 就是要買美元資產. 現在美元資產便宜, 美金實質貶值, 手邊的美金要加速用掉. 倒是美國大量印錢撒錢之際, 美金反而對台幣升值, 可見外資對台股相對更加恐慌. 如果我是外資, 應該會捨跌得慢的台積電去買鎔斷 4 次美股. 畢竟下游不好, 上游也好不到哪裡去. 只是比較晚衰退而已.

[2020/3/20 後記]

2020/3/19 也發生台股跌破十年線這件事 (9112~9114 左右), 按照往例, 此時買進不會虧. 你不買國安基金會來買. 所以儘管外資不斷提款台積電 (還是持有 75%), 但內資昨天買, 等國安抬轎也是一個不錯的選擇. 本來我已經退出台股了, 昨天還是買了一點點. 

fc_for_tsmc-768x575

YOLO V3 + Tensorflow V2 小筆記

去年我寫了一個專利, 到現在專利事務所還沒完成申請流程, 這樣我就不能公開啦! Anyway, 我來研究實作技巧吧.

首先, 我需要 YOLO V3. 前幾年研究的 Facenet 是用 Tensorflow 1.10, 現在上網一查, 人家已經用 Yolo V3 搭 Tensorflow V2 [1] 了. 首先需要 TF V2 [2]. 然後用上次的老招升級成 tensorflow-gpu

pip3 install --ignore-installed --upgrade tensorflow-gpu

此時遇到下面 error

distributed 1.21.8 requires msgpack, which is not installed.

用 pip3 install msgpack 解決.

接著在 Yolo V3 的安裝過程中, 需要多安裝 git for windows, 這可以參考 [3]. 至於 wget 在 Anaconda3/Lib 底下有.

一切搞定後, 進入 Anaconda3 的 TF2 (自己取的) 虛擬環境, 進行 Yolo v3 的訓練. 此時會報一個錯. 

File "C:\AI\Anaconda3\envs\TF2\tensorflow-yolov3\core\config.py", line 14, in <module>
from easydict import EasyDict as edict
ModuleNotFoundError: No module named 'easydict'

這時只要安裝 easydict 就好, 就可以堂堂跑 Yolo V3 了. 看樣子也真的有去找 GPU.

PS C:\AI\Anaconda3\envs\TF2\tensorflow-yolov3> python train.py
2020-03-04 23:31:09.283568: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
2020-03-04 23:31:10.297903: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1411] Found device 0 with properties:
name: GeForce GTX 1050 major: 6 minor: 1 memoryClockRate(GHz): 1.493
pciBusID: 0000:02:00.0
totalMemory: 2.00GiB freeMemory: 1.61GiB
2020-03-04 23:31:10.345495: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1490] Adding visible gpu devices: 0

接下來就是去洗澡, 看要多久才會 train 完. 可是, 六分鐘護一生之後, Python 把環境建好, 開始讀檔案要 training 時就出錯了. 原來是個豬頭 bug 把路徑名稱寫錯, 這題還研究了半天, 以至於學會了 os.path.normpath, os.path.join 的用法…

重新起跑後不久, 又遇到了 memory 不足的問題:

OP_REQUIRES failed at gpu_swapping_kernels.cc:72 : Resource exhausted: OOM when allocating tensor with shape[1024] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc

這算是老問題了. 我的 Notebook 只有 2GB GPU RAM, 普通的 Yolo V3 要 4GB DDR, 所以應該要用 tiny 版本的 Yolo 才有機會. 此時找到 [4] 這篇滿實用的, 介紹得很清楚, 每個 model 要用多少 GPU RAM. 雖然它是用 Darknet, 但也有豐富的連結到其他 framework. 因此下一篇我將轉往 CPU only 或 Yolo Tiny 的方法.

另外就是下次買 Graphic card 做 AI 實驗, 內建 GDDR 的大小的重要性遠勝過計算能力. 能夠有 4GB free 就可以, 因此最好是內建 6 GB 吧, 不然就是要兩張卡了. 兩張卡的用法可以參考 tensorflow 官網 [5].

ˋ[Note]

  1. https://github.com/YunYang1994/tensorflow-yolov3&nbsp;
  2. https://medium.com/@shaolinkhoa/install-tensorflow-gpu-2-0-alpha-on-anaconda-for-windows-10-ubuntu-ced099010b21
  3. https://gitforwindows.org/
  4. https://gitee.com/suiyifan/darknet
  5. https://www.tensorflow.org/