newman

@newman

Joined on Sep 12, 2019

  • Home 開始我的 podcast since 2024/9/5 我在 vocus 繼續我的創作: 紐曼的思想漫步 紐曼的工作週報 紐曼的技術筆記 精明管家-從發想到練成 以下內容將逐步下線
     Like  Bookmark
  • Home - 新人資訊 應用-資產配置管理系統 應用-資產配置管理系統 part.15:用精密的帳務,每日自我挑戰;且管理成本非常小 (2023/5/7) 應用-資產配置管理系統 part.14:管什麼?第一是淨值,第二是對淨值成長之貢獻因素 (2023/4/24) 應用-資產配置管理系統 part.13:再度重組優化,並整合最佳化演算法 (2023/4/7) 應用-資產配置管理系統 part.12:V1.0 之後,探討各種最佳化理論 (2023/3/27) 應用-資產配置管理系統 part.11:理論與實際的若即若離 (2023/2/27) 應用-資產配置管理系統 part.10:若不好好記賬,就僅是打一場迷糊仗! (2023/2/19) 應用-資產配置管理系統 part.9:財報不只有 EPS,補一些基本工 (2023/2/14)
     Like  Bookmark
  • Home - 新人資訊 多年來一直對量化投資方法心存憧憬,也對於自己的數理和資訊背景有所自恃,非常想在數字堆中闖出一片天地。在經歷了大數據思潮的過度擴張之後逐漸歸於平淡,認清了數字的價值在於其背後的意義!統計分析與預測模型先擺一邊緩點用吧,定義不清的數據即使經過高深的數學運算,可能還不如擲銅板的效力!個人從原本的高度崇尚數據,到曾經不屑一顧的棄絕與嘲諷,最終還得承認各種方法的價值,重點還在於使用的人本身是否能深入了解其本質。 本系統圍繞的主題為投資組合,目前做到的是分析已經發生的報酬與風險,標的的挑選和權重的配置都完全依賴使用者的主觀判定,快速的 what-if 計算在驗證使用者的想法上初步展現了價值,除此之外,也接著思考如何在<font color="red">挑選新標的</font>上做出貢獻。上一篇 的「相關標的」與「Google Me」開啟了這趟旅程,大部分可能較偏重質化的研究,本篇試圖加些數據;公司相關的數據多如牛毛,那就來好好的思考哪些數據是含金量最高的那一種! 報酬與風險的計算基礎是價格,並非單純每日收盤價格,必須是「還原權值」的,因此其中已經包含了配股配息的資訊。這在以前已經強調過了,若你還用原始的 k 線在那裡分析,那就不要因圖表,程式,模型多厲害而沾沾自喜,結果鐵定是垃圾一陀!而價格的產生來自於市場參與者精明的評價,有人認為貴而售出,有人認為便宜買進,多空兩方勢力交戰的結果最終產生價格共識而完成交易行為,維持短暫的平衡狀態,然後不斷動態調整。買賣方心中的那把尺到底是什麼?這應該就是所謂的「評價模型」。 但觀察許多人交易的理由不見得有嚴謹的方法,可能有點隨興,有點從眾,或是跟隨專家,每個人的尺各不相同,因此也只能假設大部分的人都是理性的,尋找共同的評價標準。越簡單的標準越不容易失效,也就比較值得學習研究,譬如說「越賺錢的公司股價越高」;而越刁鑽的標準也越容易失效,譬如「某分點大量買進時,又遇到股東會前夕,加上甚麼某某科技產品上市等等因素,會造成價格上漲」!研究這種「評價模型」不會累積產業知識,經常需要改來改去,蒐集這些各路消息又特別耗時費工,就不在我的打擊範圍了。因此我挑出第一重點資訊就是 EPS,每股盈餘。
     Like  Bookmark
  • Home - 新人資訊 上一篇 從「近況分析」的思考出發,悟出對淨值的重視,並展開其影響因素,潛心思考成功要素。再多的工具,若沒有落實到<font color=red>操盤手</font>的日常運作邏輯都是無用,所以需要回歸此核心角色,如何成就其強大? 我想除了追求新知以外,就是不斷的自我檢討吧。檢討什麼?當然是績效啊!績效來自於或長或短,或大或小的買賣決策,造成的長短期損益也各自交互影響。每日結帳是必要的,此外也需要緊盯 mtd,ytd 等累計數字,必須見樹又見林。每日把這些長短線績效攤開在眼前,找出非隨機的現象,在腦中建立綿密曲折的因果網路,這就是成長的養分。 為了檢討每日操作,紀錄工作就無法逃避了。原本我只紀錄「當前持有數」而丟棄所有歷史變動資訊,這肯定不行的;但我也非常不想花太多時間記帳,時間是我們該錙銖必較的重要成本項。研究市面上的管理軟體,大多脫不開「交易」層級,試圖搞清楚每一筆交易的損益,這個我早就不認同了,甚至認為這根本就是「干擾」! 最後我得到了相對較佳的解法,就是於每日收盤後紀錄當天廝殺後留下的部位數。也就是當沖或換倉損益我先直接忽略,因為在我的策略中它只會偶爾隨緣發生,大部分的績效來自於基本面選股的長期持有,其次是順應市場隨機性,和事件影響市場情緒所造成的波動,在相對小的比例上微調部位。努力開發之後終於實現了每日每標的庫存數的精密掌握,操盤手可以回朔任何一段時間的操作,榨取最大經驗值!絕對不讓太大的損益發生的莫名其妙。
     Like  Bookmark
  • Home - 新人資訊 前三回合已經表達了許多打底的觀念,現在進到關鍵的步驟了,如何一步一步打造出自己的投資組合?期望達到又強又穩,讓自己可以很有把握的將資金停泊其中,在動盪的局勢中仍可安心,還可長期穩定的享受獲利的果實,為此我們必須很謹慎地踩出每一腳步。 每一個標的一般來說是一家公司,但隨著金融市場的蓬勃發展,各種 ETF 也都可以同樣簡便的方式交易,所以也可能代表一個產業或任何主題,甚至某種原物料或貨幣等等,基礎內涵是一定要了解的。除此之外,任何標的在市場交易一段時間,隨著參與者的不同,又會呈現出無數的個體大小不一的影響力歸納出的行為特性,宛如一個人有個性似的!這都要相當長時間的接觸,研究,實戰,作各種功課而逐步了解的。既然我們需要投注資源在這些標的,又期望產生獲利報酬,這些努力是必要的,就像一個領導者調兵遣將豈是隨意為之的?當然要對團隊成員的特性如數家珍,才能作出好的決策。所以每個人因著從事的行業,背景知識,風險偏好,或僅僅主觀愛好的不同,就會選出全然不同的標的,這就是投資的有趣之處,市場因著有自五花八門的參與者而顯出各種波動而充滿活力。 基於以上種種因素的結論,首先我試著很俗氣的選了台灣佔權值絕對第一名的台積電,輸入 2330.TW 按「生成圖表」可得以下圖表,這裡面有很多資訊,其中紅色線條為「報酬率」的累加,黃色線條為依照年分重新起算的 YTD 報酬,都是以「還原日線」計算而得的。 此外此圖表也列出每年的報酬,五年來平均每年的報酬,sharpe and sortino,最大拉回 (max draw down),圖形陰影部分為拉回的趨勢,整個圖表非常簡單明瞭,把我認為的重要資訊都已經標記上去了。
     Like  Bookmark
  • Home - 新人資訊 前言 一個開發者,在沒有團隊和資金的支持下,做得出具有市場價值的軟體產品?兩年前適逢職業倦怠達到極點,認真的考慮了這個問題,看好雲端產業蓬勃發展的靠山,知識取得管道豐富多元,覺得世界之大實在不甘願妥協持續過著煩悶的日子,心一橫抱著「必死」的決心,開始了我的「肉身衝撞實驗」! 回想大半日子似乎都在「原點」徘徊,擁有無限的「可能性」雖是很快樂的感覺,四處碰壁的壓力隨著日子的流逝而指數成長,無數的嘗試錯誤後不斷的去蕪存菁,終於找到一個題目可以逐步靠攏:「投資組合管理」;以此為題打包成一個產品,也算是一個小小的里程碑。歷史資料風險與報酬的分析,這種基本且重要的功能,市面上的平台並不易取得,也許法人機構用的貴貴的軟體,或養個開發團隊才能做到。沒有預測成分不產生爭議,若要報牌保證獲利就謝謝不用聯絡。 好的系統應該是「直覺化操作」,使用說明越短越好,倒是投資觀念比較重要,必須先搞定背後的哲學基礎,系統只是思想架構中的一小部分,本系統雖無絢麗外表,但有千百次思想辯證和本質探尋,留下了一系列的價值論述文章,從發想到實現均有保存,正如照片記錄了影像的精采片刻,這些文章就是紀錄腦中思想的照片,請看看是否理解並認同? 開發技術-後台類-玩一玩資料吧,開車還是要看後視鏡的!(2022/9/16) (part.0)
     Like  Bookmark
  • Home - 新人資訊 泡泡圖來了: 泡泡圖是非常好的工具,因為可以清楚表達「三維」的數據;除了 xy 軸以外,第三軸就是用泡泡大小來表現,用在本系統真是畫龍點睛。x 軸就設定成「風險」,越右邊風顯越大,y 軸 (縱軸) 就用來表達平均年化報酬率,至於泡泡大小就是配置權重囉,這樣已經完全不須理會左邊密密麻麻的數據了,視覺化就是要這樣用,效果相當好。其中小小點的「大盤」位居左下角很明顯,就是說雖然風險低,但就要接受報酬也極為平庸的事實,所以在本配置中佔比 0,玩這個就是要勇敢面對右邊區域,好好配置讓整體績效往左上方提升,你看右邊的一堆危險的標的都成功地被拉進相對安全的那一大顆「投資組合」裡了。 同樣用來表達風險,若是僅考慮「負報酬」的標準差則是 sortino 重要的計算基礎,左邊擺不下的數字,在圖表竟然也可以稍加設計,更完整表達,只要在圖表區任意空白處 click 就會出現另一種表達方式,注意「橫軸」稍有差異: 另外 mdd 也是重要風險考量因素,因此也順便加入,此圖變成有「三種模式」一魚多吃,一樣隨意 click 可得:
     Like  Bookmark
  • Home - 新人資訊 今早在磨劍時,想起幾個月前 (2022/10) 在台中火車站等車時無聊一望的景象: 寫得真好!我們曾經尋找多少「樹枝」?直到有一天發現,只有自己的翅膀是可靠的。在投資這種「無限賽局」中所有別人的帶領都是樹枝,甚至自己苦心研發的策略也是樹枝,隨時準備好它失效的一天,只有持續保有學習的能力和熱情才是最大的把握!在歲月長河中,當我軀殼衰殘,願我的「翅膀」仍然硬挺,作我全人最堅強的部分,伴我飛向永恆! Google 我決定靠它了,不知道有任何公司對我生活的滲透度之深有超過它的!簡單的把代號和公司名稱帶入搜尋,若能把第一頁瞄完就差不多可瞭解個大概,若更認真一點細讀裡面的內容,幾乎很快就可以狠甩很多「自稱的專家」巴掌了!這是身為現代人最幸福的事,所有的知識那麼透明的擺在公眾眼前,只差在有限的腦容量,對有限的時間資源分配給「價值含量不一的知識」!我幾乎想要下個結論:在這個世界主動搜尋知識的人宛如貴族,芸芸眾生被動的被餵養加工後的知識,可能被和平的豢養著,也可能被無情的宰割著!至於我,不敢想能爬到怎樣的知識貴族,只能盡量拒絕被豢養,雖然 SEO 有一定的操作空間,但已經相對公正了,所以就這樣每天不斷的 Google 著! 另外發現 yahoo finance 很貼心的提供了「相關公司」api,加上用心思考的設計,每查詢一家公司,就把關連性最高的五家公司列在旁邊,這樣除了可以用 Google「縱向鑽研」,也可以「橫向擴展」,你看查詢了 TSM,旁邊就出現 NVDA, ASML 等,知識的點線面在這兒等著,隨時當腦袋進入「海綿模式」時都可以在此盡情地吸收養分。這幾個元素看似技術層次不高,但組合起來卻成為日常的「知識工程研發中心」,也算是一種設計創新。
     Like  Bookmark
  • Home - 新人資訊 上一篇 挑出了 Trailing EPS, Forward EPS, PE Ratio 等資訊置於尋寶區,開啟了我的財報學習之旅,發現若想忽略密密麻麻的財報只看 EPS 應該是行不通的,天底下沒有這麼便宜的事吧!但到底要看多細?顯然看太多也不是好事,因為付出的都是昂貴的時間成本阿,要挑出重點才好,而重點到底在哪裡?若 EPS 是財報的核心,需要從核心擴展到圓周,再挑出幾項支持核心之重要因素,才能掌握得更好,該好好的來仔細推敲。 EPS 是已經發生的事實,PE (本益比) 所在意的卻是未來的,為了判斷未來的發展趨勢,多看幾期歷史資料用處不大,單純數字的跳來跳去表達的資訊非常稀少,需要分解此數字的組成結構,在變動的表象中找出相對穩定的基礎。原始報表太過複雜,對個別投資人而言真的很難憑己力去深入挖掘,所以先挑戰比較容易的目標:以下為 公開資訊觀測站 提供的「簡明報表」之損益表: 報表的邏輯從上到下,EPS 在報表的最下端是所有數字的集大成,每一個項目都會影響最終結果,從其中去蕪存菁挑出最重要的四個組成項目,如上圖所標示。從最重要營業活動「營業收入」,扣掉各式各樣的成本留下真正的利潤,大概區分三個階段,除了營業收入需要重視絕對金額,其他項目其「比例」是較具意義的。經過資料的去蕪存菁和畫面反覆調整設計,得到目前滿意的結果如下: 三年來依照均值比較顯示上下箭頭,三個比例項目已經相當程度的反映出公司的經營能力,整個一目了然完全掌握重點,我想幾乎可以把原始報表完全省略不看了,省下許多時間和精神!這是很重要的系統價值,減法思考,少就是多,我的系統不求完整的資訊,只保留精粹的關鍵資訊,和通往外在世界的觸角,持續吸引並累積更厚重的核心價值。
     Like  Bookmark
  • Home - 新人資訊 記帳是個很大的議題,從集團控股超複雜的財務報表,到單一公司報表,小至家庭個人,或任何一個專案或小計劃,都有必要擁有一本由金錢觀點統整出所有活動的集大成,也相當程度就是成敗的結論。研究這麼多公司林林總總的報表,若自己本身的「損益,資產,負債」等等都搞不清楚,那所有努力也是枉然。因此,本系統功能要來擴充了。 多年來自身存在一個迷思:沒有轉成現金形式入袋的資產不算賺,帳上虧損一直撐著也不算賠。當投資週期變長,就產生一堆長期套牢騙自己是長期投資,稍有獲利急於處分,以為趕快在心中的損益表加上一筆比較快樂,結果就是越來越「帳料不符」,報表無法反映真實,真相已經越來越遠了,所以說是打一場迷糊仗並不為過。這樣的情形持續數十年,這一兩年才徹底覺悟:我該面對的是「淨值」!雖然期望著這些淨值的組成都是健康有成長性的資產,但一切都只是期望,需要誠實面對的是現在,這與評估公司是一樣的架構,但卻有非常不一樣的觀點。 重點抓住之後,還有一個配套,就是帳戶的獨立性。若投資所用的帳戶與生活花費混在一起,市價的變化與不定時的花費共同影響淨值的波動,這樣也會破功。這問題好解,只要開好獨立帳戶並入金固定金額,專款專用的概念,非重大事件不輕易挪用。我想這對企業經營這而言是很基本正常的事,對個人投資者卻常被忽略,需要特別注意。這屬於觀念的建立和一次性工作,搞定它好處非常多,因為即使為了分散風險而採取小單位多次進出產生密密麻麻的交易紀錄,也可以不用在意,只要專注整體帳戶價值沒有意外失控就行了。 想通了這點整個就豁然開朗了,原本拘泥於想算清楚每一筆交易的損益,一直抱怨券商的軟體只能「先進先出」,無法認列特定進場價的成本而困擾,如此看來已經沒有意義了,省掉很多耗時無意義的紀錄工作,這點很重要。想起有些所謂的理財專家,教導人對日常消費進行記帳,這種事容易導致「見樹不見林」的窘境,花費太多時間在這些瑣事也讓人忘了應該多一些開源,節流等大方向的思考。相較於企業記帳是消耗大量成本的工作,必須在每一個生產過程留下紀錄,並聘請專業的會計團隊才行的,個人記帳上若能簡化而有效用,那就是決勝的關鍵了。
     Like  Bookmark
  • Home - 新人資訊 上一篇 完成了「實際持有數量」的輸入功能,這些數量隨著各個股票價格的起伏,價值不斷的變動著,每一個時刻都可以算出各標的在總體資產價值中的佔比,與所設定的權重比例存在著大小不一的差異,這些差異就產生了許多觀點,管理的工作就在於主觀解讀其中的變化並賦予意義,並做出相對應的加減碼調整。 最新價格,系統每個交易日盤後自動更新。 市值 = 價格 * 持有數量(股) / 1000,單位 K,從這兒可以計算占整體部位的比例,與所設定的權重相對應。標題可以點擊排序,讓佔比最大的排在最上方。後面欄位其中藍色字的標題都有排序功能。 再平衡:實際比例與理論權重的差額,代表需要加減碼的額度;顯示 percent 數之外也計算出參考金額 (K)。 5 日率:其中幾日可以設定,預設的 5 代表當周檢討的概念,可以改成 20 表示檢討一個月以來的表現,累積漲跌幅。 實際利潤:實際持有「個股市值」 * 漲跌幅度 理論利潤:實際持有「總市值」 * 漲跌幅度 * 權重佔比
     Like  Bookmark
  • Home - 新人資訊 自從歷經千辛萬苦的錄製了生平第一支影片之後,已經好整以暇多日,好好再度審視自己所講的觀念,目前結論算是滿意。在錄製的影片的事上,雖然經過大量的練習,還是無法達到順暢的地步,但該表達意思都有到位;如果用 1.5 倍速播放可以大幅抵銷許多缺點,推薦一看。 https://youtu.be/-0FPVE0oNJ8 悠閒漫步的氛圍,正是學習新知與迸發創意的溫床,來研究一下理論吧!很快的我就發現了一座寶庫:一位出身天文物理名叫 Robert 的年輕人,竟然把數十年來主要的投資組合最佳化的演算法都實作成 python package PyPortfolioOpt 並公開分享給大眾使用,真是太令人敬佩了,在此恭敬地引用: Martin, R. A., (2021). PyPortfolioOpt: portfolio optimization in Python. Journal of Open Source Software, 6(61), 3066, https://doi.org/10.21105/joss.03066
     Like  Bookmark
  • Home - 新人資訊 改版緣由: <font color="red">加入「取樣天數」</font>:原本所有績效指標均是從資料庫的起始日 2017 開始起算,導致新的收盤資料加入後,計算基礎變得不一致,越後面加入的資料影響力越小,指標永遠不動如山,有點不合理。雖然本系統的架構著重期間較長,但每月每季的變動還是需要辨識出來比較好,所以預計以「固定天數期間」例如 1000 天為計算基礎,滾動式取樣,這樣比較合理。 <font color="red">降低「google sheet」的依賴</font>:為了加入「取樣天數」這個動態參數,我原本所倚重的 google sheet 力有未殆,若硬去設定一個「超複雜公式」那將造成日後維護的負擔,不宜如此硬幹,且 google sheet 並不提供商用方案,也就是無法藉由付錢提升運算效能,這也困擾我已久。趁此機會來個系統大手術,把這個一大坨的重要運作核心切割置換,這真是挑戰性非常高的工作!為了系統穩定性的提升,我也樂於接受挑戰,鍛鍊我的技術力。 <font color="red">加入 python 技術的出海口 flask</font>:要將原本串連 google sheet 的一大堆公式抽出來計算,鐵定需要許多的矩陣運算,這讓我的 python 不能只是躲在後台背景運行,需要與前端的 web 連動,因此我要搞定 python 的 web 後台接口。經過評估我選擇了 flask,將它納入服役行列是很酷的事情,將徹底解放 python 豐富的生態系能力,透過 web 這價值出海口展現給使用者。上一篇所研究的 portfolio optimization 理論,已經有神人實作成 python package,當然要接進來使用。 經過春假期間的努力,已經完成改版,取樣天數預設 1000 天,就是大約取 4 年的交易資料,每納入新的一天就會同時捨棄最舊的一天。
     Like  Bookmark
  • Home - 新人資訊 「沒賣就沒賠」通常是深度套牢者自我安慰的想法!錯的不是深度套牢,卓越的基本面投資者也會經歷這些,差別在於想法上關心的重點;若思路進入死胡同,會直接影響讓後續決策亂無章法。 給出詳實的交易紀錄是經紀商的責任,卻不該是投資者的重心,他們只不過用粗糙的先進先出的方法認列,這些數字就是容易誤導人的陷阱。公開發行的企業被規定要定期發布財報,所以「認列」成為每個月底季底的重中至重,不然就不會有所謂「作帳行情」之類的名詞出現。作帳可以提升行情嗎?這其實是很奇怪不合理的,但當前商業運作監管制度就是這樣,漸漸大家就見怪不怪了,但對於一個自負盈虧的自營商就不需有這窠臼了,應該誠實的面對最根本的「淨值」! 在每日的行情波動之後,不管淨值的形式是證券或現金,在心理上就應該即刻「認列」了,關心的是現金水位是否足夠安全,持有證券是否優質或持續存在獲利機會。突然發現自己已經許久對「帳上損益」視而不見了,幾乎忘了它的存在了,自然也就不會有月底季底為了美化帳面而有的任何奇怪的投資決策。 但淨值包含了證券與現金,甚至各有數個帳戶,我所思考的就是如何用系統管好證券部位,至於現金帳戶就是使用者的責任了,千萬不要與日常花費混在一起,這樣可以讓每天的帳務單純化,只要執行一個簡單的加法即可。
     Like  Bookmark
  • 跳蚤還活著 這是 2003 年讀的書,埋藏了我的跳蚤魂,終於在 2020 年掙脫了以大象為表徵巨型企業體的束縛,恢復到心中所渴望輕巧自在的狀態。 失了組織加持的光環,孓然一身的「我」好陌生,官長頭銜瞬間扒光,啊不過就是中年失業的魯蛇,等著當下流老人吧!幸好還有父母給我的名字,還有家人溫暖的支持,這僅有的社會認同很珍貴,除此之外,還需要積極開拓自己的角色。 我在資訊系統的開發上擁有豐富的經驗,後台類的資料庫設計管理,資料分析技術,運算平台橫跨 dotnet,python,nodejs;前端則主要熟悉 angular 網頁框架,加上涉獵一些 ios 和 arduino 端點運算平台。這些組合起來,可以開發一個完整個應用系統,甚至延伸到物聯網更大的架構。 開發工作有兩種,一種是到外包媒合平台包案子,一種是自己主動設定題目,研發產品,我選哪一種?
     Like  Bookmark
  • 跳蚤還活著 https://youtu.be/XIdfxoayqbs You write your own destiny. You make your own future. My father left my family when I was two years old, and I was raised by a single mom who had to work and who stuggled at times to pay the bills and wasn't always able to give us the things that other kids had.
     Like  Bookmark
  • 跳蚤還活著 跳蚤活著-序 (2023/2/24) 歐巴馬的激勵演說,聽抄以致敬之 (2023/2/24)
     Like  Bookmark
  • 新人資訊 先下載專案骨架-:https://github.com/appbrewery/EggTimer-iOS13 版面上中下三個 View 組成一組 Stack View,中間三個蛋是放在三個水平排列的 Stack View 裏面,也準備好會用到的圖片資源。 然後開始寫程式,這次首次使用 dictionary,就是一群 key-value 的組合,key and value 型態必須固定,用中括號括起來就可以了,在此用來儲存各種不同熟度的蛋所需烹煮的時間秒數。因各種熟度必須標示在按鈕上供使用者知悉,所以設定各 Label Title 是必要動作;按鈕動作觸發時,程式直接抓取觸發按鈕的 Label Title,並以此為 key 到 dictionary 中尋找對應的時間秒數放置於 totleTimer 變數中,完全沒有重複的工,不錯。Timer 設定每一秒執行一次 updateTimer(),此 function 必須加上 @objc 關鍵字以表示開放 object-c 呼叫 ,每次執行倒數計時並更新 progress bar。另有一細節是要考慮使用者正常操作程序有可能在不關閉 App 的情況下重複按很多次不同的按鈕,在加入 Timer 物件前必須用 invaliate() 清除先前的 Timer 物件。倒數計時完成時播放一段音頻。 為了驗證執行效果先將 Soft 改成 5 秒,執行結果正常。 https://youtube.com/shorts/XaeirOkAQlI
     Like  Bookmark
  • 新人資訊 這次練習的專案是由 App 顯示一系列的是非題,讓使用者依序回答,程式必須判斷正確與否並即時計分,藉此也帶進 MVC Design Pattern,Struct 等幾個重要的技術組成。先下載課程提供的專案框架:https://github.com/appbrewery/Quizzler-iOS13 UI 的編排由一個縱向的 Stack View 依序放入分數 Label,題目,答題用的兩個按鈕,和 progress bar,跟著課程的講解和引導一步一步的填入程式。 首先要解決眾多題庫的儲存問題,不同於直接寫一堆常數陣列混在程式裡面,這兒先定義了一個 struct Question 代表單一題目,內含題目本文和標準答案;再定義另一個 struct QuizBrain 代表整套題庫,裡面除了存放題目以外,還可定義考試進度,即時分數等外加輔助欄位,和一些「行為」如檢查答案,跳到下一題等簡單動作。整個使用起來完全跟 c# or java 的 class 一模一樣,後來知道其實 swift 也有 class,似乎跟 struct 非常接近,只在於記憶體配置方法不一樣而已。 以上注意到 mutating 宣告,代表此行為會改變物件內部狀態,由此看出 swift 語言其嚴謹性,沒加編譯是不會過的,防範所有非預期的狀況。這樣就建立了兩個 struct,各自存放在獨立檔案,按照慣例檔名與 struct name 相同,這可以歸類為 MVC 中的 M(Model) 部分。storyBoard 當然是屬於 V(View) 部分,與 C(Controller) 分開資料夾放置以明確專案結構: 將主要的屬性和行為都封裝到 Model 裡之後,controller 的程式碼就可以非常精簡和優雅:
     Like  Bookmark
  • 新人資訊 隨著課程的安排逐步加入各種技術元素,這次要演練兩個頁面轉場機制,以無聊的 BMI 計算為主題,還有講解更多 Optional 的用法。首先載入骨架專案:https://github.com/appbrewery/BMI-Calculator-iOS13 打開主畫面後兩個 View 映入眼簾,怎麼讓 App 控制權在多頁面間切換是本練習的重點。 程式流程為輸入身高體重後輸出 BMI,身高體重採用 Slider 元件可以滑動設定,計算公式很簡單就是體重 (kg) / 身高 (m) 的平方,輸出有玩點小花樣,若高過一定的數值顯示紅色並顯示建議文字,相對的一般或太低則顯示對應的顏色和不同的建議文字。首先遵守 MVC 設計模式,將 BMI 相關的欄位和計算邏輯抽出為 Model,建立兩個 struct: 其中注意到 swift 語言對於可能的 nil 值處理非常嚴謹,可能為 nil 的變數或型別後面要加 ?,型別變成 optionl(String),optional(Int) 等,不同於單純的 String or Int,要將 optional 轉型成確定的型別,設計師必須在流程上確認有值的前提下,加驚嘆號轉型,若 nil 值強加驚嘆號程式會發生錯誤,這就是設計師要負的責任。當 nil 發生時該填入什麼預設值,最方便的寫法就是雙問號運算子,免去冗長的 if-else。 兩個畫面分別對應到各自的 controller,第一個畫面的 controller 如下,slider 滑動和按鈕觸發程序的做法已經很純熟,只有「過場」到第二個畫面需要注意如下:
     Like  Bookmark