[好書分享] 一個投機者的告白(增修版)

一個投機者的告白(增修版) 作者: 安德烈.科斯托蘭尼 原文作者: André Kostolany 出版社:商業周刊 出版日期:2018/02/01 買書推薦網址: Readmoo: 購買網址 前言: 這是 2024 年第 3 本讀完的書,這一系列跟著: 一個操盤手的虧損自白-長銷30年的獲利經典 吉姆.保羅 [好書分享] 投機者的撲克 - 操盤18年手記 書本類型蠻類似的。 內容摘要: 投資必讀經典!在台累銷90萬冊,電子書首度上市! 詭譎多變的市場裡,永恆不變的指引—— 傳奇散戶投機家、德國股神科斯托蘭尼 「人心+資金」決定所有市場起落, 咀嚼大師智慧,小散戶也能成為自由支配財富的貴族 他沒有股神華倫.巴菲特(Warren Buffett)旗下的波克夏集團大軍,卻能與股神平起平坐;沒有債券,天王葛洛斯(Bill Gross)千百人的研究團隊,但只要他動口,全球市場皆側耳傾聽;他不像投資大鱷索羅斯(George Soros)會在各地發動貨幣戰爭,但當他一派優雅提出某國貨幣被錯估時,沒有一個政府敢掉以輕心。他是「德國股神」安德烈‧科斯托蘭尼(André Kostolany),古往今來的大師中,少數不打團體戰、特立獨行的散戶投機家。 科斯托蘭尼的一生充滿矛盾和對立:1906年出生於匈牙利, 13歲就靠貨幣套利賺進人生第一筆投機財,21歲踏入證券業,30歲出頭便已賺到百萬美元(約合現今新台幣1億2,000萬元)的身價,但也曾因看錯方向而破產兩次。一生出入全球78個交易所,歷經兩次世界大戰、數次股市崩盤和石油危機,20世紀所有的通膨、緊縮、升值、貶值都深刻記在腦中,科斯托蘭尼用自己的財富告訴世人,只要貫徹幾個簡單的想法,就能在雜音四處的交易市場中找到主旋律,交易所也就會從殺聲震天的賭場變成充滿美妙音樂的樂園,再加上資金、耐心及堅強的心臟,一個散戶或許比專業法人更有機會成為自由支配時間及財富的貴族。 《一個投機者的告白》是科斯托蘭尼一生集大成之作。本書於1999年2月動筆,9月科老病逝巴黎,12月本書在德國出版,為科老生前最後一本作品。經歷80年投資生涯,一生富裕、優雅、從容,科斯托蘭尼畢生通透掌握以錢賺錢的精髓,以幽默、雋永和風采,寫下精彩絕倫的93年人生告白。他說:「我是投機人士,始終如一!」這本匯集當世投資/投機智慧精華的書,就是科斯托蘭尼最無私的禮物。 心得: 整本書都是在分享他的投資過程。並且有相關的心理狀態的分析,在不同階段給予不同得心裡敘述。讓我印象最深刻是最後一個章節,裡面有提到有人為了結婚而離開了投資的市場。將手上的股票全部賣掉後專心地過生活,但是遇到股市大好的時候,又想要加入整個投資圈。於是又過頭來繼續投資。 像極了賭博式的心態,也代表著有一些投資圈的人就像上癮般的喜歡投資的原因。
繼續閱讀

[Golang][Render] 如何透過 Github Action 讓 Golang App 部署到 Render.com

前情提要: 雖然我近期已經把所有服務都已經從 Heroku.com 搬遷到 GCP 上面,但是 Render.com 本來也是我教學的一個方案。畢竟它擁有不需要信用卡,有免費額度可以讓學生們快速上手。 這邊快速記錄一下該如何透過 Github Action 部署 Golang 服務到 Render.com 的流程。 如果啟動部署,流程會是: 完成 PR Merged 之後 Draft a Release 在 Github 上面 然後會啟動自動部署到 Render.com 範例程式碼: 可以參考這個 REPO https://github.com/kkdai/linebot-food-enthusiast 如何開始設定 Github Continuous Deployment 1. 取得 Render.com API Key 首先到以下位置 https://dashboard.render.com/u/settings#api-keys 再來你需要取得你要部署的 Render Services ID,進入專案後,直接看網址就知道。 下面的 srv-xxxxx 就是你的專案 ID。 2. Render.com API Key 跟 Services ID 填寫到 Github 設定 你到你專案的設定 Secrets and Variables -> Actions 3. render config file render.yaml 放在 github 根目錄 services: - type: web name: linebot-food-enthusiast env: go buildCommand: go build -o app startCommand: ./app plan: free autoDeploy: false envVars: - key: ChannelAccessToken sync: false - key: ChannelSecret sync: false - key: GOOGLE_GEMINI_API_KEY sync: false 4. render.com Github Action 放在 https://github.com/kkdai/linebot-food-enthusiast/blob/main/.github/workflows/render_deploy.yml name: Render Deploy on: release: types: [created] jobs: build: runs-on: ubuntu-latest steps: - name: Deploy to production uses: johnbeynon/[email protected] with: service-id: $ api-key: $ wait-for-success: true 其他 Q&A Q: 看到有一些錯誤顯示,那是否有問題? A: 目前不會造成部署的錯誤,但是會有錯誤訊息發生。 Refer...
繼續閱讀

[Golang][GCP] 透過 Cloud Shell Editor 來部署 Cloud Run 服務

前提: Cloud Run 其實很方便,可以很快速地將 Heroku 的專案搬移過來。可以透過 Create Services 的方式將 github 的專案直接建立一個 Coontinues Deployment 的流程在 Cloud 。 但是本篇文章會介紹另外一種方式,可以透過 Cloud Shell Editor 的方式也是可以部署你的 github 專案到 Google Cloud Run 的平台。 使用 Cloud Shell Editor 來部署 Cloud Run 服務 到 Cloud Shell Editor 服務來啟動 開啟專案方式選擇 Clone Git Repository ,連接到 github 之後選取你要部署的專案。 這裡用 https://github.com/kkdai/linebot-travel-gpt作為範例。 點選左下角的 Cloud Code ,啟動認證。 這邊點選 Deploy to Cloud Run 基本上變動都不用改,直接選預設的就可以。 然後回到 Cloud Run 設定,加入原本需要的環境變數。 這樣就可以了。 參考文章: Cloud Shell Editor interface overview Heroku 取消免費方案?教你用 Cloud Functions 架設 LINEBOT! GCP: 配置清理策略 (Apply cleanup policies)
繼續閱讀

[Golang][GCP] Cloud Run 造成的 Artifact Registry 空間的清理策略(Cleanup Policy)

前提: Cloud Run 其實很方便,可以很快速地將 Heroku 的專案搬移過來。在建置 Cloud Functions (第 2 代) 的過程中,會使用到 Cloud Build 跟 Artifact Registry,但建置成功後,舊版本的 Artifact Registry 卻不會自動刪除。 原本從「Heroku 取消免費方案?教你用 Cloud Functions 架設 LINEBOT!」看到了 GCR-Cleanner 。但是卻發現在 GCP 的介面上有更方便的方法可以使用。 透過 Artifact Registry 直接設定 House Keeping 策略 到 Artifact Registry 點選 size 最大的吧,然後選取上方 Edit Repository 在最下方,選曲 Cleanup Policies 選擇 “Keep most Recent versions” “Keep count” 選 1 (也可以是 2) 如果怕刪除太多,可以用 Dry run 看看結果。 參考文章: Heroku 取消免費方案?教你用 Cloud Functions 架設 LINEBOT! GCP: 配置清理策略 (Apply cleanup policies)
繼續閱讀

[BwAI workshop][Golang] LINE OA + CloudFunction + GeminiPro + Firebase = 旅行小幫手 LINE 聊天機器人(4): 關於 Gemini Pro 伺服器的相關修改導致 unknown field usageMetadata 的錯誤訊息

Bug: 原本的對話忽然都沒有回應 由於 Google Gemini 伺服器今天早上修改相關變動,但是 Golang 官方套件還無法來得及改動。 (https://github.com/google/generative-ai-go/issues/97) 導致我在 BwAI workshop ,政大與台北大學的授課中相關 LINE Bot 範例可能會無法順利取得回覆。 雖然官方正在解決相關問題,本篇文章將分享如何用另外的方式來先避開相關的問題。 狀況: 傳送文字問題,沒有回應。 但是發送照片卻是可以正確回覆,查看 log 會出現 unknown field usageMetadata 的錯誤訊息。 影響專案: https://github.com/kkdai/linebot-cf-firebase https://github.com/kkdai/linebot-cf-receipt https://github.com/kkdai/linebot-cf-namecard 相關被影響文章: [BwAI workshop][Golang] LINE OA + CloudFunction + GeminiPro + Firebase = 旅行小幫手 LINE 聊天機器人(2): Firebase Database 讓 LINEBot 有個超長記憶 [BwAI workshop][Golang] LINE OA + CloudFunction + GeminiPro + Firebase = 旅行小幫手 LINE 聊天機器人(3): 導入「名片小幫手」跟「收據小幫手」 解決方式: 請記得更新最新版本程式碼,到你的 cloud function 將 function.go 替換掉之後重新 deploy 就可以了。 https://github.com/kkdai/linebot-cf-firebase https://github.com/kkdai/linebot-cf-receipt https://github.com/kkdai/linebot-cf-namecard 認真探討 根據 issue 97 主要問題出在 SendMessage 回來的資訊處理部分。 func main() { ctx := context.Background() client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("GEMINI_API_KEY"))) if err != nil { log.Fatal(err) } defer client.Close() model := client.GenerativeModel("gemini-1.0-pro") cs := model.StartChat() msg := "hello" fmt.Printf("== Me: %s\n== Model:\n", msg) _, err = cs.SendMessage(ctx, genai.Text(msg)) if err != nil { log.Fatal(err) } } Workaround 可以考慮將 StartChat() 換成原有的 model.GenerateContent(ctx, genai.Text(text)),但是會無法使用 cs.History = Memory 。 這時候可以透過 totalString := fmt.Sprintf("Memory:(%s), %s", string(jsonStr), req) res, err...
繼續閱讀

[BwAI workshop][Golang] LINE OA + CloudFunction + GeminiPro + Firebase = 旅行小幫手 LINE 聊天機器人(3): 導入「名片小幫手」跟「收據小幫手」

前言: 這是一篇為了 04/18 跟 Google Developer Group 合作的 BUILD WITH AI (BWAI) WORKSHOP 的最後一篇文章,畢竟晚上就要工作坊了(投影片可以當場弄,文章可來不及當場寫 XD )。 請記得,如果你想知道以下相關知識: 如何申請 LINE Developer 帳戶,如何建立一個 LINE OA (ChatBot) Channel? (範例: 辨識圖片 LINEBot) 如何透過 Google Cloud Functions 使用 Google Credential 來操作 Firebase Realtime Database (範例: 具有長記憶的聊天機器人) 本篇文章將專注在以下幾個部分: 將兩個範例程式 名片小幫手(舊版用 notion)與收據小幫手(Python 舊版) ,改寫成 Golang 。 分享 Golang 在操作 Firebase Realtime Database 資料庫上幾個需要注意的地方。 最後分享做 Gemini-Vision 的一些心得與未來可以改善的空間。 文章列表: [BwAI workshop][Golang] LINE OA + CloudFunction + GeminiPro + Firebase = 旅行小幫手 LINE 聊天機器人(1): 景色辨識小幫手 [BwAI workshop][Golang] LINE OA + CloudFunction + GeminiPro + Firebase = 旅行小幫手 LINE 聊天機器人(2): Firebase Database 讓 LINEBot 有個超長記憶 [BwAI workshop][Golang] LINE OA + CloudFunction + GeminiPro + Firebase = 旅行小幫手 LINE 聊天機器人(3): 導入「名片小幫手」跟「收據小幫手」 [BwAI workshop][Golang] LINE OA + CloudFunction + GeminiPro + Firebase = 旅行小幫手 LINE 聊天機器人(4): 關於 Gemini Pro 伺服器的相關修改導致 unknown field usageMetadata 的錯誤訊息 程式碼列表: 名片小幫手(舊版用 Golang + Notion) 收據小幫手(Python 舊版) 辨識圖片 LINEBot 具有長記憶的聊天機器人 名片小幫手(新版: Golang + Firebase RealtimeDB + Cloud Functions) 收據小幫手(新版:...
繼續閱讀