隱私權政策

搜尋此網誌

技術提供:Blogger.

關於我自己

我的相片
目前從事軟體相關行業,喜歡閱讀、健身、喝調酒。習慣把遇到的問題記下來,每天做一些整理方便自己以後查。 Python、Rust、Kotlin等程式語言皆為自學,目前比較著重在Rust語言,歡迎一起討論。

2026年2月22日 星期日

【讀後心得】Clean Code - 軟體工程師聖經之一


這本書讀到最後,最精華的部分莫過於作者 Uncle Bob 整理的「啟發(Heuristics)」清單。它像是一面照妖鏡,反映出我們日常開發中不經意留下的技術債。為了方便日後複習,我將書中的重點與常犯錯誤整理成這份清單。

一、 註解的藝術:程式碼應該自我解釋

註解通常是為了彌補程式碼表達能力的不足。如果程式碼夠清楚,註解往往是多餘的。

  • 避開不適當的資訊: 註解應該存放技術心得或決定理由,而不是版本紀錄或作者資訊(那是 Git 的工作)。

  • 清理廢棄與多餘的註解: 過時的註解比沒註解更危險,因為它會誤導開發者。

  • 拒絕被註解掉的程式碼: 這是最該避免的!如果程式碼不再需要,請直接刪除。Git 會幫你記得它。

  • 寫得不好的註解: 避免廢話(例如:i++; // i 加 1),要寫就寫「為什麼」這麼做,而不是「怎麼做」。

二、 函式:專注於「一件事」

函式是程式的最小邏輯單位,混亂通常從這裡開始。

  • 參數精簡化: 盡量不超過 2 個參數。**旗標參數(Flag Arguments)**是大忌,因為它明示了這個函式做了「不只一件事」。

  • 輸出型參數的陷阱: 習慣上我們預期參數是輸入。如果要改變狀態,應該改變它所屬物件的狀態(object.update() 而非 update(object))。

  • 說到做到(Do One Thing): 函式名稱如果是 renderPage(),它就不該順便 saveSession()。副作用(Side Effects)必須在名稱中體現。

  • 避免傳遞性導覽: 也就是所謂的「火車連結」。程式碼不該出現 a.getB().getC().doSomething(),這代表 A 過度了解 B 與 C 的內部結構。

三、 命名:代碼的靈魂

好的命名能省下好幾行註解。

  • 範圍與長度成正比: 區域變數(範圍小)可以用短名;全域變數或大範圍使用的變數,名稱必須夠長且具備描述性。

  • 標準命名法: 整個專案應該有一套共通語言。如果你用 fetch 拿資料,就不要在別的地方用 getretrieve 做同樣的事。

  • 描述副作用: 如果一個函式會初始化連線並回傳資料,別只叫 getData(),應該考慮 createConnectionAndFetchData()

四、 測試:程式碼的最後防線

沒有測試的程式碼就是「壞掉的程式碼」,只是你還不知道而已。

  • 邊界條件是關鍵: 測試不要只跑快樂路徑(Happy Path),要針對 0nullempty 或極大值進行測試。

  • 詳盡測試錯誤附近: 臭蟲喜歡聚在一起。如果你在某個函式發現錯誤,那它的上下游通常也藏著問題。

  • 速度必須快: 如果測試跑一次要五分鐘,開發者就不會想跑它。慢速的測試最終會被遺棄。

五、 一般性常犯錯誤 (Heuristics)

這些是開發中最容易被忽略的細節:

  • 重複程式碼(DRY): 這是萬惡之源。只要看到重複,就該考慮抽象化。

  • 不一致性: 如果你在一個類別用 req 代表 Request,另一個類別就不該用 request。保持一致能降低認知負擔。

  • 被遺棄的程式碼: 沒被呼叫的函式、永遠不會進入的 if 區塊,請果斷刪除。

  • 選擇型參數: 盡量避免在函式中使用選擇性參數,這通常代表函式邏輯可以被拆分。


結語:童子軍規則

最後,我想補充書中最重要的核心心法:「離開現場時,要比你進來時更乾淨。」 (The Boy Scout Rule)

我們不需要一次就把整份爛程式碼重構完,但每次修改 bug 或新增功能時,順手改掉一個爛命名、刪掉一個廢棄註解。持之以恆,程式碼就不會走向腐化。


【生活】腮腺瘤開刀紀錄


在經歷這篇

之前生病時給附近診所看病,順便問問看他對於腮腺瘤的看法。原本我的醫師覺得不需要開刀,等到以後再開。但診所醫師覺得這個大小應該是不能等的大小,建議我去轉診找其他醫生諮詢一下。因此轉到台大醫院頭頸部腫瘤婁培人醫師    ,這位醫師是台灣這方面的權威了


初診

大概十月底、十一月初的時候去給婁醫師看,台大醫院真的人超多要等一陣子。到婁醫師那會先給旁邊的醫生稍微看過,詢問症狀,之後才會是婁醫生來看。婁醫生看了轉診單內容後,稍微觸診一下,就決定要開刀了。醫生認為我這個年紀腫瘤已經長成這樣,那以後變成惡性腫瘤機率太大了。那不如趁年輕的時候提早開一開,這樣恢復能力也比較好。而我最擔心的顏面神經後遺症以及是否會有破相的問題,婁醫師很自信地說在他這邊不會有顏面神經後遺症,而破相則是需要經過半年的養護刀痕就會比較輕。聽完分析後就決定開刀。

之後去其他房間跟一位年輕的醫生約開刀時間,婁醫師的刀需要等到兩個月後,原本醫生問2025/1/2可不可以,提前一天1/1住院。但我覺得一年第一天就在醫院真的太可悲了,因此詢問有沒有其他時間。後來改成2024/12/26開刀,12/25住院,變成聖誕節待在醫院,一樣可悲。

開刀前一天(D-1)

早上9點到10點要到台大醫院東址報到,報到人數真的很多,如果想早點到病房休息的可以早點去,但我寧願在床上多睡一點就是了。報到後要先量身高體重、抽血、心電圖、X光、驗尿,之後就去病房了。

到病房後就是漫無目的地等待,因為醫生不知道什麼時候會來,除了午餐的時候出去吃一下以外,其他都在病房等醫生。一開始住院醫生來問一下病情以及手術同意書,並且會討論自費項目。其中探針是必要的,要探查顏面神經的位置,剩下的自費項目我表示根據婁醫師習慣,他想要用什麼都可以,只要可以早點康復就好。之後是麻醉醫師和婁醫師會來講解。等到全部醫師來過後可以去跟護理師確認,就可以去吃晚餐了。晚上則是一定要洗澡洗頭,特別是頭髮,因為可能之後好幾天都不能洗。

開刀當天(D0)

我是第五刀,護理師說根據經驗大概在一點左右。我大約是在一點半被叫到的,之後坐輪椅被推去應該是等待室之類的地方躺一陣子,這段時間有許多護理師會來做確認,包括開刀部位、開刀醫生等等。體感時間大概在兩點十五分時再一次確認資訊,就由醫生把病床推進手術室。可能醫生看我超級緊張,一直想跟我聊天,推著我的病床說Dejavu、水溝蓋跑法接一顆氮氣之類的,但還是超緊張哈哈。

到手術房後自己爬上開刀床,會最後一次核對資料,之後就是戴上心電圖、血壓等等的設備,並且戴上氧氣罩。麻醉師之後喊說來哦我們準備睡覺了,之後感受到手臂涼涼的,過沒多久就睡著了。原本是想要數自己可以撐多久,但也忘記數到多少就直接睡了。

根據家人說,外面的螢幕大約顯示開刀70分鐘。術後有印象看到家人對我打招呼,不過不到幾秒又馬上昏睡過去。下一次醒來就是恢復室了,大約30分鐘後就醒來,醒來後喉嚨超級超級痛,超級乾的感覺,因為全身麻醉會需要插管,導致喉嚨超痛,護理師有噴一點點水讓我緩和,再待15分鐘確認沒問題就推回病房了,回病房後自己爬上病床。醒來後其實都沒有再睡著了,期間都有一點點暈暈的,有點像喝醉的感覺。除了喉嚨真的超痛以外開刀傷口其實不太會痛,因為開刀後要插引流管,引流管插進肉的那個傷口會一點點痛,我自己是覺得拔智齒痛多了。

病房大約待一小時後開始嘗試喝水,如果不會吐就可以開始吃流質食物。期間需要下床去一次檢查室看一下開刀情況如何,第一次下床真的會暈,只能慢慢走。吃飯我自己覺得胃口算還行,在美食街買的一碗粥有吃完,但不能咀嚼,咬東西開刀傷口就會痛。護理師會要求要去上廁所,原本在床上吃飯都跟沒事人一樣,下床去尿尿還是會有一點暈。之後家人看我的情況還好就先回去休息,術後第一晚自己在醫院過也沒發生什麼事。

開刀後一天(D1)

第一天醒來第一個想法就是,靠邀喉嚨怎麼可以痛成這樣,喝水痛、吞口水痛、做什麼都痛,但起來後開始狂喝水就比較好一點。第一天還需要打抗生素和吃止痛,期間婁醫生有來看過我,身體除了喉嚨痛以外、不能轉頭不能咬,其他都很健康。家人有提到我的臉好像有一點點歪歪的,但婁醫師說沒有,是因為我頭歪的才會覺得臉怪怪的,這個就等一陣子可以轉頭後再確認。

開刀後兩天(D2)

術後一兩天還是都吃偏向流質的食物,蒸蛋、布丁、果凍、稀飯等等,樓下有賣鱸魚粥,可以用舌頭把肉頂開,住院這幾天最常吃鱸魚粥。這天除了住院醫師有來換藥,看一下引流管的狀況,並沒有發生什麼事。身體還是一樣喉嚨痛,開刀傷口不要動他就也沒感覺,然後晚上睡覺背很痛床很硬。我自己是覺得術後第二天引流管已經沒什麼東西了,而且也把止痛藥停掉了,原本是以為隔天可以出院,但醫師還是覺得繼續插著再觀察。

開刀後三天(D3)

術後第三天拔掉引流管,拔引流管是除了喉嚨痛以外最痛的行為,真的超痛。醫生還說這行為不會痛,拔出來那瞬間都快哭了,據家人說那根引流管超長直接插到肉裡面。拔引流管後繼續觀察一天,這天則是開始嘗試吃一咪咪的固體食物,主要是肉末之類的,預計隔天出院。第三天最想做得事情就是洗頭,頭整個超油又不敢自己洗,傷口不能碰水。

出院當天(D4)

最開心的一天,終於出院了,比當初醫生預期的多住一天。早上等護理師叫名字就可以去櫃台辦出院手續,然後去一樓繳費。總花費大約是47k。繳完費後去地下室洗個頭,整個頭真的超級油,洗完才覺得有出院的感覺。在醫院每天都躺著滑手機沒特別感覺,出院後才發現我走路時傷口震動會很痛,搭計程車如果道路有顛簸也會痛。

出院後1-2天(D5-6)

出院隔天剛好是跨年,不能喝酒是在是讓人非常難過,但至少這天可以吃比較硬一點的肉,晚餐吃火鍋只有一點點不舒服,但還可以接受。有稍微出去看煙火,如果長時間待在外面被冷風吹,傷口會超級超級痛,再加上走路的痛,真的覺得不適合出門。另外如果氣溫突然有變化,例如突然到比較冷的空間,傷口也會開始痛。有嘗試自己洗頭,真的很辛苦,用一個塑膠袋包著傷口,水開小一點洗,但覺得洗得很不乾淨。晚上睡覺時左臉整個都是麻的,傷口也會一直有在抽動的感覺,蠻不舒服的。

出院後3天(D7)

開始回去上班,走路、搭捷運震動的時候會痛。工作性質剛好不用走來走去,還算可以上班。吃東西不太方便,公司附近沒什麼軟的食物,幾乎都是排骨便當之類的,只能吃便利商店的粥。晚上原本想去家裡附近診所請醫師幫忙換,但醫師說這種還沒拆線的第一次換藥他不敢,他怕有一些醫療糾粉,只能回家自己換。基本上就是拿著生理食鹽水慢慢拆開,美容膠底下都是血塊,邊拆邊慢慢清血塊。第一次換美容膠家人怕我會痛,拆了30分鐘左右才把所有美容膠拆下來。但婁醫生蠻厲害的,其實看不太出來傷口,線也很不明顯,拿燈照才看比較清楚。之後花了15分鐘把旁邊血塊全部清掉,再花15分鐘把美容膠貼回去。基本上第一次換美容膠整個流程花了一個多小時,真的很花時間又很累。有買了一個小孩子用的洗髮帽,雖然不能全部擋住水,但至少不用洗的那麼辛苦。

出院後8天(D12)

這幾天吃飯基本上沒什麼問題了,除了那種很硬的肉和很Q的東西不能咬以外,其他的都還可以,只是偶爾吃飯扯到傷口會痛。今天回診,醫生看了一下就說美容膠可以不用貼了,如果擔心留疤可以擦除疤膏,不用拆線因為當初是使用會自己吸收的線。醫生說沒有忌口,也可以直接碰水,但因為這幾天剛好寒流,傷口碰到冷風會抽痛,因此還是貼著美容膠。

出院後一個月

現在已經沒有貼美容膠,每天會擦一次除疤膏。傷口開始會癢,有一些紅腫像濕疹的感覺,也不確定發生甚麼事。除了左耳那邊都是麻麻的,其他沒什麼問題,碰到也不太會痛。

基本上現在就跟正常人差不多了

2025年4月12日 星期六

【讀書心得】富爸爸窮爸爸-與其為錢工作,不如讓錢為我們工作


富爸爸窮爸爸(Rich Dad Poor Dad)

富爸爸窮爸爸是一本已經超過20年的投資理財書,作者的理財觀念來自於兩位爸爸,一位是親生父親在教育界的窮爸爸,另一位則是朋友的父親富爸爸。兩位爸爸對於金錢觀有很大的差異,窮爸爸覺得應該好好讀書,最後進去大公司穩定賺錢;而富爸爸則是覺得賺到的錢要馬上投資,要讓錢生錢,而不是安於薪水而已。

台灣教育其實就是窮爸爸的典型思維,總是推薦小孩子去做一些穩定的工作,例如公職、工程師、醫師等等,卻都不教他們正確的理財觀念。大部分人只知道工作、賺錢,最終只是一直繳稅幫政府增加收入。


想要擁有正確的理財觀念,就必須知道資產(asset)和負債(liability)的差別。窮人之所以為窮,就是他抱著一堆自己為是資產的負債,例如車貸、卡債等等。而富人之所以為富,是因為有錢之後會馬上投資股票、債券等等。






窮人階級拿到錢馬上就買東西買掉;中產階級會有自以為是的負債;而富人階級則是透過資產不斷累積收入。

何謂賭博?當你做好萬全準備而下的決定不是賭博,賭博是指那些沉浸在美好幻想的人。有些人可以把這支股票變成資產,有些人卻只是把它變成單純的支出,跟丟進水溝一樣。當然不是每次都可以成功,但失敗也是成功的過程。當你拒絕失敗時同時也代表著拒絕成功。


作者建議年輕人找工作應該以學到東西為主,而不是第一份工作就以高薪為主。其實我是蠻同意的,如果要高薪其實進台積就好,但同時也知道台積的設備、廠務學到的東西有限。因此最終還是決定走工程師,雖然一開始薪水不高,但邊做邊學總會有變好的一天。

生活就像是去健身房,最困難的就是決定行動的那個瞬間,只要撐過去最後都會變簡單。


五個不能增加資產的原因

1. 恐懼(Fear): 恐懼使人不敢冒險,不敢作出投資或創業的行為

2. 憤世嫉俗(Cynicism): 如果每天都是負面看法,會讓人放棄機會,認為所有事情都會失敗

3. 懶惰(Laziness): 缺乏動力去學習新知識、制定新的財務目標,會使人難以累積財富

4. 壞習慣(Bad habits): 購買不必要的東西、欠缺投資習慣等等都會影響到財富

5. 驕傲自大(Arrogance): 過於自信與自負,永遠只相信自己,導致無法與人溝通成長

不要總是說我無法負擔這個東西,而要說我要怎麼負擔這個東西

模仿、傾聽、學習。不要總是想要賺快錢,要有長遠的眼光。在投資股票或債券之前,先投資最重要的東西-心態

行動永遠贏過沒有行動的人

多參加一些研討會、課程,跟不同的人接觸

盡量把所得轉換成被動收入


透過作者羅伯特·清崎(Robert Kiyosaki)從「窮爸爸」(親生父親,教育工作者,強調穩定工作)與「富爸爸」(朋友的父親,企業家,重視投資與財務自由)兩種截然不同的金錢觀,傳授理財觀念與實現財富自由的思維。書中強調財務教育的重要性,教導讀者如何分辨資產與負債、如何讓錢為自己工作,以及如何培養正確的理財心態。

1. 窮爸爸與富爸爸的對比

  • 窮爸爸的觀念
    • 強調好好讀書,進入大公司或從事穩定職業(如公務員、工程師、醫師),以薪水為主要收入來源。
    • 認為金錢是生活的保障,穩定最重要,但缺乏財務教育,容易陷入「為錢工作」的循環。
    • 代表傳統思維,特別是在台灣教育中常見,鼓勵追求穩定但忽略理財知識。
  • 富爸爸的觀念
    • 強調讓錢為自己工作,賺到的錢應立即用於投資(如股票、債券、不動產),創造被動收入。
    • 認為單靠薪水無法致富,必須透過資產累積財富。
    • 鼓勵財務教育,學習如何管理金錢、辨別投資機會,並承擔適當風險。
  • 書中提到「窮爸爸」代表大多數人的思維,專注於短期安全感;而「富爸爸」則教導長遠的財富策略,挑戰傳統觀念。兩者的對比突顯了財務教育的缺失如何影響人生選擇。

2. 資產與負債的區別

  • 資產(Asset):能為你帶來收入的東西,如股票、債券、房地產(帶來租金)、企業等。
  • 負債(Liability):會消耗你金錢的東西,如車貸、信用卡債、奢侈品等。
  • 核心觀點
    • 窮人與中產階級常誤將負債當資產(如買車、買房自住),導致財務負擔加重。
    • 富人專注於購買資產,讓財富持續增長,形成被動收入。
  • 階級差異
    • 窮人:拿到錢立即消費,幾乎不累積資產。
    • 中產階級:有較高收入,但常陷入「自以為是資產」的負債(如房貸、車貸),生活看似穩定卻無財務自由。
    • 富人:透過資產創造財富,專注於長期回報而非短期享受。
  • 書中強調「現金流」的重要性,富人讓錢流入(資產),而非流出(負債)。作者還提到「自住房屋」通常不是資產,因為它不會帶來收入,反而有維護成本與貸款壓力。

3. 投資與風險的觀念

  • 何謂賭博?
    • 賭博是未經準備、沉浸於幻想的行為;真正的投資是基於知識與計畫的決定。
    • 同一支股票對有知識的人可能是資產,對無知的人則是負債或純粹支出。
  • 失敗與成功
    • 失敗是成功的必經之路,拒絕失敗等於拒絕成長。
    • 投資不可能永遠成功,但透過學習與調整,失敗能轉化為經驗。
  • 書中強調「財務智商」(Financial Intelligence),包括會計、投資、市場理解與法律知識。這些技能能降低風險,讓投資更穩健,而非單純靠運氣。

4. 工作與學習的選擇

  • 作者建議:年輕人找工作應以學習為主,而非只追求高薪。
    • 例如:進入台積電或許能獲得高薪,但可能學到的技能有限(如設備操作而非全面發展)。選擇工程師雖然起薪不高,但能邊做邊學,長期成長空間更大。
  • 補充:富爸爸建議年輕人選擇能學習財務、銷售、管理等技能的工作,因為這些能力是創業或投資的基礎。書中還提到「多嘗試不同領域」,以拓寬視野,避免被單一職業綁住。

5. 行動與心態的重要性

  • 行動力
    • 生活如同健身房,最難的是開始行動的那一刻,但只要跨出第一步,後續會變得簡單。
    • 行動永遠贏過沒有行動的人」,強調執行力是財富累積的關鍵。
  • 心態調整
    • 不要說「我無法負擔」,而要問「我要怎麼負擔?」這種思維能激發創造力與解決問題的能力。
    • 在投資股票或債券前,先投資自己的心態,培養耐心、紀律與長遠眼光。
  • 模仿、傾聽、學習:向成功人士學習,避免追求快錢,專注於長期目標。
  • 書中提到「財務自由」的核心在於心態轉換,從「為錢工作」到「讓錢為自己工作」。作者鼓勵讀者建立自信,克服對失敗的恐懼,並持續學習新知識。

6. 五個阻礙財富累積的原因

  1. 恐懼(Fear):害怕失敗或虧損,導致不敢投資或創業。
  2. 憤世嫉俗(Cynicism):負面思維,認為所有機會都會失敗,從而放棄嘗試。
  3. 懶惰(Laziness):缺乏學習新知識或設定財務目標的動力,停滯不前。
  4. 壞習慣(Bad Habits):亂花錢、沒有投資習慣,導致財富無法累積。
  5. 驕傲自大(Arrogance):過於自信,拒絕接受他人建議,阻礙成長。
  • 這些障礙不僅適用於財務,也影響生活其他層面。書中建議透過教育與自我反省克服這些問題,例如閱讀、參加課程、與不同的人交流。

7. 實踐建議

  • 創造被動收入:將所得轉化為能持續產生現金流的資產(如股息、租金)。
  • 多參與學習:參加研討會、課程,結識不同領域的人,拓展視野與人脈。
  • 長期眼光:避免追求短期暴利,專注於穩健的財富累積。
  • 書中提到「現金流象限」(Cashflow Quadrant),將收入來源分為員工(E)、自營業者(S)、企業主(B)、投資者(I)。富爸爸鼓勵從E/S轉向B/I,實現財務自由。

總結與補充觀點

  • 核心啟發
    • 《富爸爸窮爸爸》挑戰傳統教育與社會觀念,強調財務教育的重要性,讓讀者重新思考金錢與工作的關係。
    • 你提到的資產與負債區分、行動力、學習優先等觀點,正是書中強調的關鍵,顯示你對書的理解很到位。
  • 台灣情境
    • 你提到台灣教育偏向「窮爸爸」思維,鼓勵穩定職業而忽略理財教育,這與書中批評的傳統教育不謀而合。
    • 在台灣,房地產常被視為資產,但書中提醒自住房屋可能是負債,這點可能值得進一步思考。


怎樣才叫做財富? Buckminster Fuller說:「財富就是當你今天停止工作,你可以存活幾天。」(Buckminster Fuller: “Wealth is a person’s ability to survive so many number of days forward—or, if I stopped working today, how long could I survive?”)


【讀書心得】Surrendered by Idiot - 你只是不了解其他人而已


Surrendered by Idiot

有時候總會覺得為甚麼其他人的行為跟白癡一樣,但殊不知在別人眼裡我也是個白癡。人的行為受到個性以及周遭接觸的人影響。作者將人的個性分為四種類型,以顏色區分:紅色、黃色、綠色、藍色。每種顏色代表不同的性格特徵、行為模式與價值觀。透過了解每個人的個性可以把他們放在更符合他們能力的位置,以達到團隊的最大效率。

1. 紅色(Red)

  • 特徵:有野心、大膽,具領導力,喜歡挑戰困難事物,但容易衝動、暴躁。
  • 行為模式:無法安靜坐著,認為空閒是浪費時間。講話直截了當,不擅長隱藏情緒或說謊,討厭虛偽或華而不實的東西。腦中有想法時會立刻表達,不拖延。
  • 優勢:紅色通常是天生的領導者(例如老闆),能快速調整想法以追求最佳結果,決策果斷。
  • 劣勢:因直率而可能被誤解為攻擊性強、好鬥、傲慢或咄咄逼人,缺乏耐心,不擅長細膩的情感交流。
  • 附註:紅色的人通常目標導向,重視效率與成果,可能不喜歡繁瑣的細節或過多的討論,更傾向於「做就對了」。在壓力下,他們可能顯得霸道,但也因此能在危機中帶領團隊前進。

2. 黃色(Yellow)

  • 特徵:樂觀主義者,總能以笑容面對困難,並感染周圍的人,因此人緣極佳,朋友眾多。
  • 行為模式:重視人際關係,當群體中有人不開心時,自己也會感到不適。遇到問題時,與紅色的「如何解決」不同,黃色更關心「誰來解決」,傾向依賴他人或團隊合作。做事勇往直前,但不喜歡回顧或檢查已完成的事。
  • 優勢:黃色的人有很強的感染力與說服力,容易讓人喜歡並接受他們的想法,是天生的社交高手。
  • 劣勢:自認為是好傾聽者,但常在別人講到一半時就急於插話,無法安靜聆聽。做事缺乏耐心與後續跟進,可能顯得粗心或不夠負責。
  • 附註:黃色的人通常充滿創意,喜歡新奇的事物,但可能不擅長長期規劃或處理細節。他們的情緒化特質讓他們在團隊中能激發士氣,但也可能因過於樂觀而忽略潛在風險。

3. 綠色(Green)

  • 特徵:包容性強,重視和諧,願意接納不同的人與觀點,但異常固執。
  • 行為模式:即使面對明確的證據與邏輯,甚至其他人一致反對,綠色仍會堅持自己的看法,認為自己是對的。
  • 優勢:綠色的人通常溫和、可靠,能穩定團隊氣氛,是很好的支持者。他們重視穩定與安全感,不喜歡衝突。
  • 劣勢:固執的特質可能導致缺乏靈活性,難以接受改變或新觀點,有時會讓人感到頑固或不講理。
  • 附註:綠色的人傾向於避免風險,喜歡按部就班,可能不擅長快速決策或應對突發狀況。他們的情感導向讓他們在乎他人的感受,但也可能因此過於妥協或拖延。

4. 藍色(Blue)

  • 特徵:現實主義者(或悲觀主義者),冷靜理性,只專注於自己份內的事。
  • 行為模式:喜歡處理事情的過程,擅長分析與執行,但不喜歡做最終決定,傾向將決策權交給更高層。
  • 優勢:藍色的人做事有條理,注重細節與邏輯,能保持冷靜,是很好的執行者或幕後工作者。
  • 劣勢:可能過於謹慎或保守,不願承擔風險,缺乏主動性。情感表達較少,與人互動時可能顯得冷漠。
  • 附註:藍色的人通常是完美主義者,追求高品質的成果。他們擅長獨立工作,但在需要創意或快速應變的環境中可能感到不適。與其他顏色相比,藍色更傾向於內省與低調。
四色互動
  • 紅色與黃色可能在團隊中形成互補,紅色負責決策與推動,黃色負責激勵與團結。
  • 綠色與藍色則更適合穩定與執行,綠色提供情感支持,藍色確保細節完善。
  • 但衝突也可能發生,例如紅色的急躁與綠色的固執相衝,或黃色的隨性與藍色的嚴謹不合。

2025年1月1日 星期三

【讀後心得】底層邏輯-行為將影響社經地位


底層邏輯

  萬物都有他的底層邏輯,唯有懂其運作方式才可以成功,這是這本書的宗旨。但看完書,我更喜歡另外一種解釋方式,你會待在底層是因為你的想法錯誤,沒有照著該有的邏輯走。本書中有許多我認為很有爭議的話語,畢竟作者是商業顧問、諮詢創始人。因此許多觀點我認為過於"資方",很多時候我並不在乎工作中我可以得到甚麼,我只在乎錢,你不給我薪水我當然不上班,但書中有許多反駁這種觀點的想法,認為上班應該是種樂趣,我個人是不同意。但書中仍然有需多我認為值得多思考幾個的觀點


系統思維

  我們必須搞清楚發生問題是哪個系統,而不是只看結果。例如說今天有個富豪兒子被綁架了,誰的錯?是綁匪嗎,因為他違反法律。答案是富豪,因為他明明有更好的方法去防範這件事情,卻可能因為省錢等等其他因素沒有去做。也許會覺得很沒道理,但事實就是每個人雖然有一樣的時間,但成本卻不一樣。
  普通人改變結果,優秀的人改變原因,而頂級的人改變模型。解決的方法百百種,但最好的那種一定是從根本解決。假設有個降落傘製造商,他說他的開傘成功率99%。聽起來很高對不對?但事實上每跳100次就會死一個士兵。那要怎麼解決這個問題,罰款?逼迫?製造商說真的沒辦法再提高了。如果我們改變整個系統,要求驗收時製造商一起跳,從此之後就可以達成100%。
  做每件事情的時候站在大局觀去思考決策,方向不對努力白費。在錯誤的道路上奔跑只會加速崩壞的速度。有時候總覺得自己甚麼都做,但其實方向錯誤根本白談。理解What, Why, How才能知行合一,要理解是什麼(what)產生問題,並且要知道確切原因(why),最後才是如何解決(how)。不是看到問題就直接要去解決它,而不從根本上處理

說話的藝術

  知道辯論怎樣才算贏嗎?並不是把跟你吵架的那個人講到無法回嘴,通常跟你吵架的那個人立場會站很死也不願意承認錯誤。辯論是要說服其他人,就算不能改變所有人也應該從一些人開始。
  "為什麼"是個非常可怕的詞,他可以強迫別人接受一些莫名其妙的觀點。例如我問,為什麼抽菸的人不容易得到Covid,這時候你會開始解釋為什麼不容易。但其實這兩件事根本沒有因果關係,對方卻開始以抽菸和Covid有關開始解釋,如果要散播謠言這是一種很好的方式。

自己的資本

  技術、知識、人脈、經驗都是自己財富的基石。想要擁有財富,就要在交易鏈上處於更稀缺的位置,這樣才有本錢談錢。看書學習做生意、學習煮菜,看完書馬上實踐,才會有技術。虛心受教,當有了知識就要開始教人,賺到了就要給人。這種無私的奉獻才可以累積自己的人脈。一段關係來得越刻意,到最後越會遠離自己的初衷。想累積人脈,最好的方法就是腳踏實地,提高自己價值。
  但人脈這種東西也要小心,要分清楚人與人之間的邊界感,什麼是我的,什麼是他的,什麼是我該做的,什麼是他該做的。有形的物體很容易分,無形的物體像是時間、隱私、權力與權利等等,許多人會越界。當你感受到不舒服或者對方感受到不舒服,通常就是越界了。並且要注意信用。信用,比黃金有錢,比生命值錢。擁有信用的人受到尊敬才會有話語權,有信用的人交易成本才會比較低。一個人的信用要靠一生去建立,但要敗壞信用只需要一分鐘


心得

  我認為這本書很明顯過譽了,長期霸占博客來與誠品前三名,甚至出了第二本,我個人是沒辦法理解。書中大概有一半的觀點我自己是不太能接受,其中又有四分之一的觀點讓我感到非常不悅,會覺得作者根本在講垃圾話,甚至有在引導思考而不是讓讀者自己想。特別是在跟工作相關的部分,例如作者認為人不該996,應該711(早上七點上班晚上十一點下班),或者甚至直接住在公司,應該把工作當一種興趣玩樂。看到這個篇章我是真的覺得這作者有病,他覺得他這樣子成功,所以大家都應該以他為榜樣。並不是所有人都可以把工作當作興趣,特別是在台灣,興趣當工作通常只會餓死。作者有說,成功只不過是運氣好。我同樣覺得他能這樣子做並且成功也純粹是運氣好,運氣好沒有住醫院過勞死。

推薦指數

★★☆☆☆
說教感很重的一本書,僅有少部分章節值得別人思考。如果是傳統儒家教育不會思考的學生,看完這本書應該會變奴隸


2024年9月15日 星期日

【讀後心得】Million Dollar Weekend - 從0到100萬的創業之路


Million Dollar Weekend

許多人都嘗試創業,為何只有一部分人成功?除了運氣我們還缺了什麼?

如何成功

書中一開始就在介紹如何成功,第一步,去做。沒錯,做就對了,沒有起頭哪來的結果。不論想要成功什麼事情,都要先行動。當你開始猶豫的時候,先有個開始,先嘗試去做。而當我們開始之後,必須要學著獲得使用者回饋。必須知道使用者明確的想法,不然很多事情都只是自己覺得很好,其實使用者覺得跟屎一樣。

別怕被拒絕

而如果想成功,就不要怕被拒絕。我覺得作者提出的做法很有趣,他希望讀者去咖啡店直接問可不可以給九折。說實在我覺得這種行為超級奧客,特別如果是去連鎖咖啡店更奧客。但這確實也是這個社會的規則,有說才有機會。當你不說就永遠不會有,當你臉皮夠厚提出要求那就有機會。

使用者

使用者一點都不在乎你的想法,他只在乎它的使用結果。因此有些人總喜歡說自己的東西做得如何如何好,但如果使用者不買單一點屁用都沒有。你必須創造符合你價格的價值,而作者有提供幾個選項判斷是否這是一個合格的商品

1. 嘗試解決自己的問題,這也許也是別人的問題

2. 去看看熱賣的商品,例如iPad, iPhone,如果你的目標客群是他們,至少人很多機會大

3. 選擇販賣的平台(地點),Facebook, Amazon等等,去看消費者習慣在哪邊花錢

4. 多使用搜尋引擎,看其他人有沒有什麼問題是值得解決的


失敗

作者提到不要害怕失敗,如果失敗,重複一百次,遲早會成功的。每一次的失敗都是一個經驗,會潛移默化改變我們想法,使我們下一次嘗試更容易成功。但每一次失敗都要去思考為甚麼失敗,並且下一次要做出改變,而不是不變的一直嘗試同樣的東西

講是這樣講啦,但我自己覺得誰有辦法失敗一百次,而且很多人創業都是孤注一擲,不是住豪宅就是住公園。我是覺得很多話都是成功的人才有辦法講,畢竟沒人會聽失敗的人的話。



推薦指數:

★★☆☆☆

  一開始是覺得標題和摘要覺得很有趣,我以為在講有錢人怎麼過生活的,而且大特價才入手。但整本書看完,說實在這本書對非創業的人幫助不大。而且書中一直推薦他的網站,建議大家去她的網站下載東西之類的。說實在看到有點煩躁,每隔三四頁就要宣傳一下自己的網站做得多成功,自己的企業做得多好。我不確定看完整本書會對創業的人有甚麼新的見解,但我知道如果你照個它的步驟每個網站都點進去,他網站點閱率會變很高,變有錢人的是他。

  不過雖然對於不打算創業的我興趣不大,但其中有很多態度我覺得也可以用在生活上。台灣人對於生活總是過於安逸,很多時候不敢衝一下。我本身是軟體工程師,在改程式上總是趨向保守,總是害怕改了程式就不會跑。雖然大部分的時候只要他會動,基本上都不要改。但有些時候只是前期的程式就不敢更改,應該找整個部門的人一起討論,是否需要將整個效能提升。亦或是自己可以先改一部分試試看,並且用單元測試確定沒問題。相較於每次打開VS Code就在一直思考,不如先衝一波試試看結果。


"Your life is shaped by your willingness to face your fears. Remember, just keep going no matter what"

【生活】腮腺瘤CT和切片紀錄


腮腺瘤

也就是耳下的一顆小腫瘤

圖片來源: 長庚紀念醫院

我的情況沒這麼嚴重,兩年前大約是1-2公分左右,而現在(2024)則是長到3-4公分


  兩年前曾經去中興醫院耳鼻喉科看過腮腺瘤,那時候看了兩三次,照過內視鏡看起來是沒有奇怪的東西。一開始是吃一些抗生素,不過並沒有明顯的改善,也沒有明顯的惡化。醫生那時是說再觀察,如果有任何不舒服或惡化再回診處理。後來拖著拖著就兩年了,這兩年也沒有明顯的不舒服。但有天家人看到我的瘤發現明顯變大,變成3-4公分。上網查了一下文章怕繼續變大決定回去檢查。

腫瘤科

  這次回去檢查掛的是中興醫院腫瘤科,想說這個科聽起來很屌感覺是專門再看腫瘤的。不過一進去醫生就說這邊基本上不看我這種病患,他看的都是已經癌症很嚴重,大概都是在保守治療的那些人了。但還是有幫我看,是一位中西醫都有拿到資格的醫生,一開始有提到我這個年紀還有看這個腫瘤的感覺,不像是惡性的,一樣先讓我吃吃看抗生素。不過吃了一兩週後還是沒有改善,醫生提到可以嘗試用中藥消腫瘤,雖然本身對中藥極度抗拒而且完全不信任,中藥粉還要自費,特別貴要810元,但基於相信醫生專業還是嘗試中藥。中藥真的有夠難吃,又超級大包,第一天吃中藥就吐出來。

  後來過了兩三週完全沒改善,因為每天都有紀錄的關係,還發現不知道為甚麼腫瘤越來越大顆。醫生是一直說我不能吃辣喝酒不能熬夜之類的,我自己是覺得我這幾週過得還算健康,不過腫瘤還是越來越大的趨勢。原本醫生還是叫我繼續吃中藥,我有問她這個要吃多久,他說大概幾個月到幾年。靠北我假都快沒了還要一直看中醫,在沒有明顯療效的情況下就要求轉耳鼻喉科。

耳鼻喉科

  這次看耳鼻喉科是一位代班醫生,蠻年輕的。醫生雖然年輕但蠻健談的,可能沒有下個病患的關係跟他談蠻久的,也有幫我再次做內視鏡檢查一下。依照這位年輕醫生的看法是建議直接開刀取出,畢竟這種東西雖然高機率是良性,但難保以後不會變惡性,而且年輕的時候開也會比較容易康復。開刀前還是需要做一些檢查,雖然轉診單中醫要求要切片,但醫生希望我做完電腦斷層再來切片。因此是先預約下週電腦斷層以及兩週後切片。

電腦斷層

  做電腦斷層需要空腹不能喝水,因此預約時間能越早越好。當天提早十分鐘先去報到,因為我只要掃頭部他說不用換衣服。因為顯影劑是用靜脈注射的關係,報到後要先打針。打針後過一陣子就躺在機台上,護理師提到說眼睛不要張開,我也不知道為甚麼,我全程沒張開眼睛所以很多東西我也不確定是怎樣,只能用感覺解釋。一開始是身體有再被移動的感覺,我猜測應該是推進機台。一陣子後護理師開門注射顯影劑,有提到顯影劑注射後如果有不舒服要第一時間舉手,另外會熱熱的是正常的。基本上注射後我沒感覺特別不舒服,但會有全身上下慢慢往心臟方向越來越熱的感覺,挺有趣的,有一種火影凱皇開死門的那種感覺,全身熱源往心臟移動。注射完後又是身體有再移動的感覺。

        整個電腦斷層過程不到十分鐘,很快就結束了。結束後在外面等一陣子看看有沒有不舒服,並且這個時候可以開始喝水。大約再等十分鐘就拆針可以離開,有提醒今天要喝2000-3000的水把顯影劑排掉。

切片

  切片我是跑去和平醫院做,和平醫院一直小抱怨說為甚麼中興患者會來這裡做,沒辦法,這裡最快,就預約這裡。

  先去二樓報到後就等待叫號,基本上前面幾個人大約都十分鐘以內就結束了。進去後躺在一張病床上,醫生先用超音波找腫瘤的位置,找到後他們一群人在討論要切片還是穿刺,雖然耳鼻喉醫生開切片但他們覺得這種可能穿刺就夠了。因為不確定所以找了主任來看片,主任一開始也說這個應該穿刺就可以,害我很開心至少穿刺會比較不痛。但主任來準備動手時二次檢查,發現這個位置應該要切片不能穿刺,只好再重新簽一次同意書。

  切片其實就是把一塊組織切下來,拿去實驗室檢查是好是壞,但因為會用到比較粗的針,因此會需要打麻醉。這個麻醉針超級超級痛,大概會痛十秒,之後就一直麻麻的沒感覺。接下來醫生就開始切片,當切片針刺進來的時候我馬上感覺到流很多血,都流到我的後腦,雖然不會痛但就是溫溫的。切組織的時候會一直聽到ㄆㄧㄚ的聲音,大概聽到四次五次六次?反正很多次也記不太清楚。切完後醫生說我這個瘤裡面都是液體,順便幫我把這些液體給抽出來。主要是拿一根10毫升的細針吸,醫生有把抽出來液體給我看,黃黃的比尿還黃。

  整個過程大概30分鐘,別人都只花十分鐘,花特別多時間很不好意思,走出去的時候一直被瞪的感覺。出去後要一直壓著傷口,原本是壓十分鐘看有沒有血液繼續滲出,但很不巧一直到30分左右我傷口才沒有血滲出。護理師有說這個會瘀青並且會腫腫的,回去要冰敷,然後這幾天不太能運動。晚上麻藥退之後就會開始感覺到痛,但大致上可以忍受。兩天後嘗試去健身,握推的時候可能臉部代償有出力,感覺超痛,推一下就不推了。再隔天基本上就可以正常健身了,但臉上還是會痛痛的。

回診

  之後過四天回診,醫生看報告大概是良性混合瘤,但醫生有提到這個瘤動刀很容易動到顏面神經,風險不低。醫生感覺比較像是如果目前沒事,那就不要動刀,因為有動到顏面神經問題,而且整個傷口大約會是五公分,對年輕人的臉來說可能是致命的醜。不過目前我還在思考要不要動刀,總覺得要在年輕時候動刀,但這位醫生可能不是專業開這個刀的,有考慮是不是換一位醫生,畢竟這種動顏面神經的還是會怕。


如果之後有更新消息再繼續記錄!

  


2024年8月11日 星期日

【讀後心得】持續買進-買就對了


  持續買進(Just keep buying),在2023 2024年是理財投資排行榜常客,每次打開誠品或博客來想要找書來看的時候都會看到這本。但其實本身我對於理財是毫無觀念的,只知道看到低點可以買,看到高點可以賣,然後就被套成智障永遠賣不出去,打開股票損益越看越難過。每次操作股票不是All In就是All Out,然後變成小丑🤡。


為甚麼要投資

1. 為了未來退休生活

2. 為了抵抗通膨

3. 將人力資本轉成經濟資本


有更多錢錢的方法

  人總是會希望自己口袋有更多的錢,俗話說的好,開源節流。去增加自己賺錢的機會,並且減少自己的開支。但這本書有提到,減少開支是變成有錢人最大的騙局。減少開支再怎麼減,還是會有基本的生活費,當已經到底的時候根本不可能繼續減少。有人說每天省個一兩個星巴克,可以增加生活費,那純粹是因為你的收入不足以讓你喝星巴克。與其節流不如開源,多賺一點錢買星巴克也不會心痛。

  常見的多賺錢有幾個方法

1. 賣時間

2. 賣專業

3. 教其他人

4. 賣產品

5. 升職

  常見可以投資的東西則是

1. 股票: 股票可能不適合膽小的人,因為股票浮動很大,可能會跌好幾年,但時間是我們的朋友,長期來看是賺的。

2. 債券: 基本上只推薦美國債券,雖然收益不高但很穩定。有些債券收益高但風險也高,債券應該是股票大跌時要漲才對,是一個讓自己不虧那麼多的投資方法。

3. 不動產: 台灣人最喜歡炒不動產了,回報高看起來也不會跌。但壞處是第一間不動產通常是要借錢,如果此時發生金融危機,像是COIVID大家沒出門沒租房子,就必須獨自償還。

4. 不動產投資信託(REITs): 簡單來說就是讓資金較少的投資人也有參與買賣不動產的機會,通常也是跟股市浮動。 

5. 農地: 其實農地收益也不錯,而且跟股市不會有關係,並且可以對抗通膨。但缺點是很難緊急變現,而且門檻比較高一點。

6. 創業: 可以開始一個小的事業,如果成功賺到的金額無法想像。但通常只有11%的人成功。

7. 版稅: 有時候可以賺不少,跟市場經濟沒關係,但不可控因素很多,流行說改就改,很容易沒錢賺。

8. 販賣物品: 透過自己做物品賺錢,好處是自由度高,但壞處就是不保證賺錢。

雖然作者說不建議黃金和藝術品,理由是不好脫手。當有需要錢的時候不好直接轉換成現金,流動性過低。但我覺得在台灣黃金應該還好,藝術品就真的還難脫手了。

  而當我們在思考這項東西是不是需要購買,可以使用兩個法則

兩倍法則: 當我用這個錢買這項東西時,要同時去思考如果我拿去投資可以帶給我多大的利益。

滿足法則: 可以考慮這項東西是不是可以讓自己有長期滿足,或是可以讓自己賺錢表現更好。如果他只能有短期的滿足,那似乎可以考慮把錢用在更好的地方。

例如,我如果把這項錢拿去學習一門外語,是不是可以大幅度增加我的工作機會?如果我拿這份錢去買遊戲點數,那又可以帶給我多少快樂?但就算賺錢省錢很重要,有些東西仍然需要讓自己心情愉悅。就像遊戲點數,適當的儲值可以讓我開心並增加賺錢動力,但如果過量仍然不好。


股票

  其實股票賺錢的方法很簡單,「買低賣高」,聽起來像是幹話的一句話卻是整個賺錢最主要的觀念。那甚麼叫做「低」而什麼叫做「高」?這就要講到這本書的宗旨了,我們講求長期持有,也就是Keep Buying。當你有閒錢的時候不要覺得可以覺得更低點,直接買就對了。我們這種平凡人不可能知道最低點是什麼時候,總是想著要在股市大崩盤的時候才進場,但股市大崩盤又覺得還會更低不敢進場,最後都成功回穩了還是沒買。與其這樣浪費股利,不如直接進場持續購買。但還是有個方法判斷是一定要買的,如果股市跌了50%,此時進場收益平均會落在25%,而如果股市跌30%則是有0-5%的收益。不過這也只是大致上的平均值,實際上還是不一定。

  而「高」點是什麼,歷史會告訴你,沒有永遠的最高點。股票會隨著時間一直往上,你認為是高點的時候絕對不是從今之後最高點,而你認為的低點在整個歷史中也只是相對低點而已。因此不論發生甚麼事,買就對了,當手上有閒錢就直接投資,時間會告訴你最終都是賺錢的。但有幾個例外情況可以考慮賣股票,1.重新平衡投資策略,股債比要控制好,在大範圍回徹的時候可以降低風險。2.需要支出大現金,例如要買房,這時可以考慮。另外要賣股票的時候也不要全賣,留一點點,當他大漲的時候不會那麼難過,反之大跌也會覺得還好有賣掉。

  另外作者不建議投資個股,不如全部買ETF,個股的存活率只有4%,與其賭可以買到這4%的公司,不如求穩買ETF。


而書中有三個小章節,雖然跟股票、投資等等關係不大,但我覺得蠻有趣的

信用卡

  其實我的觀念一直是能不欠錢就不欠錢,實在是很討厭每個月的薪水要被負債挖走一點那種感覺。但這本書給了我一個想法,並不是所有信用卡債都是不好的,有時候可以運用卡債賺更多錢。這聽起來非常不合哩,如果手頭上的流動資金夠,應該就全額購買而不是使用卡債。但作者有提到,不應該讓自己手上的資金變動太快。例如說不該把好不容易存下來的錢全部拿去買手機,而是在確保自己有穩定收入且可以還清債務的情況下,使用信用卡而不是全款買,這是一種Bet hedging(指的是用分散投資或採取相對保守策略來減少風險)的行為。手上一定要有流動資金,以確保緊急情況發生,剩餘多的錢則是可以投資。


租房買房

  租房子買房子各有好處,買房子可以穩定下來,租房子則是有更多的資金可以投資。根據統計,拿買房子的錢去投資賺到的錢遠大於房子價值,當然中間的金融危機必須撐下去。那什麼時候該決定買房子什麼時候要租房子?如果確定會在這個地方長居十年以上,並且有穩定工作,那就建議買房子。並且要考慮負債比,一個月負債佔收入大約43%並且頭期款佔存款20%,才會比較有餘裕。


退休

  應該存多少才能退休是網路上很常見的話題,存少了退休生活就尷尬了,存多了也不能帶進棺材。基本上作者會建議使用4%法則,假設每年股票和債券平均給予4%收益,假設退休30年平均通膨為3%情況下,存款達到每年平均支出的25倍就可以退休。但並不是說只賺到這個錢就要退休,退休後生活更重要。如果說退休後沒有任何的規劃,那我覺得不如不要退休,找點事情做,整天待在家裡只會生病。


結論

推薦指數

★★★★★

  這本書我覺得如果是對投資一知半解的人建議看一下,在榜上這麼久是有他的道理的。雖然並不是直接報明牌,但會告訴我們投資真正的概念,例如應該關注於長時間的收益而不是短時間的收益。股票每次波動總是心驚膽跳,但其實最後都沒事。以最近來說,8/4羽球雙打金牌,8/5直接大特價台股跌停九折優惠,相信這時候包括我也對股票做一些修正。但事實證明過了四天(8/9),股票又回歸到原本的樣子。在股票有大起大落的時候我都不建議操作,再怎麼玩都玩不贏大盤商,不如穩穩賺錢。雖然每次都這樣想啦,但最後還是禁不起誘惑又去操作,最後又虧成智障🤡。

-

“Fear has a greater grasp on human action than does the impressive weight of historical evidence”

與令人印象深刻的歷史證據相比,恐懼對人類影響的行為更大。

2024年7月25日 星期四

【讀後心得】癮型人的調酒世界 - 我喝的是知識,不是酒精


癮型人的調酒世界

  自從大三第一次被朋友帶去酒吧後,就一直對整個調酒師的文化超級感興趣。但即使感興趣,也只是停留在喝的階段,沒有實際上去了解過,頂多頂多就是看過王牌酒保而已。雖然從王牌酒保也有學到很多知識,不過畢竟是漫畫,不可能從Stir、Shake之類的開始教,每一個篇章介紹一兩杯調酒的歷史就差不多了。今年可能工作或是趕論文壓力大,去酒吧的次數比往年多很多很多。我常跟朋友說我不曾在台北的酒吧喝醉,因為我的錢包不允許我喝醉。每次想喝酒的時候總不可能都是去酒吧,因此家裡也會有一些酒可以喝,有酒了總會想要稍微調一下,上網查有沒有推薦的入門書,比較常看到就是上田和男老師的書和癮型人。去誠品晃一圈上田和男老師的書看起來是不太適合初學者,故入手這本。

  這本書主要分幾個部分: 

  • 何謂雞尾酒
  • 六大基酒
  • 調法
  • 香甜酒介紹
  • 經典雞尾酒介紹

  在每個章節都會根據內容舉例幾個雞尾酒,並講述雞尾酒故事及調法。以前也有嘗試過去了解雞尾酒的歷史,單純去維基之類的看總會覺得有點無聊,而作者癮形人以幽默有趣的說法介紹雞尾酒。

何謂雞尾酒

  雞尾酒就是基酒、香甜酒、副材料組成的,但少了幾樣仍然可以叫做雞尾酒,大致上來說只要有酒精我們都稱作雞尾酒。這個篇章還有介紹酒杯,例如喝威士忌可以使用古典杯、聞香杯等等,每個杯子喝出來的味道都會有差異,雖然我根本沒感覺出來。 :(

六大基酒

  包括龍舌蘭、威士忌、白蘭地、琴酒、伏特加、蘭姆酒。

調法

  Stir、Shake等等,每個調酒都有適合他的做法,也有適合他的容水量。如果把有氣的酒拿去Shake會很好玩。

香甜酒

  這篇章就有趣了,真的很多不知道的知識。香甜酒的總類真的太多,野格、杏仁酒、櫻桃酒等等,每個香甜酒的由來以及適合他的調酒。

經典雞尾酒

  Mojito、Romas Gin Fizz等等,這些惡名昭彰很好喝大家很喜歡點的,但實際上都比想像中的麻煩很多。這篇張精選經典雞尾酒一個一個介紹故事、材料、調法。許多的調酒剛發明出來的時候和現在口味都會有差,閒來無事時除了喝現在口味,也可以嘗試看看以前的味道。


  其實在看這些故事的時候,總會覺得怎麼每篇故事都那麼像,不是教會的某個角落發現的筆記,不然就是某個人到酒吧大叫怎麼那麼好喝。作者也提醒這些故事有可能是酒商掰出來的,為了只是博眼球,不然怎麼會有些酒甚至是在禁酒令的時候流行,感覺就是酒商想暗示即使禁酒大家還是會想要喝,不過這很明顯有點不合理吧。


推薦

★★★★★

  以一個新手且對調酒有興趣的人,我覺得這本書非常有價值。去誠品有看過一些書,大部分都是很死板的介紹材料、故事、調法,而這本書作者會加入比較多自己的想法,讓讀者看完不會那麼枯燥乏味。而且有些酒譜跟戈登的食譜很像,很多材料根本沒聽過或者根本不知道去哪邊買。酒譜也是,很多香甜酒根本就不知道在哪邊買,作者會提供類似味道的香甜酒或者乾脆自己調出來,用最接近的方式去喝喝看,如果真的有興趣在特地去找,我覺得這是這本書最棒的地方。


話說第一次去酒吧只知道長島冰茶,被朋友慫恿就點了。過很多年後才發現我當初真的不怕死,第一杯酒就點這種東西。











【讀後心得】特級玩家


心得

  看這本書的時候,總覺得特哥小時候跟我超像,總是想辦法擠出時間玩遊戲,每次玩遊戲都要鬥智鬥勇。聽到父母出門的時候馬上開機玩遊戲,趁他們回來之前趕快關機。但久而久之父母好像察覺到甚麼,會刻意去摸電腦看溫度,想當然第一次馬上就被抓包。之後提前更多並且拿電風扇吹,父母好像又察覺到甚麼,直接摸主機裡面的溫度。每次玩遊戲都彷彿經歷一場偵探遊戲,要先找到藏起來的網路線,結束後又要想辦法降溫。在這種情況下被抓到就是海扁一頓,不然就是又要被沒收甚麼東西。

  雖然特哥身為職業選手,但沒有特別鼓勵年輕人進入電競圈。現在很多年輕人總是想要進入電競圈,覺得可以邊玩遊戲邊賺錢,但卻沒思考過遊戲是一個團隊戰略遊戲。我覺得電競選手的思維跟算數學很像,你知道公式,但不會套用、不知道公式由來,那終究只是甚麼都不會的人。電競選手同理,不知道裝備出的意義,不知道計算傷害的重要性,每天只是開opgg之類的攻略網照著上面出裝,那只是一個技術比其他人強一點的玩家。除了戰略以外也必須要有團隊概念,扣除掉一些1v1的遊戲,現在市面上主流的遊戲都是多人團隊遊戲,需要大量的溝通,一個永遠的自幹王是沒有團隊會要的。

  但年輕的時候總是愛玩,誰會想到那麼多。現在想起來那麼愛玩遊戲的我沒走歪也是一種奇蹟,從小跟特哥一樣總覺得就算玩遊戲還是要讀書,我的職業是學生就該把學校的功課做完,但也可能是知道自己只是愛玩不能變成一種養活自己的方法。亦或者就如特哥講的,所謂的電競選手就是該在業餘的時候就要可以跟選手打得差不多,才可以踏入這個圈子。從小我只是愛玩,也知道自己永遠爬不上去,不能像特哥一樣,計算每個技能的傷害、考慮哪個裝備cp值高,我只是純粹一個玩家。

  書中有一些特哥自嘲的地方,看了也是覺得蠻好笑的。像是他老爸覺得他那麼愛玩遊戲如果可以真希望用兩百萬直接把這個遊戲搞垮,笑死連天堂花400萬紫布橘子都沒看在眼裡,還想要兩百萬。亦或是媽媽總是很擔心電競是一個詐騙,但特哥總是說他帳戶沒那麼多錢可以被騙,笑死但被Toyz騙。


推薦指數

★★★☆☆

  說實在如果不是特哥粉絲我會覺得這本還好,原本是想說抱持著瞭解電競圈的心態買來看,但內容對於電競選手方面的描述不多。另外這本書我認為有一點點偏貴,博客來355元,文章內大部分都是全彩特哥的照片。說實在對於我來說特哥以前的生活長怎樣我不太在意,也對特哥現在的生活長怎樣不太在意,我想知道的是整個電競生態包括特哥的成長環境、電競求職過程、實況過程等等。但明顯特哥的生活看起來要撐起一本書有點難,150頁左右的內容真的太多照片了。相較於特哥的特級玩家,對於電競圈相關也可以看Toyz的我是傳奇。

  不過在這150頁的內容可以知道特哥的生長環境和特哥小時候行為造就現在的成果,也知道特哥三觀,不會因為知道自己在電競實況圈成功就瘋狂勉勵大家都要走這個行業,反而是要自己評斷是不是有本錢可以踏入這塊餅。對於之前一些特哥的傳聞,在根本懶得看實況的情況下也知道特哥方面的想法,但對於墮胎方面是隻字未提。


【讀後心得】逆思維(Think Again) - 打破盲點、多方思考


逆思維(Think Again)

  在火場的消防員發生意外事故時,裝備丟掉往火裡面走把的消防員,會比裝備齊全往火場外走的人生存率較高,為什麼?因為這種反邏輯的行為,一定是強迫自己思考再思考得出的結論,只要曾經思考過就會有更高的成功率。此書就是在教大家如何重新思考,用新方法解決舊問題或使用舊方法解決新問題。

第一感覺謬誤(First Instinct Fallacy)

  考試的時候,每次都會覺得只要改答案,就會改錯。但其實改答案這個行為是強迫自己重新思考,再次計算的結果,相較於25%的學生可能會把對的答案改成錯的,應該要考慮有高達50%學生會把錯的答案改成隊的。書中有一句話我很喜歡:We often favor feeling right over being right(我們常常偏愛感覺對就好)。

  人們會過於相信自己的觀點,嚴重者甚至會成為一種類似信仰的存在,並以此錯誤的邏輯去批判其他人的錯誤。甚至將自己觀點強加給別人,而不考慮其他人的感受也不打算重新思考,書中提到人們最常使用三個角色,這三個都會嚴重影像我們思考

Prosecutor:檢察官。執意拆穿他人,揪出對方概念的所有細小毛病而不是友善討論

Preacher:傳教士。會強迫別人要接受自己的觀點甚至視為一種信仰

Politician:政客。將與相信自己觀點的人和不相信自己觀點的人分開,形成小圈圈。

  而我們應該以Scientist(科學家)的身分去思考所有事情,對所有事物抱持著懷疑,並且對所有觀點都要有證據去支撐。但也不能過於自負,越聰明的人越容易跌倒,越會說自己會思考的人越不會思考。就跟考試的時候說自己都沒讀書總是很高分,對自己盲目自信的人大致上都會考很爛一樣。

謙虛謙虛再謙虛

  書中提到兩個迴圈,一個是再思考迴圈(Rethinking Cycle),以及過度自信迴圈(Overconfidence cycle)。會重新思考的人對任何事情都會感到謙虛、懷疑所有事,基於好奇心去發現一個新的概念,並且謙虛地接受、再次的懷疑。而過度自信的人則是會驕傲、對任何不同意觀的人定罪,盲目相信自己觀點,從而不去驗證並感到驕傲。



  這邊會提到兩個心理學的症狀,Armchair Quarterback Syndrome和Imposter Syndrome,翻譯成中文就是馬後炮症候群和冒牌者症候群。馬後炮症候群最常發生在各種競技比賽,所有人都會認為自己比場上的選手、教練還厲害,只要有一些結果不好總會馬後炮。冒牌者症候群則是相反,每次都覺得不行,自己是個假貨。

  這個現象跟DK效應一樣(Dunning-Kruger Effect),人在對一個東西不了解個時候會沒自信,只要稍微了解一點點自信心會極度膨脹,但當了解越多則會越來越沒自信。傲慢是無知和自信的集合體,凡事都要謙虛而不是過度自信。



一個好的團隊應該常常挑戰觀點

  有個研究很有趣,一個關係很好的團隊和關係不好的團隊,哪個容易有比較好的成果。以數據來說關係不好的團隊結果會好一點點,因為他們會一直挑戰別人的觀點,當挑戰他人觀點的時候不僅僅是自己會思考,對方也會思考怎麼辯駁。而關係不好的團隊不代表大家擺爛,是大家都有相同的目標但關係沒有到那麼好。並且一個團隊應該要有各種不同背景的人,大家的想法才會碰撞,若是有一個專門爭論的人在團隊裡,雖然整個氣氛會不好,但每次大家都可以思考自己的論點對不對,夠不夠說服人。

  一個團隊的爭論並不是戰爭,戰爭有輸有贏,但團隊的爭論應該是想讓整個計畫變好。爭論並不是將自己的觀點強加在他人身上,以位階高低強迫他人,這樣即使對方同意關係也會變很僵。爭論應該是要讓對方思考,也要思考對方的觀點能不能補強自己的觀點。在激烈的爭論中也應該停下來思考,發生甚麼事情會改變自己的觀點,如果沒有,盲目相信自己觀點100%對的,那這場爭論沒有任何意義。

  改變別人想發最終要的就是要傾聽,先同意別人後開始引導思考,多多詢問如何做(How)而不是為甚麼(Why),並且可以透過動機式思考(Motivating interview)。先問一個開放式問題讓對方思考,並傾聽想法補充自己論點,最後也要肯定對方想改變的想法。相反的,如果想要強迫對方往自己的想法走,不要直接給予答案,人們對於安排好的事情非常牴觸。而是可以看似給選擇的自由但其實只有一個答案,最簡單就是政客常用的二分法。只有對錯,只有藍綠、只有要不要死刑等等。如果給予一個複雜的問題,會讓別人重新思考,但如果只給予一個是非對錯的問題,則容易不讓人思考。

多個方面分析自己的預測

  而好的思考方式除了預測一個事情會不會成功,還會想盡辦法證明自己的想法是錯的,並且推測什麼樣的思考會產生錯誤。做錯預測並不可恥,每件事有對有錯,應該學會擁抱錯誤。可恥的事盲目的自信,所有人都不討論只交上一份所有東西都是理想化的計畫,那一定會完蛋。

  

再做決定時,可以透過詢問自己這幾個問題來督促自己再次思考

1. 是甚麼促使了這個假設?為甚麼會認為這是對的?發生甚麼事情會導致失敗

2. 在所有的分析中,有甚麼不確定性的因素

3. 優點都懂了,那缺點是甚麼?

  





【讀後心得】Don't Let Me Think - 不要讓使用者有思考的機會


Don't Let Me Think

  最近看了一本有趣的書:Don't Let Me Think,如同字面上所講的,不要讓我思考。當使用者在瀏覽頁面的時候要預設使用者甚麼都不會,並且工程師的責任就是讓他們看到一些圖表按鈕就該會使用網站。當使用者按下超過三個按鈕才可以找到自己想要的頁面的時候,那他們會有很高的機率直接離開這個網頁。不要預設使用者甚麼都會,預設所有使用者都是傻子,並且確保自己設計出來的東西可以讓傻子馬上學會。


  其實這本書主要是在講網站要怎麼製作才比較好,雖然我主要不是做前端的,但我覺得很多觀念後端都可以用到。之前我在做測試的時候,就有說過使用者無奇不有,最好把使用者都當作甚麼都不會的電腦新手,所有東西都該是老嫗能解。最近再讀Clean Code和Don't Let Me Think就有很深的體悟,只是一個在講後端另一個在講前端。


與後端相似之處

  根據這本書,我大致上有幾個結論,因本身是後端工程師,看到許多地方總會覺得在後端也該這樣做。

1. 我們通常不會一個字一個字看網頁,是掃過去的。

一般人看一個網頁都是快速地掃過去,為了最準確地找到想要的資訊。如同程式碼一樣,不可能一個字一個字看,一定是根據結構、函式等等快速的瞭解這段程式碼在座甚麼。

2. 大部分情況下,我們不會選擇最佳選項,而是選擇最合理選項

我們不是消防員、不是棋手,並不需要無時無刻選擇最好的選項,而是要讓使用者滿意。對使用者來說,他們是非常忙碌,對他們來說只要獲得想要的資訊就好,其他的他們根本不在乎。況且再做最佳選擇的時候總會一而再再而三修改,但這非常沒意義而且耗時。以後端來說,我自己會認為比起效能,讓別人看懂程式碼更重要。很多時候為了拚一點點效能而花了好幾天,最後結果還不易維護,如果不是極端狀況,不如讓程式碼簡潔易懂。

3. 不要輕易改變習以為常的事情

傳統是你的夥伴。有些大家已經習以為常的事情,例如LOGO就該放在畫面左上角。想創新是每個人都有的想法,但不要輕易改變使用者已經習慣的行為,除非這個東西的學習曲線很簡單,否則只會造成大家的麻煩。

4. 假定有罪原則

對網頁要假設他混亂、讓人無法看懂,並且我自己會習慣假設使用者都是電腦新手完全看不懂。我自己在寫後端程式也是這樣想,我想要盡可能讓新手也可以看懂我的程式碼。通常最常看程式碼的人還是自己,寫得越容易讓人看懂也是對自己好。

5. 一定要測試

不管是打程式還是做網頁,一定要有測試,只要有測試都比完全不測試好。測試應該是要邊做邊測試,而不是所有東西做完才一次測試,如同單元測試一樣,寫完一個function就盡量有一個相對應的單元測試。


前端技巧

1. 要吸引使用者注意

常見有幾個方法

  • 使用多個標題(h1 h2 h3)
  • 短句子,沒人會去看長得要命的說明
  • 要有清單
  • 確保使用者得到的資訊
  • 確保使用者注意到(?)

2. 不該出現快樂談話以及教學

快樂談話指得是歡迎頁面或者是網站的歷史,我根本不需要一個歡迎我的畫面,我只想要馬上開始使用網頁,網站歷史也是,如果非必要真的不會有人想看,要多思考哪些頁面事使用者會馬上用到的,而不是把網站寫大造成讀取困難。
教學則是另一個大忌,網站應該馬上讓人看懂,而不是還要另外做一個教學。就像後端工程師有些人很喜歡寫一大堆註解,但那些東西要看懂真的得花很多時間,不如做得簡潔一點讓人馬上了解。

3. 要有搜尋功能。

網站總會越做越大,有搜尋功能會對使用者方便很多。

4. 應該要明確標出使用者目前位置

意思是使用者得要確切的知道自己目前在哪個頁面,常見的像是蝦皮會用類似 "衣服>男士>短袖" 這種東西表示。

5. 要有一些不太大眾化的小標語,讓人馬上知道在做甚麼

取一個好的口號比較容易讓人記住。

6. 要有手機電腦頁面切換功能

通常做網頁都會預設使用者是用電腦瀏覽,但當有空閒時間也會想到使用者可能會使用手機,因此製作出手機的頁面。但通常電腦的頁面還是做得更好,以防萬一要給使用者有切換的按鈕。


小結論

  
  這本書的內容講了很多前端的東西,我覺得有在做前端或是曾經嘗試做前端都建議可以看一下。之前我有曾經想要做一個網頁,但做起來總覺得很不像平常瀏覽頁面的感覺,也說不出哪裡奇怪。看了這本書才知道很多小地方我沒有做好,才會讓使用者的體驗那麼糟糕。有些事情有可能是大家本能的會知道,但沒有整理成一個明確文字,就這幾點來說Don't let me think是可以考慮讀的。


2024年1月23日 星期二

【生活】拔智齒記


拔牙前

  前一陣子牙齒痛,長了一顆智齒,根據第一家醫生的說法是水平的,在很裡面還往嘴巴裡面斜進去。那時候聽起來就很不妙,因為有聽說在比較裡面的智齒會有神經的問題。後來上網查有一家感覺拔智齒還可以的診所,有在預約過去看一次。

  但這次第二家醫生檢查完看起來很猶豫,他說這種的他怕拔起來會有驚喜,怕下面倒鉤很深。後來醫生跑去問他的學長,問說這個可不可以拔,他們討論一陣子後說可以拔。诶不是聽起來就超詭異,不敢拔就不要拔讓我轉診不好嗎,這種比較深的智齒被這樣講我怎麼敢給他拔。後來我稍微問一下拔這種智齒要多久,醫生說大約四十分鐘。聽完還是只能說先考慮看看。

  後來朋友有介紹幾家有名的,但都需要轉診單,之前去診所沒想到要拿轉診單。於是又跑去找第三家診所,為了拿轉診單去的。這次這家醫生也不囉嗦,直接說這個他不敢拔可以幫我轉診。醫生開轉診單到郭儒全診所,號稱台北拔智齒名醫,但評價超兩極,有人說態度超差有人說根本神醫一下就拔完。我朋友直的智齒去那邊拔不到十分鐘,於是抱持著玻璃心碎掉的心情到時候去這家拔。不過此時已經到當兵前三天了,於是乎想說當完兵再去拔,並且請朋友幫我預約當完兵後的時段。

  有趣的來了,我原本希望星期五拔,這家診所要求前一週預約。我朋友抱持著試試的心態前一週星期四打電話去,直接被罵說前一週才可以。於是隔天朋友又再打一次,不知道為何每一通都沒人接,上網查發現阿幹怎麼永久歇業了。在軍中牙齒痛聽到這個消息真得哭笑不得,原本還抱持著有人惡作劇把他用永久歇業,跑去問一些人才發現他居然退休了,我就差一天欸......。

  跑回去第三間診所問,這個郭儒全倒了我該怎麼辦。醫生還說:「郭儒全?郭儒全倒了?他怎麼會沒有通知我。」後來他又推薦我另一間立新醫院的陳院長,可以去給他看看。這家比較好預約,上網預約隔天就會有人打電話來確認,而且可以預約比較久以後的時間。

拔牙當天

  這已經是我第四間診所了,這次終於如願以償把智齒拔掉。那時候預約7:15,我大約7:10到,到了之後先拍X光,大約7:30就叫我躺在看診區的椅子上。7:45醫生幫我打麻醉,很多人都跟我說打麻醉很痛要有心理準備,不過我自己的感覺是還好,平常嘴破比較痛。打完麻醉醫生就不見了,後來聽到隔壁隔壁有一些牙醫器具的聲音,猜測他應該就是幫我打完麻醉就先去幫別人拔牙之類的,根本無情的拔牙機器。8:00的時候輪到我了,先遮住我的眼睛,然後醫生說「要開始拔囉,因為拔牙會有一些拉扯感要撐住喔」,後來感受到他手伸進來在扯,雖然有打麻醉但還是有一點點點點點痛。當他伸進嘴巴扯兩次,有第三次心理準備後,醫生就說咬住,棉花咬緊,至後就叫我去拿藥了。What the hell,此時才8:00剛跳到8:01,他拔一個其他醫生要三四十分鐘的水平智齒只要不到一分鐘?牙齒還沒看到他就叫我出去了,真的靠北快。

  之後就是去一樓櫃台拿一些單子,順便問說有沒有要回診拆線。櫃台說,你下次來就是準備拔其他顆,你沒有線不用拆。後來才想起來他拔我的水平智齒沒有切肉也沒有縫線,真的是拔出來而已。去對面藥局拿完藥後,就搭uber回家,此時大約8:30,嘴巴有一點點怪怪的感覺,也不太痛。到家大約9:00,快速洗個澡,換紗布順便吃藥,麻藥可能已經慢慢退了有一點痛的感覺,但說真的不太會痛。怕隔天臉會整個腫起來還是有乖乖冰敷,不過事後想好像完全沒差。

拔牙之後

  晚上其實睡不太好,並不是說會痛,而是一直有個麻麻腫腫的感覺。早上起來後嚇到,傷口幾乎不會痛,臉也完全沒腫起來。最好笑是早上起來給家人看,家人指著我沒拔智齒的那邊臉頰說臉腫腫的。一臉問號???

  雖然感覺不太會痛,但隔天還是只吃流質食物,布丁、稀飯之類的。再隔一天星期五就乖乖去公司上班,早餐午餐都是吃麵包,同事看到我還很訝異,以為我會腫起來然後完全不能吃東西。晚餐吃丸龜的冷面,有嘗試吃魚肉。星期六就正常吃飯了,不要咬太硬的肉基本上都沒事。星期六晚上還有吐兩大口血塊和吞下好幾個小口的血塊。雖然醫生說要吞下去不要吐出來,但大塊的真的太誇張了,完全不敢吞,小塊的就還好。

小小心得

  這次拔智齒原本做了很多心理準備,但實際上拔的時候比想像輕鬆很多,真心推薦可以去這間診所看看。不過不要為了洗牙之類的去,院長真的很忙,看他得手都沒停過。如果找他是為了洗牙補牙看Google評論都挺不好的。


最後醫生有說還有兩顆要拔,經過這次經驗,我只能說,他開始痛我在拔^^


立新口腔顎面外科牙醫診所
地址:臺北市萬華區西園路2段233號

--

智齒的智是智障的智

2024年1月22日 星期一

Rust read_dir概述 - 對路徑內所有文件檢查


read_dir概述

read_dir被分賴在fs裡面

主要判斷路徑內有哪些文件

並且以此為基礎去操作


文件這樣解釋

read_dir[1]

pub fn read_dir<P: AsRef<Path>>(path: P) -> Result<ReadDir>

輸入一個路徑

回傳Result,Result包著一個迭代器ReadDir[2]

迭代器內部則是Result<DirEntry, error>

也就是出現兩層Result

解釋起來有點饒口

舉個例子大概長這樣

use std::fs;

fn main() {
    let dir_path = "src";
    if let Ok(entries) = fs::read_dir(dir_path) {
        for entry in entries {
            let entry_ = entry.unwrap();
            println!("{:?}", entry.path());
        }
    }
}
"src\\build.rs" "src\\handler.rs" "src\\lib.rs" "src\\main.rs"

設定路徑dir_path

使用read_dir將路徑內的文件資料放入entries迭代器中

透過for entry迭代entries裡面的東西

再把entry unwrap可以得到DirEntry[3],放入entry_裡面

此時就可以對這個文件操作

例如我想要獲得這個路徑

就是直接.path()輸出就好


DirEntry[3]

pub struct DirEntry(/* private fields */);

DirEntry為ReadDir迭代器中的元素結構

可以檢查文件的屬性

常見的例如

path[4]

pub fn path(&self) -> PathBuf

path為獲得文件路徑


file_name[5]

pub fn file_name(&self) -> OsString

file_name可以獲得檔案的名稱

fn main() {
    let dir_path = "src";
    if let Ok(entries) = fs::read_dir(dir_path) {
        for entry in entries {
            let entry = entry.unwrap();
            println!("{:?}", entry.file_name());
        }
    }
}
"build.rs" "handler.rs" "lib.rs" "main.rs"


metadata[6]

pub fn metadata(&self) -> Result<Metadata>

metadata可以知道資料的資訊

例如可以知道是否為檔案、是否為資料夾、最後修改時間等等

use std::fs;

fn main() {
    let dir_path = "src";
    if let Ok(entries) = fs::read_dir(dir_path) {
        for entry in entries {
            let entry = entry.unwrap();
            let metadata = entry.metadata().unwrap();
            println!("is dir: {:?},  last modified: {:?}",
                metadata.is_dir(), metadata.modified());
        }
    }
}
is dir: false, last modified: Ok(SystemTime { intervals: 133504035161114808 }) is dir: false, last modified: Ok(SystemTime { intervals: 133504035348568046 }) is dir: false, last modified: Ok(SystemTime { intervals: 133504035212331473 }) is dir: false, last modified: Ok(SystemTime { intervals: 133504051360968232 })


參考資料

[1] https://doc.rust-lang.org/std/fs/fn.read_dir.html

[2] https://doc.rust-lang.org/std/fs/struct.ReadDir.html

[3] https://doc.rust-lang.org/std/fs/struct.DirEntry.html

[4] https://doc.rust-lang.org/std/fs/struct.DirEntry.html#method.path

[5] https://doc.rust-lang.org/std/fs/struct.DirEntry.html#method.file_name

[6] https://doc.rust-lang.org/std/fs/struct.DirEntry.html#method.metadata

2024年1月18日 星期四

Rust 迭代skip_while - 有條件的略過某些元素


迭代skip_while

skip_while跟skip[1]有一點點不一樣

skip是直接跳過前幾個元素

而skip_while則是可以設定條件

並根據條件跳過前幾個元素


文件這樣解釋

skip_while[2]

fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
where
    Self: Sized,
    P: FnMut(&Self::Item) -> bool,

self是迭代器本身

輸入一個閉包

當達成閉包條件的時候會跳過這個元素

最後輸出一個迭代器

但要注意,如果有一個元素是false

則skip_while的工作就結束了

之後就不會跳過


舉個例子

假設我有一個數組

想要把前面小於3的元素都去除

可以這樣做

fn main() {
    let data = vec![1, 2, 3, 4, 5, 2, 7, 8, 9, 10];
    let res = data.into_iter().skip_while(|x| x < &3).collect::<Vec<_>>();
    println!("{:?}", res);
}
[3, 4, 5, 2, 7, 8, 9, 10]

先把data丟入迭代器中

使用skip_while,閉包條件設置小於3

這樣就可以把小於3的數字都去除

直到第一個出現大於等於3的

skip_while的工作就結束了

因此5後面還有一個2

他不會被去除


實際例子

假設我有一堆網址長這樣

    let link = vec![
        "1. https://www.google.com/",
        "2. https://www.facebook.com/",
        "3. https://www.youtube.com/?gl=TW&hl=zh-TW",
        "4. https://www.dcard.tw/",
        "5. https://shopee.tw/",
    ];

但我不想要編號本身

我希望從網址https開始

因此可以這樣做

fn main() {
    let link = vec![
        "1. https://www.google.com/",
        "2. https://www.facebook.com/",
        "3. https://www.youtube.com/?gl=TW&hl=zh-TW",
        "4. https://www.dcard.tw/",
        "5. https://shopee.tw/",
    ];

    let res: Vec<String> = link
        .into_iter()
        .map(|x| x.chars().skip_while(|c| !c.is_alphabetic()).collect())
        .collect::<Vec<_>>();
    println!("{:?}", res);
}
["https://www.google.com/",
"https://www.facebook.com/",
"https://www.youtube.com/?gl=TW&hl=zh-TW",
"https://www.dcard.tw/", "https://shopee.tw/"]

先將網址數組丟入迭代器中

map[3]取出每個網址

並且判斷每個網址的字元char

再使用skip_while並以is_alphabetic[4]判斷是否為字母

當為字母實則結束skip

最後輸出


參考資料

[1] https://lageeblog.blogspot.com/2024/01/rust-skip.html

[2] https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.skip_while

[3] https://lageeblog.blogspot.com/2023/10/rust-map.html

[4] https://lageeblog.blogspot.com/2024/01/rust-isalphabeticisalphanumeric.html

2024年1月17日 星期三

Rust 迭代 skip - 跳過迭代器前幾個元素


迭代skip

有時候迭代器想要跳過前幾個元素

例如說網頁、路徑等等

可能某些情況下前幾個並不是想要的

這時候就可以用skip跳過


文件這樣解釋

skip[1]

fn skip(self, n: usize) -> Skip<Self>
where
    Self: Sized,

自身為迭代器

可以輸入一個數字,此數字表示前幾個元素捨棄

最後輸出一個迭代器


例子

fn main() {
    let data = [1, 2, 3];
    let res = data.iter().skip(2).collect::<Vec<_>>();
    println!("Result: {:?}", res);
}
Result: [3]

假設有個data是1 2 3

放入迭代器

去除掉前兩個

就只會剩下3


實際應用

我最常是用在看資料夾內所有東西上

因為有些做法會連資料夾本身也算進去

而不是只會顯示資料夾裡面的東西

例如

use walkdir::WalkDir;

fn main() {
    // 指定要遍歷的資料夾路徑
    let folder_path = "src";

    // 使用 WalkDir 遍歷資料夾
    for entry in WalkDir::new(folder_path) {
        if let Ok(entry) = entry {
            let path = entry.path();
            println!("Full Path: {:?}", path);
        }
    }
}
Full Path: "src" Full Path: "src\\main.rs"

使用WalkDir[2]遍歷資料夾內的東西

但如果只是這樣打

可以看到輸出結果為src和src\main.rs

連資料夾本身也算進去了

這可能不是我想要的結果

因此可以使用skip跳過資料夾本身

use walkdir::WalkDir;

fn main() {
    // 指定要遍歷的資料夾路徑
    let folder_path = "src";

    // 使用 WalkDir 遞迴地遍歷資料夾
    for entry in WalkDir::new(folder_path).into_iter().skip(1) {
        if let Ok(entry) = entry {
            let path = entry.path();
            println!("Full Path: {:?}", path);
        }
    }
}
Full Path: "src\\main.rs"

迭代的時候跳過第一個資料夾

從資料夾內部開始輸出


參考資料

[1] https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.skip

[2] https://docs.rs/walkdir/latest/walkdir/

2024年1月16日 星期二

Rust 字元is_alphabetic、is_alphanumeric概述 - 判斷是否為字母


字母判斷

判斷字元是否為字母有幾個方法

分別是is_alphabetic和is_alphanumeric

差別在於一個是單純判斷字母

另一個是可以額外判斷樹字


文件這樣解釋

is_alphabetic[1]

pub fn is_alphabetic(self) -> bool

is_alphabetic可以判斷字母


舉個例子

fn main() {
    let c_lowercase = 'a';
    let c_uppercase = 'Z';
    let c_digit = '5';
    let c_punctuation = '!';
   
    println!("Is alphabetic (lowercase): {}", c_lowercase.is_alphabetic());  
    println!("Is alphabetic (uppercase): {}", c_uppercase.is_alphabetic());  
    println!("Is alphabetic (digit): {}", c_digit.is_alphabetic());          
    println!("Is alphabetic (punctuation): {}", c_punctuation.is_alphabetic());    
}
Is alphabetic (lowercase): true Is alphabetic (uppercase): true Is alphabetic (digit): false Is alphabetic (punctuation): false

其中a和Z都是字母

因此輸出為true

但5和!不是

輸出false


is_alphanumeric[2]

pub fn is_alphanumeric(self) -> bool

is_alphanumeric可以判斷字母加上數字

也就是is_alphabetic和is_numeric[3]加起來


舉個例子

fn main() {
    let c_lowercase = 'a';
    let c_digit = '5';
    let c_punctuation = '!';
   
    println!("Is alphanumeric (lowercase): {}", c_lowercase.is_alphanumeric());
    println!("Is alphanumeric (digit): {}", c_digit.is_alphanumeric());
    println!("Is alphanumeric (punctuation): {}", c_punctuation.is_alphanumeric());
}
Is alphanumeric (lowercase): true Is alphanumeric (digit): true Is alphanumeric (punctuation): false

除了字母a會是true

數字5也會是true

驚嘆號則不是


其他語言

fn main() {
    let chinese = '校';
    let emoji = '💝';
   
    println!("Is alphanumeric (校): {}", chinese.is_alphabetic());
    println!("Is alphanumeric (校): {}", chinese.is_alphanumeric());
    println!("Is alphanumeric (💝): {}", emoji.is_alphabetic());
    println!("Is alphanumeric (💝): {}", emoji.is_alphanumeric());
}
Is alphanumeric (校): true Is alphanumeric (校): true Is alphanumeric (💝): false Is alphanumeric (💝): false

中文字也算是字母的一種

因此也會顯示true

但emoji不是


參考資料

[1] https://doc.rust-lang.org/std/primitive.char.html#method.is_alphabetic

[2] https://doc.rust-lang.org/std/primitive.char.html#method.is_alphanumeric

[3] https://doc.rust-lang.org/std/primitive.char.html#method.is_numeric