[學習心得][Golang] 在 Heroku 上使用 go-pg 會發生 undefined: sql.NullTime 錯誤的解決方式

image-20211107005949431

前言:

原來 Heroku 上面 #Golang 的版本需要有特殊 define 才會正確的讀取到。不然都會使用 1.12。

最近在改一隻 LINE Bot 把原來已經不在 Heroku 支援的 MongoDB 改成 PostgreSQL ,想幫他加上免費的 PostgreSQL 但是遇到一些問題。先寫一下相關的學習。

Golang + ORM = Go-PG

先挑選了一個套件是

https://github.com/go-pg/pg

但是寫完後,發現 Local 都可以 compile ,但是丟到 Heroku 都會爆掉。

error undefined: sql.NullTime #59

remote: # github.com/go-pg/pg/v10/orm
remote: vendor/github.com/go-pg/pg/v10/orm/table.go:41:40: undefined: sql.NullTime
remote: gopkg.in/mgo.v2/internal/scram

根據以下的 issue https://github.com/guregu/null/issues/59 解決方法就是只要升級到 go1.13 就好

go1.13 就好
go1.13 就好
go1.13 就好

強制讓 Heroku 使用更新版本 ( > Go 1.12 ) 的版本

阿勒~~~我的 Go local 不是已經升級到 1.17.2 了嗎? 怎麼會?

remote:        Detected go modules via go.mod
remote: -----> 
remote:        Detected Module Name: github.com/kkdai/linebot-ptt-beauty
remote: -----> 
remote:  !!    The go.mod file for this project does not specify a Go version
remote:  !!    
remote:  !!    Defaulting to go1.12.17
remote:  !!    
remote:  !!    For more details see: htxtps://devcenter.heroku.com/articles/go-apps-with-modules#build-configuration
remote:  !!    
remote: -----> Using go1.12.17
remote: -----> Determining packages to install

問題來了….

不論你的 go.mod 上面的 Golang 版本有多新, Heroku 還是會使用 go 1.12

force heroko to use go > 1.12

參考這個 stackoverflow

https://stackoverflow.com/questions/56968852/specify-go-version-for-go-mod-file

module somemodule

// +heroku goVersion go1.14
go 1.14

require (
    // ...
)

如果你要使用最新版本的 Go 1.17.2 就改成

// +heroku goVersion go1.17
go 1.17

這樣就行了。

其他鏈結

  • https://github.com/go-pg/pg/issues/445
  • https://pg.uptrace.dev/
  • https://devcenter.heroku.com/articles/getting-started-with-go?singlepage=true

[學習心得][Golang] 手癢來開始改 LINE PTT Query Bot

screen1.jpg

前言:

找到一個 LINE Bot 使用 Go 來搜尋 PTT:

https://github.com/mong0520/linebot-ptt-beauty

本來覺得很有趣,後來發現資料都是使用 MongoDB 的來用。手癢之下,決定把他整個修復完成。

修改過後的 Repo:

https://github.com/kkdai/linebot-ptt-beauty

幾個功能:

  • 即時透過 PTT 抓取資料
  • 即時透過 PTT 抓取最新圖片
  • 可以尋找到 Post Like 跟 DisLike

透過 GoQuery 來抓取 PTT Like/DisLike

主要是透過 https://github.com/kkdai/photomgr 自行開發的功能,主要想法如下:

  • .push-tag 來找出所有的 “推” 跟 “噓”
  • 透過 Text() 來判斷是推文,還是噓文。

全部程式碼如下:

func (p *PTT) GetPostLikeDis(target string) (int, int) {
	// Get https response with setting cookie over18=1
	resp := getResponseWithCookie(target)
	doc, err := goquery.NewDocumentFromResponse(resp)
	if err != nil {
		log.Println(err)
		return 0, 0
	}

	var likeCount int
	var disLikeCount int
	doc.Find(".push-tag").Each(func(i int, s *goquery.Selection) {
		if strings.Contains(s.Text(), "推") {
			likeCount++
		} else if strings.Contains(s.Text(), "噓") {
			disLikeCount++
		}
	})
	// fmt.Println("like:", likeCount, " dislike:", disLikeCount)
	return likeCount, disLikeCount
}

有興趣的可以看這個 PR https://github.com/kkdai/photomgr/pull/10

待辦事項:

  • 支援 PostgresSQL 來儲存使用者偏好
  • 支援最受歡迎文章
  • 支援隨機文章

其他資訊:

本來作者有弄 MongoDB ,但是似乎現在沒有找到免費的 Heroku 做法就算了。 不過有看到 PostgreSQL 的免費版本,看來還是可以記錄下來使用者喜愛的文章。

[Day07] 在 heroku 上使用免費的 postgresql

碎念一下:

每一次有大專案,或是很大型演講。總是覺得壓力大,這時候來寫個扣真的是一種放鬆的行為。

[好書分享] 養對股票,存千萬

華倫老師存股系列 養對股票存千萬

華倫老師存股系列 養對股票存千萬

作者: 周文偉(華倫)  
出版社:Smart智富  
出版日期:2020/07/22
語言:繁體中文

買書推薦網址:

前言:

這一本是今年所讀完的第十三本書。因為我本身是個股市大菜鳥,雖然有買過幾次運氣的的機會,但是一直沒有認真地去學習關於存股跟相關投資概念。都是到了最近才將一些基本的概念來慢慢學,而這本就是用很簡單的概念來分享作者如何挑選不受到景氣影響的股票。

內容簡介與心得:

無論是剛開始存股、或是想存股卻不敢行動的你
是不是總有以上疑惑?
這一次,華倫老師將繼續用他的投資經驗
解答所有存股族最常見的困惑!

∥建立屬於你自己的存股組合
華倫老師首度揭露個人持股組合配置,同步教你如何自行配置快速成長股、穩健成長股、定存股的持股比例,帶你勇敢踏出養到千萬股票的第一步。

∥「長期持有」比「作價差」更容易獲利
每次想低買高賣,卻總是在股價上漲時急忙買進,股價下跌又慌張賣掉嗎?與其不斷買進和賣出前景不明的股票,不如長期持有未來明確、獲利穩定的股票,從此告別小賺大賠、追高殺低的散戶宿命。

∥輕鬆學會華倫老師選股心法
如何正確評估一檔股票值不值得存?用6個條件、3個問題,你也能自己選到值得長抱的好股票。

∥股價不是買賣股票的理由
股票下跌了不敢買、股票上漲了更不敢買?華倫老師要告訴你,為什麼不能用股價決定買賣時機,再教你選到存股標的後,如何正確判斷買賣點。

∥華倫重點持股深入解析
如何分析持股的競爭優勢、未來展望,以及擬定存股策略?以4檔定存股+2檔穩健成長股+3檔成長股為範例,帶你完整參與華倫老師的存股思考脈絡。

章節條列

1. 建立正確觀念,只當投資者

要當好的存股投資者,需要注意以下相關事項:

  • 具有護城河的公司
  • 股災是最好的進場時間
  • 股災發生的時候要進場買,但是需要不斷檢視公司的優勢是否有繼續保留。
  • 不要有相見恨晚的想法,要想好入場時機,建立部位。
  • 不要希望股票買了馬上會長,這樣只是當彩卷一樣。
  • 認同一家公司不是買短期股價成長,而是認同他們的價值,是要跟他們持續成長。
 市場短期是投票機,長期則是體重機
  • 唯一要停利該公司~除非你找到獲利變得變更,不要因為股價而離開該公司。
  • 找出食品或是基本生活相關公司(不要電子股),可以避免景氣的問題。
    • 統一超(2912) 雖然殖利率不高,但是 15 年獲利 785%
  • 使用借款來套利,其實會增加股票部位的壓力。也會減少自己對於股市波動的抗壓性。
  • 如果要貸款存股,需要確認以下的問題:
    • 殖利率如果 4% ~ 6% 其實不會高太多。(個人信貸 3%,可能要房貸增額才夠低)
    • 借錢買股票,容易被波動產生壓力。
    • 一次買進很容易受到波動影響,影響後續的購買計劃。

2. 拒絕短視近利,存到績優股

  • 使用六個條件判斷好的存股公司:
    • 產品或服務具壟斷或是寡占(具有護城河)
    • 產品或是服務簡單易懂,具有持久性。
    • 歷年獲利穩定,維持成長
    • 高毛利率, ROE 大於 15%
    • 非流動資產占稅後淨利比值小於 2 。
  • 作者推薦食品業,因為滿足以下三個問題:
    • 公司生產的單一,不是會變動的東西
    • 公司的產業地位,其他競爭者不易挑戰
    • 能夠輕易預測公司在 5 年跟 10 年後的狀況嗎
  • 挑選長期向上的公司,勝過股價波動的飆漲股
    • 因為大漲往往抱不久,大跌丟更快。
  • 食品業績優股推薦:
    • 卜蜂
    • 中華食

3. 搞懂買股策略,有效降成本

  • 分析可以投資的錢有多少,將投資類別分類,並且根據不同類別來分攤風險:
    • 快速成長 35%
    • 穩健成長 41%
    • 定存股 21%
    • 現金 3%
  • 存股策略:
    • 根據大盤走勢,找出適當買點
    • 建立買進紀錄,才能規律累積股數
    • 利用下跌累積進場,建立部位。
  • 借券增加收入
    • 出借利率大概是 0.1% ~ 0.5%
    • 除權息出借股票還是可以透過「權益補償」領股息,還不用負擔二代健保。
    • 容易出借的股票:電信股(中華電,台灣大,遠傳),食品股(卜蜂),中保科。

4. 回歸投資初衷,不輕易賣股

  • 只要車子沒有故障,絕不輕易換車
  • 具有護城河股票,長期下來都會持續獲利。
  • 追蹤貨的重點:
    • 經常性獲利衰退,可以暫時按兵不動
    • 公司變得無法預測,可以下車觀望
    • 去蕪存菁,留下好股票

5. 華倫存股,優勢全解析

這一個章節主要分享作者對於他手上股票的研究心得,也真的很佩服作者對於持有的股票詳細的觀察。

主要的股票有:

  • 定存股: 電信三雄,中保科
    • 股市發生系統性災害的時候,這幾個也都是被影響最小的個股。
  • 穩健成長: 德麥
  • 快速成長:日友

有一些訣竅紀錄一下:

  • 殖利率高於 5% ,是良好的購入點。
  • 持續了解公司成長與營收狀況來調配持有個數。

心得:

有很多完整的基礎心法,並且透過許多歷史數據來佐證。真的不愧是教師,整本書容易了解又可以深刻記住。最後的一個章節也相當有用,作者對於個股的深入研究,可以了解該如何來分析手中的持有股票。打造自己的分批進場策略,蠻推薦大家好好熟讀這一本師,相當的實用啊。

[TIL][學習] Github Release 加上漂亮的 Contributors 圖示 (icon)

image-20211015094447426

顯示 Contributors 在 Release Note

最近在處理新的 LINE Bot Go SDK 的發佈的時候,發現透過 @人 (需要透過 auto-completed) 會跑出一個 Contributors 欄位在 Release note 裡面。

image-20211015101327868

自動 Release Note

Releases description

甚至還可以自動產生 Release Note 。

  • 需要是透過 PR 的新更動。
  • PR 內需要有清楚的敘述(當然)

產生出來也相當方便啊啊啊

Reference

[TIL][學習] 購買 SWITCH OLED 主機後,如何安全更換你的 SWITCH 資料到新主機?

Image

Image

前情提要:

2021/10/08 任天堂正式發售了 OLED 的主機。除了螢幕變大外,又有漂亮的白色手把款式(跟機座)。買了下去,發現更換資料需要一點時間,這邊可以稍微紀錄一下相關程序給大家分享。

資料轉移:

image-20211009083713332

大家可以參考一下官網上面的資料:用戶資料轉移及儲存資料轉移

主要轉移資料是:

  • 使用者資訊
  • 使用者存擋
  • 朋友

無法轉移(需要到新的主機下載)

  • 遊戲本身

使用者資料轉移

因為我有許多任天的區域的 estore 帳號(八個),所以跑了很久。相關程序紀錄一下:

  • [新的主機]-> [新增使用者] ->[繼承自其他 SWITCH 主機] (是否保留舊的,你們可以決定)
  • [新的主機] -> 這時候要求你登入繼承過來使用者帳號跟密碼(還要輸入認證)
  • [舊的主機]-> [設定] -> [使用者] -> [轉移使用者]
  • 兩台主機都要插電,要靠近。
  • 等待轉移完成,換到下一個要轉移的使用者。

舊主機資料清理

使用者都轉移完畢後,需要做相關資料清理。

  • [舊的主機]->[設定]->[主機] -> 清理 SD 卡的資料。(由於遊戲資料到新主機都無法使用,請記得清理)
  • [舊的主機]->[設定]->[主機]->初始化 SWITCH

這樣就可以拿去賣了。

(2021/10/15 更新: 羅卡大大也發了影片,直接看會清楚很多)

SWTICH OLED 款式的使用心得

螢幕真的變得超大

雖然只有 6.2 -> 7 吋,但是拿到手上真的覺得差很多。因為近距離觀察的因素。 色彩更是漂亮的沒話說。

WIFI 網路速度有變快

本來只是覺得新主機下載遊戲好像變快了,但是後來看到羅卡實測。

image-20211009085718701

WIFI 速度大概有快一倍以上,此外外面資訊也有相關實測。

WIRED 實測

# That said, Wi-Fi speeds are surprisingly better. I regularly hit around 65/32 Mbps on the OLED and 30/29 Mbps on the original Switch.

總結:

主機是一個每天手上都會把玩的東西,上一台三年前玩得也完了接近一千小時吧(?)。這麼頻繁運用下,幫自己換一個漂亮的螢幕,更好的 WIFI 完全不為過啊。畢竟~~~~~~

買的遊戲的錢都不知道買幾台 SWITCH 了!
買的遊戲的錢都不知道買幾台 SWITCH 了!
買的遊戲的錢都不知道買幾台 SWITCH 了!

哈~

Reference

[TIL][學習] 學習 HTTP2 Server Push - To push, or not to push?! - The future of HTTP/2 server push - Patrick Hamann

前情提要:

最近想要看懂 HTTP/2 所帶來的新功能 Server Push ,找到這一篇相當好的整理影片。將所有原本的問題,Server Push 如何解決這樣的問題都整理好了。當然 Server Push 也不是萬靈丹,他也有相關的問題等著解決。接下來就來看吧!

Critical Request

  • 顯示出使用者最在意的資料。

Original HTTPS

image-20211007144201246

  • CSS could not be pared incrementally
  • DOM need to be combination to final result

Critical Hidden Resource

image-20211007144209222

  • 透過三行 Header 可以告訴 browser 哪些資源最重要。

在 Apply 之前

image-20211007144216401

相關的 Font 是最後才下載

Apply 之後

image-20211007144225091

Font 變成是同步下載,可以讓相關資料顯示的正確且美觀。

其他公司透過 Pre-load FONT 達成的結果

image-20211007144414420

Shopify 透過 Pre-load Font 達成 50% 的呈現速度(約為 1.2 秒)

Server Push 面臨的問題

image-20211007150722497

  • 即便改成這個方式,最大的時程依舊在整個 HTML 的取得與解析
  • 想要使用 Server Push 的話要確保:
    • 該資料不需要認證(FONT File)
    • 該資料不需要完整解開才能知道資料(也是因為 HTTPS 的原因)

Cache Digest

image-20211007223749061

究竟要如何讓 Server 知道到底哪些需要 Push 哪些不需要 Push?

原本問題:

所有資料需要 Auth (HTTPS) ,沒解開前無法知道哪一些資料需要。哪些資料已經有了。

解決方式:

透過一個由 Cuckoo Filter (具有機率性的資料結構,可以看我之前的整理) 傳送到 Server 端,由 Server 來決定哪一些資料要送,哪一些不要。這樣的好處是,傳送的資料(高機率)是 client 真正缺少的資料,而非已經有的資料。

參考資料:

103 Early Hints

image-20211007152227703

  • 跟 Server Push 一樣的好處
  • 比較簡單(大部分在 client / CDN)
  • 可以知道 Browser cache , Browser 來決定是否要用
  • 讓 Client 決定是否抓下來資料

Priority Hints

image-20211007225756585

將資料本身直接給優先權 importance 透過這個方式來讓 client 能正確(且有順序的)讀取到 critical resource 。

HTTP/2 所帶來的問題

HTTP/2 帶來很多優點,但是不完全沒有問題需要被解決。以下列出:

  • Resource Loading in browser is hard
  • Performance is for humans, optimise for user experiences

最後建議:

image-20211007230108746

Reference