Oh! You closed up the window, so you cannot see raining

[Diary] 自由的第二天

台南,有風的日子,23度。 今天比昨天早些起床, 或許是因為心中對自由工作的未知充滿期待。 中午,我決定去品嚐麻豆最有名的牛肉湯——阿榮牛肉湯。 搭配的肉燥飯,完全不輸專賣店的水準。 驚覺我竟想不起過去五六年,在公司餐廳吃過了什麼, 下午到了星巴克,點了一杯香檸蜜柚冷萃。 175元的價錢提醒著我,自己似乎已經不再是那個 可以隨意揮霍的身份了。 坐在那裡,整理著我的 Kanban, 規劃週末的恆春小旅行, 完成了記帳的任務, 還安排了接下來一週的工作計劃。 我想我會慢慢習慣這樣的節奏。 晚上接了女友一起去吃飯, 我們最愛的和津壽司卻沒開門, 於是隨意找了家壽喜燒店。 在飲料吧,我頑皮地調了一杯芒果冰沙加可樂, 瞬間被帶回了一中街多多茶坊的日子。 飯後,我們去了 Costco。 正逢 Black Friday,裡頭人山人海。 女友見到折扣標籤,興奮得像孩子一樣, 可惜需要的東西都沒有特價, 結果買了不少不需要的東西。 果然,這就是 Costco 的魅力吧。 臨走時,她看到食品區有開心果霜淇淋, 堅持要買一杯分享給我, 才發現原來小時候過年吃的那種瓜子的味道, 今天的 Leetcode 題目很應景, 正值 Premier 12 中華隊奪冠, 題目叫做 “Find Champion II”。 這是我的解法: class Solution { public: int findChampion(int n, vector<vector<int>>& edges) { int winner = 0; int cnt = 0; vector<bool> lose(n, false); for (const auto& e : edges) { int who = e[1]; if (!lose[who]) { lose[who] = true; cnt++; while (winner < n && lose[winner]) winner++; } } return cnt == n-1 ? winner : -1; } }; 一天的生活,從自由中找尋規律, 從規律中尋找價值。 希望未來某一天, 再次翻閱這篇日記, 能記起今天的點滴, 並為自己的成長感到自豪。 ...

November 26, 2024 · 1 分鐘 · intervalrain
Oh! You closed up the window, so you cannot see raining

[Diary] 成為 freelancer 的第一天

台南,天氣晴。 九點醒來,比平時晚了一個小時,沒有因為不需工作就睡到中午。 滑了手機,仍被中華隊奪冠的喜悅籠罩。 但身體沒有打算要偷懶, 早早的洗好我與她的衣服, 在家做起了家務, 這是平時我較少分擔的部分。 邊看著《影后》, 因為工作而累積的片單, 直到自由身才有一點喘息的空間可以觀影。 儘管,大多數劇情,早就在社群媒體上被爆了好幾次雷, 但自己看到片段時,更清楚劇情的前因後果,來龍去脈時, 一瞬間,彷彿從旁觀者晉身成了吃瓜群眾, 多了一絲參與感。 做完家務後,休息片刻, 才換好衣物出門覓食。 今天的台南是個大熱天, 悠悠的在麻豆市區繞了幾圈, 繞進一些不曾經過的小巷, 原來星巴克的周圍已經蓋了好幾排新的房子, 想當初初來乍到時, 星巴克還是塊空地。 我始終還是這塊土地的外來者。 繞了好久,腦中對今天的午餐還是沒有想法。 原來我早就被奴化成不用選擇的樣子。 進公司,隨手從 7-11 的架上拿一樣麵包, 結帳時向店員點一杯冰美式, 便匆匆回到工作崗位, 開始社畜的一天。 最後,在麻豆選擇了有名的阿蘭碗粿, 雖然我已經來到麻豆兩年了, 每次都是經過而沒有真正找個位置坐下來享用。 蒜蓉醬油和著油蔥酥, 原來這就是麻豆圓環口老是人車搶道的原因啊… 「要怎麼樣,才能解決這裡的塞車問題呢?」 沒有多餘的時間讓我思考這些, 我是一個 freelancer,也是一名失業者。 我是自願的,也是被迫的。 自願來自於我心甘情願遞上辭呈。 被迫來自於我心有不甘,覺得我的身心靈都被奴役到失去了靈魂。 如果我喜歡寫 App,我應該為自己寫,寫自己喜歡的 App。 而不是在角落一方,為他人的不合理的需求,埋首苦幹。 回家,開始盤點這段時間該做的事。 順便拿自己寫的專案管理網頁, 記下一些該做的事。 寫了一題 Leetcode, 很好,Hard 但是 one pass。 這是我的解法: class Solution { public: unordered_map<int, vector<int>> moves{{0,{1,3}},{1,{0,2,4}},{2,{1,5}},{3,{0,4}},{4,{3,5,1}},{5,{4,2}}}; int slidingPuzzle(vector<vector<int>>& b) { string s = to_string(b[0][0]) + to_string(b[0][1]) + to_string(b[0][2]) + to_string(b[1][0]) + to_string(b[1][1]) + to_string(b[1][2]); unordered_set<string> visited({s}); queue<pair<string,int>> q({{s, s.find('0')}}); int res = 0; while (!q.empty()) { int sz = q.size(); while (sz--) { auto [curr, pos] = q.front(); q.pop(); if (curr == "123450") return res; for (const auto& next : moves[pos]) { string str = curr; swap(str[pos], str[next]); if (visited.count(str)) continue; visited.insert(str); q.push({str, next}); } } res++; } return -1; } }; 人生,也許很突然, 但也可能都是必經之路。 ...

November 25, 2024 · 1 分鐘 · intervalrain

About me

Rain Hu / intervalrain / 陣雨 Rain Hu 既是 intervalrain 也是陣雨。 Rain Hu / 是我的英文名,象徵著我在科技領域不斷探索創新的專業開發者。專注於全端開發、AI整合,是本站中技術文章的作者。 intervalrain / 是我的帳號,象徵虛擬世界中的我,寫的可能是我的日常,可能是我的抱負,也可能是我的自喃。 陣雨 / 是我的筆名,象徵倘佯在音樂世界的我,在繁忙的生活中,透過詞或曲,或是一首歌,寫下我的牢騷。 About me 本名:胡鎮宇 專長: 全端開發 (C#.NET, C++, React TypeScript, Python) 系統架構設計 (Clean Architecture, CQRS, DDD) AI 整合與開發 (LangChain, RAG) 半導體製程與元件物理 語言能力: 中文(母語) 英文(TOEIC 775/900) 韓文(TOPIK I 180/200) 嗜好: 音樂創作 寫 Leetcode 生日:1991/12/3 血型:O型 星座:射手座 生肖:羊 學歷:國立清華大學 材料工程學系碩士 Resume 職業生涯 現職:資深軟體工程師 @ UMC (2022.08 - 2024.11) 主導開發 UEDA 5.0 跨區域資料分析解決方案 開發 DSM Bot AI 助手,革新半導體製造資訊查詢 設計 BTV 系統,實現 WAT 量測後端良率 開發 ChatGPT 插件,提升產線可視性 前職:半導體元件研發工程師 @ UMC (2018.08 - 2022.08) 創新 NWR Project,提升 28eHV 與 22eHV 良率 開發 Co-cut Project,優化實驗成本 設計 U2C 工具,提升 CAD 開發效率 教育背景 國立清華大學 材料科學工程研究所 (2014-2018) 國立清華大學 材料科學工程學系 (2010-2014) 關於我 一個熱愛技術創新的開發者,在半導體產業中找到結合創意與實用的完美平衡點。 ...

November 24, 2024 · 1 分鐘 · Rain Hu, 陣雨, intervalrain
Oh! You closed up the window, so you cannot see raining

[Hugo] 使用 Hugo-notice

Shortcodes 介紹 Shortcodes 是內容檔案中的一個簡單片段,Hugo將使用預先定義的範本對其進行呈現。 除了更乾淨的 Markdown 外,Shortcodes 還可以隨時更新新的技術或標準。 Notice shortcodes 將以下程式碼加入到 Hugo 專案底下的 layouts/shortcodes/notice.html {{/* Available notice types: warning, info, note, tip */}} {{- $noticeType := .Get 0 | default "note" -}} {{/* Workaround markdownify inconsistency for single/multiple paragraphs */}} {{- $raw := (markdownify .Inner | chomp) -}} {{- $block := findRE "(?is)^<(?:address|article|aside|blockquote|canvas|dd|div|dl|dt|fieldset|figcaption|figure|footer|form|h(?:1|2|3|4|5|6)|header|hgroup|hr|li|main|nav|noscript|ol|output|p|pre|section|table|tfoot|ul|video)\\b" $raw 1 -}} {{/* Count how many times we've called this shortcode and load the css if it's the first time */}} {{- if not ($.Page.Scratch.Get "noticecount") -}} <style type="text/css">.notice{--root-color:#444;--root-background:#eff;--title-color:#fff;--title-background:#7bd;--warning-title:#c33;--warning-content:#fee;--info-title:#fb7;--info-content:#fec;--note-title:#6be;--note-content:#e7f2fa;--tip-title:#5a5;--tip-content:#efe}@media (prefers-color-scheme:dark){.notice{--root-color:#ddd;--root-background:#eff;--title-color:#fff;--title-background:#7bd;--warning-title:#800;--warning-content:#400;--info-title:#a50;--info-content:#420;--note-title:#069;--note-content:#023;--tip-title:#363;--tip-content:#121}}body.dark .notice{--root-color:#ddd;--root-background:#eff;--title-color:#fff;--title-background:#7bd;--warning-title:#800;--warning-content:#400;--info-title:#a50;--info-content:#420;--note-title:#069;--note-content:#023;--tip-title:#363;--tip-content:#121}.notice{padding:18px;line-height:24px;margin-bottom:24px;border-radius:4px;color:var(--root-color);background:var(--root-background)}.notice p:last-child{margin-bottom:0}.notice-title{margin:-18px -18px 12px;padding:4px 18px;border-radius:4px 4px 0 0;font-weight:700;color:var(--title-color);background:var(--title-background)}.notice.warning .notice-title{background:var(--warning-title)}.notice.warning{background:var(--warning-content)}.notice.info .notice-title{background:var(--info-title)}.notice.info{background:var(--info-content)}.notice.note .notice-title{background:var(--note-title)}.notice.note{background:var(--note-content)}.notice.tip .notice-title{background:var(--tip-title)}.notice.tip{background:var(--tip-content)}.icon-notice{display:inline-flex;align-self:center;margin-right:8px}.icon-notice img,.icon-notice svg{height:1em;width:1em;fill:currentColor}.icon-notice img,.icon-notice.baseline svg{top:.125em;position:relative}</style> <div><svg width="0" height="0" display="none" xmlns="http://www.w3.org/2000/svg"><symbol id="tip-notice" viewBox="0 0 512 512" preserveAspectRatio="xMidYMid meet"><path d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"/></symbol><symbol id="note-notice" viewBox="0 0 512 512" preserveAspectRatio="xMidYMid meet"><path d="M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/></symbol><symbol id="warning-notice" viewBox="0 0 576 512" preserveAspectRatio="xMidYMid meet"><path d="M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/></symbol><symbol id="info-notice" viewBox="0 0 512 512" preserveAspectRatio="xMidYMid meet"><path d="M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"/></symbol></svg></div> {{- end -}} {{- $.Page.Scratch.Add "noticecount" 1 -}} <div class="notice {{ $noticeType }}" {{ if len .Params | eq 2 }} id="{{ .Get 1 }}" {{ end }}> <p class="first notice-title"><span class="icon-notice baseline"><svg><use href="#{{- $noticeType -}}-notice"></use></svg></span>{{- i18n $noticeType -}}</p> {{- if or $block (not $raw) }}{{ $raw }}{{ else }}<p>{{ $raw }}</p>{{ end -}} </div> Classes 警告 {{< notice warning >}} 這是警告(warning) {{< /notice >}} ...

January 19, 2024 · 2 分鐘 · Rain Hu

[Life] 原子習慣

與這本書的相遇是某次在 Costco 瞎逛,隨手拿起來翻了幾頁,卻改變了我的人生觀。 戒菸的人 書中最令我印象深刻的一個例子是,書中提到,習慣的演成,在於你怎麼定義三個核心觀念,這三個核心便是: 目標:戒菸 過程:花費減半 角色定位:戒菸的人 以戒菸為例,我的目標是戒菸,所以我制定了一個戒菸的過程,比方說每個禮拜花費在買菸的錢減少一半,那麼有一天,我會達到戒菸的目的,而我的角色定位,是「戒菸的人」。 若某天,在某個應酬的場合,朋友遞上了菸。 「我在戒菸。」我說。 「哎呀!三八!明天再戒,難得聚在一起。」 「好吧!就一根。」我說。 那麼我便在這個戒菸的過程,因為壞的習慣而達成不了目標,因為在定義自己的角色定位是,「戒菸的人」,暗示了自己,還是在抽菸。 但若今天我將三個核心翻轉,我先定義自己的角色定位,再設定過程,最後自然而然的達成目標,那麼心境上便完全不一樣了。 角色定位:不抽菸的人 過程:我不碰菸 目標:戒菸 同樣地,在同樣的應酬場合,朋友遞上了菸。 「我不抽菸。」我說。 我說這樣的答案,應該很難有人會硬把菸塞到你手裡。 生病的人 自從大一下學期,被診斷出慢性腎炎,我便為自己貼上了「生病的人」的標籤,從此之後,我便開始把體力變差怪罪於生病的緣故,故開始怠惰於運動,而因為不運動,導致體力愈來愈差,惡性循環。直至今日,出社會四年,我幾乎沒有再碰過籃球,儘管我一直視籃球是我最喜愛的運動,甚至在大學前兩年,我都還很積極的參與系隊,且當了系隊的副隊長。但是因為一個念頭的差異,便會對一個人的生活產生重大的轉變。 「生病的人」這個標籤,對我的生活造成的影響,是全面的影響,甚至造成我個性上的歧變,從活潑外向變成陰陰鬱自卑,對很多事情都沒有信心,我害怕被異樣看待,所以把「秘密」封鎖起來,同時也把自己關起來,最終,心理的不健康與對疾病的抗拒,轉化成表象 – 我從外觀上看起來就變成一個生病的人。 直到我開始接受、認識它,我才感受到明顯的變化。我的確是生病的人,但它並不影響我是個什麼樣的人,的確生活會產生有些不便,但是人生要過得怎麼樣,還是由自己決定的。我只是一個需要比較多時間充電,當我充滿了電,其實就跟普通人沒什麼兩樣吧。 獨特的人 出社會第 4 年,我從半導體研發工程師轉職成軟體開發工程師。起初是因為我需要常常回診的緣故,我需要準時上下班,而繁忙的工作,可能會因為我的時間限制而拖延,所以我開始在放個的時間,研究怎麼將手上的工作自動化,加上小時候寫過遊戲外掛的經驗,很快的就對程式語言上手。我開始著手於自動將數據自動的變成報表、圖像,更甚至自動輸出成報告,在這過程中我開始感受到寫程式的美好,因為寫程式可以讓我突破時間的限制,讓我可以快速的統整數據,使我有更多的時間專注於其它的研究上。同時我也開始著迷於演算法,怎麼在快速的自動化中,再偷取更多時間,為自己爭取更多時間。我從小工具開始,到著手一個人進行專案的開發,到現在,著手一個團隊進行的專案,我想我已經可以稱作一個軟體開發工程師。 對社會而言,若相入為主的看待一個人是「生病的人」,往往會認為他沒有作為,需要被可憐。 在同樣的環境中,就算有著同樣的能力,也常常因為標籤而被眨視。但是我必須要撕掉標籤,致力於發展自己的獨特性,在生活也好、工作也好,在人生中當自己的主人。在同樣的環境中,我有著獨特的能力,那麼我的標籤就會被換掉。我不是生病的人,我是獨特的人。

February 18, 2023 · 1 分鐘 · Rain Hu
Oh! You closed up the window, so you cannot see raining

[Life] July's plan

Next step: Technical Phone Interview: Duration: 45mins Google Hangouts call (video is optional) Coding is done on Google Docs Please ensure you have a working internet connection and current web browser :) There will be about 1-3 different questions (dependent on complexity - e.g. 1 Hard OR 2 Medium problems) related to coding, data structures and algorithms. You will be expected to come up with optimized and production-ready code, free of bugs. You should not write in pseudo-code. ...

July 16, 2022 · 10 分鐘 · intervalrain
Oh! You closed up the window, so you cannot see raining

[Life] Some change of road to SWE

陣雨: 在每日一題 Leetcode 的日常中,看到 LinkedIn 上來自 LinkedIn 自己工程師的建議,一語驚醒夢中人,於是記錄下來,警醒自己: 作者 Nikita Kothari Software Engineer @ LinkedIn The University of Texas at Dallas 正文 Nikita: Recently I interviewed and got 7 offers within two months of preparation and accepted Senior Software Engineer position at LinkedIn. I want to share some useful resources which might help you to land your dream job. 最近,我在兩個月內準備了面試並錄取了七個職位,且最終且接收了 LinkedIn 的高級軟體工程師一職。我想要分享一些有用的資源,這些資源可能可以幫助你找到你夢寐以求的工作。 1. 自信 Confidence is the key. Don’t jump into the interview process when you are not fully prepared. ...

June 14, 2022 · 3 分鐘 · intervalrain
Oh! You closed up the window, so you cannot see raining

[Washam] Way to SWE

Coding Interview University John Washam: I originally created this as a short to-do list of study topics for becoming a software engineer, but it grew to the large list you see today. After going through this study plan, I got hired as a Software Development Engineer at Amazon! You probably won’t have to study as much as I did. Anyway, everything you need is here. I studied about 8-12 hours a day, for several months. This is my story: Why I studied full-time for 8 months for a Google interview ...

May 25, 2019 · 50 分鐘 · Rain Hu