[{"data":1,"prerenderedAt":1658},["ShallowReactive",2],{"tag-threads-zh-TW-ChordPro":3,"latest-articles-zh-TW":1084,"announcement-zh-TW":1460,"author-context":1594},[4,56,271,344,406,445,780,810,860,964,988,1038],{"id":5,"title":6,"animated":7,"body":8,"client":41,"cover":41,"css_code":41,"description":38,"extension":42,"html_code":41,"images":43,"is_announcement":7,"is_pinned":7,"is_published":44,"key_points":41,"lang":41,"meta":45,"navigation":44,"order":41,"path":46,"photos":47,"published_at":48,"reading_time":41,"related":41,"role":41,"seo":49,"slug":50,"source_hash":41,"status":41,"stem":51,"summary":52,"tags":53,"tech_stack":41,"translation_of":41,"type":54,"url":41,"video_url":41,"__hash__":55},"threads/threads/pages/about.md","關於我",false,{"type":9,"value":10,"toc":37},"minimark",[11,19,25,28,31,34],[12,13,14],"p",{},[15,16],"img",{"alt":17,"src":18},"Ivan Hsu","/avatar/me.jpeg",[20,21,22],"blockquote",{},[12,23,24],{},"Boys, be ambitious!",[12,26,27],{},"一個從面板業轉職的網頁工程師。大半時間寫著給機器看的語言，在這裡寫給人類看的文字。",[12,29,30],{},"著迷於所有使用有限的素材，卻能留下偉大遺產的事情。例如音樂與文字。當然，還有程式碼。",[12,32,33],{},"而鍵盤就像是 21 世紀的元素週期表。不論是工程師或是作家，我們所擁有的僅僅是眼前的 26 個英文字母、以及一些符號，但是我們卻有機會創造出全世界都在使用的產品。改變人們生活的樣貌、或是留下偉大的想法。",[12,35,36],{},"在 AI 氾濫的時代，我要用剛剛好的 Tech Stack，開發實用的生活小物 SaaS。",{"title":38,"searchDepth":39,"depth":39,"links":40},"",2,[],null,"md",[],true,{},"/threads/pages/about",[],"2026-06-21",{"title":6,"description":38},"about","threads/pages/about","用剛剛好的 Tech Stack 開發實用的生活小物 SaaS。",[],"page","diQIkj7Ay9IH1cvAlWhoavd0mP2lg2A0mxi6ytsAc-U",{"id":57,"title":58,"animated":7,"body":59,"client":41,"cover":249,"css_code":41,"description":38,"extension":42,"html_code":41,"images":250,"is_announcement":44,"is_pinned":7,"is_published":44,"key_points":41,"lang":41,"meta":251,"navigation":44,"order":41,"path":256,"photos":257,"published_at":258,"reading_time":41,"related":41,"role":41,"seo":259,"slug":260,"source_hash":41,"status":261,"stem":262,"summary":263,"tags":264,"tech_stack":41,"translation_of":41,"type":268,"url":269,"video_url":41,"__hash__":270},"threads/threads/products/threadspage.md","Threadspage 把你的創作，變成 真正屬於你的知識主場。",{"type":9,"value":60,"toc":247},[61,66,69,105,223,226,229,243],[20,62,63],{},[12,64,65],{},"創作一次，讓它替你工作。",[12,67,68],{},"Threadspage 把你散落各平台的內容，收攏成一座以你為中心、還會自己長大的知識主場。",[70,71,72,81,89,97],"ul",{},[73,74,75,76],"li",{},"YouTube 影片一鍵變文章\n",[70,77,78],{},[73,79,80],{},"你已經錄好影片了，別再重寫一次。AI 幫你把逐字稿濃縮成乾淨好讀的文章，影片自動嵌入，內容從此長在你自己的網域上。",[73,82,83,84],{},"一鍵生成多語言\n",[70,85,86],{},[73,87,88],{},"寫一篇，自動翻成英文、日文版本，各自有獨立網址可以分享與被搜尋，觸及英語圈、日語圈的讀者與學生。",[73,90,91,92],{},"會回答問題的 AI 分身\n",[70,93,94],{},[73,95,96],{},"訪客在你的網站直接發問，AI 用你的內容即時回答——就像一個 24 小時、用你的話回覆的你。",[73,98,99,100],{},"自有網域，內容永遠是你的\n",[70,101,102],{},[73,103,104],{},"不綁平台、不看演算法臉色。程式、內容、部署全在你手上，長期累積成真正屬於你的資產。",[106,107,111],"pre",{"className":108,"code":109,"language":110,"meta":38,"style":38},"language-bash shiki shiki-themes github-dark","# 貼上你已經錄好的影片\n$ threadspage add https://youtu.be/your-talk\n\n→ 抓取逐字稿、濃縮成文章 ✓\n→ 生成 en / ja 版本（獨立網址）✓\n→ 掛上你的 AI 分身（會答訪客問題）✓\n→ 產生結構化資料 · llms.txt · sitemap ✓\n\n# 全部長在 yourdomain.co，永遠是你的\n","bash",[112,113,114,123,139,145,157,177,191,212,217],"code",{"__ignoreMap":38},[115,116,119],"span",{"class":117,"line":118},"line",1,[115,120,122],{"class":121},"sAwPA","# 貼上你已經錄好的影片\n",[115,124,125,129,133,136],{"class":117,"line":39},[115,126,128],{"class":127},"svObZ","$",[115,130,132],{"class":131},"sU2Wk"," threadspage",[115,134,135],{"class":131}," add",[115,137,138],{"class":131}," https://youtu.be/your-talk\n",[115,140,142],{"class":117,"line":141},3,[115,143,144],{"emptyLinePlaceholder":44},"\n",[115,146,148,151,154],{"class":117,"line":147},4,[115,149,150],{"class":127},"→",[115,152,153],{"class":131}," 抓取逐字稿、濃縮成文章",[115,155,156],{"class":131}," ✓\n",[115,158,160,162,165,168,171,174],{"class":117,"line":159},5,[115,161,150],{"class":127},[115,163,164],{"class":131}," 生成",[115,166,167],{"class":131}," en",[115,169,170],{"class":131}," /",[115,172,173],{"class":131}," ja",[115,175,176],{"class":131}," 版本（獨立網址）✓\n",[115,178,180,182,185,188],{"class":117,"line":179},6,[115,181,150],{"class":127},[115,183,184],{"class":131}," 掛上你的",[115,186,187],{"class":131}," AI",[115,189,190],{"class":131}," 分身（會答訪客問題）✓\n",[115,192,194,196,199,202,205,207,210],{"class":117,"line":193},7,[115,195,150],{"class":127},[115,197,198],{"class":131}," 產生結構化資料",[115,200,201],{"class":131}," ·",[115,203,204],{"class":131}," llms.txt",[115,206,201],{"class":131},[115,208,209],{"class":131}," sitemap",[115,211,156],{"class":131},[115,213,215],{"class":117,"line":214},8,[115,216,144],{"emptyLinePlaceholder":44},[115,218,220],{"class":117,"line":219},9,[115,221,222],{"class":121},"# 全部長在 yourdomain.co，永遠是你的\n",[12,224,225],{},"你只管創作，技術的事交給我們。",[12,227,228],{},"你不是工程師，你也不該為了擁有自己的內容，就得跟搬家、翻譯、串接 AI 這些技術活搏鬥。這正是 Threadspage 想替你扛下來的。",[20,230,231],{},[12,232,233,234],{},"我已經花時間把影片錄好了，Threadspage 讓我不用再花一次時間把它重寫成文章。\n-- ",[235,236,242],"a",{"href":237,"target":238,"rel":239},"https://huanyinliu.com","_blank",[240,241],"noopener","noreferrer","HuanYin",[244,245,246],"style",{},"html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":38,"searchDepth":39,"depth":39,"links":248},[],"/images/threadspage-cover.png",[],{"techStack":252},[253,254,255],"Nuxt","PocketBase","AWS S3","/threads/products/threadspage",[],"2026-06-13",{"title":58,"description":38},"threadspage","active","threads/products/threadspage","你已經在 YouTube、IG、Threads 花了大把時間創作，心血卻鎖在別人的平台上。Threadspage 幫你把內容一鍵搬到自己的網域、自動生成多語言，還變成一個會回答訪客問題的 AI 分身。",[265,266,267],"SaaS","YouTube-to-markdown","auto-i18n","product","https://threadspage.com","TPiy-4YE8NTHw6GVT2PMxcagcLUinkSlZEAyMtVFYQA",{"id":272,"title":273,"animated":7,"body":274,"client":41,"cover":41,"css_code":41,"description":278,"extension":42,"html_code":41,"images":330,"is_announcement":7,"is_pinned":7,"is_published":44,"key_points":41,"lang":41,"meta":331,"navigation":44,"order":41,"path":332,"photos":333,"published_at":334,"reading_time":41,"related":41,"role":41,"seo":335,"slug":336,"source_hash":41,"status":41,"stem":337,"summary":338,"tags":339,"tech_stack":41,"translation_of":41,"type":342,"url":41,"video_url":41,"__hash__":343},"threads/threads/articles/recap-2025.md","2025 年的碎片",{"type":9,"value":275,"toc":328},[276,279,282,285,288,291,294,297,300,303,306,309,311,314,317,320,322,325],[12,277,278],{},"今年一整年保持著一週健身 3 天，有氧 1 小時的好習慣。規律運動、吃健康的食物真的會感受到原始的快樂！",[12,280,281],{},"腦內啡釋放和身體變得輕盈的感覺真的超好！怪不得大家都說體態是最好的名片，因為運動真的很花時間。🤣",[12,283,284],{},"10 月第一次在國外自駕之旅，去了矽谷找朋友，體驗了美國時間、美國生活。雖然花了很多特休跟錢，但我覺得超值得，因為回憶是會複利的！",[12,286,287],{},"我一直認為時間有美化回憶的能力，時間為苦澀的回憶加上濾鏡，為開心的回憶按下快門。",[12,289,290],{},"我能夠鮮明地感受到 10 年前第一次身在東京的興奮，也確定很久以後，能夠重溫這趟美國之旅的快樂。",[12,292,293],{},"/",[12,295,296],{},"從去年發現 indie hacking 這個領域之後，我嘗試獨立開發一年多了。在今年 8 月發佈了我的第一個產品，一個用 markdown 寫和弦譜的工具《和弦島》。但是太 niche 了，沒什麼人用。",[12,298,299],{},"我沒有能讓產品持續曝光的 distribution channel，只在發佈的那一個禮拜激起一陣漣漪，隔週 GA4 的線圖又恢復平靜了。",[12,301,302],{},"不過在做使用者訪談時，認識了厲害的吉他手（可以 cover Marcin 曲子的等級）也是很棒的收穫！",[12,304,305],{},"獨立開發就和學習任何事情一樣，有前人的經驗可以參考是一回事，事實上總是要自己走過一次、陷進同樣的坑裡才能真的學會一些事情。我想這就是知識和經驗之間的關係吧。",[12,307,308],{},"為了補足開發以外的技能，我攝取了好些英文書：My Indie Book, Snow Leopard, Obviously Awesome, The SaaS Playbook, The Cold Start Problem。之後的產品如果有相關的心得再寫文章分享吧！實作要緊！",[12,310,293],{},[12,312,313],{},"今年也開始跟仰慕很久的吉他老師上課，課堂上經常發現一些平時自己不會注意到的小細節，其實都埋藏著很多學問。六條弦和手臂大小的桶身裡，真的藏著一個宇宙！",[12,315,316],{},"每當這種時候總是能深刻感受到現場教學的價值。雖然現在靠 YouTube 和 AI，沒有什麼東西是不能自學的，但是經驗和「發現自己不知道什麼」的能力，還是需要老師。",[12,318,319],{},"這種時候也會覺得，辛苦上班賺錢終於有意義了，可以付學費學想學的東西。",[12,321,293],{},[12,323,324],{},"2026 年的新年新希望跟往年一樣：希望每年都可以不要許同樣的願望。",[12,326,327],{},"所以就這樣吧～💪🏻",{"title":38,"searchDepth":39,"depth":39,"links":329},[],[],{},"/threads/articles/recap-2025",[],"2025-12-31",{"title":273,"description":278},"recap-2025","threads/articles/recap-2025","時間有美化回憶的能力，時間為苦澀的回憶加上濾鏡，為開心的回憶按下快門。",[340,341],"2025","recap","article","vbudqgEWAIT97YJTFjWChUtnUCNZvX3MLGK-wzVMf-c",{"id":345,"title":346,"animated":7,"body":347,"client":41,"cover":391,"css_code":41,"description":38,"extension":42,"html_code":41,"images":392,"is_announcement":7,"is_pinned":7,"is_published":44,"key_points":41,"lang":41,"meta":393,"navigation":44,"order":41,"path":395,"photos":396,"published_at":397,"reading_time":41,"related":41,"role":41,"seo":398,"slug":399,"source_hash":41,"status":261,"stem":400,"summary":401,"tags":402,"tech_stack":41,"translation_of":41,"type":268,"url":383,"video_url":41,"__hash__":405},"threads/threads/products/reelly.md","Reelly 幫你摘要 IG 美食 Reels！",{"type":9,"value":348,"toc":389},[349,354,357,360,363,366,369,372,375,378,386],[20,350,351],{},[12,352,353],{},"把想吃的店，一秒變成清單是什麼體驗？",[12,355,356],{},"下個月要去東京旅遊，存了一堆抹茶 Reels，卻懶得整理到地圖裡嗎？",[12,358,359],{},"我把這件麻煩事變簡單了！Reelly 能讀懂 IG Reels 的內容，只需要點擊「分享」，剩下的 AI 都會處理👏🏻",[12,361,362],{},"去年我要去東京前，IG 推了一堆抹茶店給我。",[12,364,365],{},"我用截圖存、用書籤存，要出發前打開來 —— 完全找不到當初看到的那間 🫠",[12,367,368],{},"於是我乾脆自己寫了一個工具，它叫做 Reelly。🍜",[12,370,371],{},"在 IG 滑到想去的店，點分享，Reelly 會自動讀懂 Reels 的內容，把店名、地址、推薦品項整理好，存進你的專屬清單。",[12,373,374],{},"下次要找，直接搜尋就好。🔍",[12,376,377],{},"日韓店家也支援，Reelly 是 Web App 不用裝 App，加入主畫面即可像 App 一樣使用。",[12,379,380,381],{},"現在完全免費，有興趣的話來試試 👉🏻 ",[235,382,383],{"href":383,"rel":384},"https://reelly.life",[385],"nofollow",[12,387,388],{},"（下個月要出遊的人，現在開始存剛剛好！🙌🏻）",{"title":38,"searchDepth":39,"depth":39,"links":390},[],"/images/reelly-cover.png",[],{"techStack":394},[253,254,255],"/threads/products/reelly",[],"2025-11-20",{"title":346,"description":38},"reelly","threads/products/reelly","🍜 看到好吃的 Reels？分享給我，幫你摘要店家清單🧾",[265,403,404],"Food","Reels","5pxg_DRJrpYkbsagkKyIBP5urxqtrkq3C092XjA7e14",{"id":407,"title":408,"animated":7,"body":409,"client":41,"cover":427,"css_code":41,"description":421,"extension":42,"html_code":41,"images":428,"is_announcement":7,"is_pinned":7,"is_published":44,"key_points":41,"lang":41,"meta":429,"navigation":44,"order":41,"path":432,"photos":433,"published_at":434,"reading_time":41,"related":41,"role":41,"seo":435,"slug":436,"source_hash":41,"status":261,"stem":437,"summary":438,"tags":439,"tech_stack":41,"translation_of":41,"type":268,"url":443,"video_url":41,"__hash__":444},"threads/threads/products/cord-land.md","10分鐘內編寫自己的 即時轉調 和弦譜！",{"type":9,"value":410,"toc":425},[411,422],[12,412,413,417],{},[15,414],{"alt":415,"src":416},"cord-land-mobile","/images/cord-land-mobile.png",[235,418,421],{"href":419,"target":238,"rel":420},"https://cord.land/cords/wmgkca0x82s802h",[240,241],"さくらんぼ - 大塚愛",[12,423,424],{},"隨心所欲編寫和弦譜、和弦圖、自訂註記。成品為純文字，會自動隨著螢幕的大小調整排版、也可以複製貼上到任何地方。",{"title":38,"searchDepth":39,"depth":39,"links":426},[],"/images/cord-land-cover.png",[],{"techStack":430},[431,254,255],"SvelteKit","/threads/products/cord-land",[],"2025-08-20",{"title":408,"description":421},"cord-land","threads/products/cord-land","使用 ChordPro 擴展語法，以純文字編寫吉他和弦譜，即時修改、一鍵分享、自動轉調。",[265,440,441,442],"ChordPro","Chord","Corduroy","https://cord.land/landing","PZGAB3HFZQVIyRgzi4nSaX9wnl5K2jtzaCZsG-ne_5U",{"id":446,"title":447,"animated":7,"body":448,"client":41,"cover":765,"css_code":41,"description":766,"extension":42,"html_code":41,"images":767,"is_announcement":7,"is_pinned":7,"is_published":44,"key_points":41,"lang":41,"meta":768,"navigation":44,"order":41,"path":769,"photos":770,"published_at":771,"reading_time":41,"related":41,"role":41,"seo":772,"slug":773,"source_hash":41,"status":41,"stem":774,"summary":775,"tags":776,"tech_stack":41,"translation_of":41,"type":342,"url":41,"video_url":41,"__hash__":779},"threads/threads/articles/effective-engineer-talks-at-google.md","《 The Effective Engineer》作者 Edmond Lau 導讀，增加 impact！！ 矽谷工程師都在做的事。",{"type":9,"value":449,"toc":756},[450,458,461,470,479,488,491,502,505,512,515,526,531,534,545,554,557,563,566,571,578,583,590,593,596,599,602,608,615,619,625,628,631,634,641,645,648,651,662,669,673,680,683,690,693,698,701,704,711,715,722,725,729,736,739,743,746,753],[12,451,452,453,457],{},"在傍晚吃飯時間，看著 VSCode 上抽象再抽象的程式碼、Terminal 上惱人的錯誤訊息，這時 Slack 又跳出通知，有緊急的 Bug 票需要解決。螢幕右上角的時鐘，不知道什麼時候已經又過了一小時。明明下班時間都已經到了，今天的進度卻才剛開始沒多久。這時候你不禁感嘆，",[454,455,456],"strong",{},"上班就和爬山一樣，下班路比上班難","。",[12,459,460],{},"你是否有過這樣的時期，上班的時候事情永遠做不完，今天的進度一直往後堆積，每到禮拜五總是加班到接近12點。內心開始自我懷疑，是不是技術能力不足、效率太差，還是工作真的太多了。",[12,462,463,464,469],{},"最近發現幾個技術部落格都推薦了",[235,465,468],{"href":466,"rel":467},"https://www.effectiveengineer.com/book",[385],"《 The Effective Engineer》","這本書，說非常受用，於是我決心來好好研讀一番，期許未來自己也能夠成為一位 effective engineer。",[12,471,472,473,478],{},"我先看了作者在 ",[235,474,477],{"href":475,"rel":476},"https://www.youtube.com/watch?v=BnIz7H5ruy0",[385],"Talks at Google 的演講","，這場演講涵蓋了《 The Effective Engineer》的主要內容。本篇文章會重點摘要演講的內容，書的內容等我看完之後再另外寫文章發表。",[12,480,481,482,487],{},"作者 ",[235,483,486],{"href":484,"rel":485},"http://www.effectiveengineer.com/about",[385],"Edmond Lau"," 在許多知名的矽谷大公司（e.g. Google）和新創公司（e.g. Quora）工作過。他曾經連續 2 年每週工作 80 小時以上，並且又花了 2 年，全職研究如合成為一個 effective engineer。",[12,489,490],{},"藉由訪問 20 幾家矽谷科技巨頭以及新創公司（e.g. Facebook, Instagram, Dropbox, Etsy 等等）的 CTO 和技術大神，問他們以下 3 個問題：",[70,492,493,496,499],{},[73,494,495],{},"What separates the most effective engineers you have worked with from everyone else?（什麼事情造就了有效率的工程師，使他們有別於普通的工程師？）",[73,497,498],{},"What is the most valuable lesson you have learned in the past year?（你過去一年之中，學到最寶貴的教訓是什麼？）",[73,500,501],{},"What investment you have made for your team has paid off the highest returns?（什麼投資給你的團隊帶來了最高的回報？）",[12,503,504],{},"總結出每個軟體工程師都可以學習的效率工作法。作者稱之為 leverage framework。",[12,506,507,508,511],{},"這本書裡不會有任何一行 code，書中所闡述的，是作為一名軟體工程師，如何藉由",[454,509,510],{},"執行 high-leverage activities 來最大化自己的 impact","，槓桿出自己的價值與影響力。",[12,513,514],{},"作者要我們了解一個殘酷的事實：",[106,516,520],{"className":517,"code":518,"language":519,"meta":38,"style":38},"language-javascript shiki shiki-themes github-dark","effort === impact // False\n","javascript",[112,521,522],{"__ignoreMap":38},[115,523,524],{"class":117,"line":118},[115,525,518],{},[20,527,528],{},[12,529,530],{},"努力不等於影響力與貢獻",[12,532,533],{},"一位 staff engineer 的產出貢獻，可能是一位 junior engineer 的 10 倍，但是前者的工時，不可能也是 10 倍。",[12,535,536,537,540,541,544],{},"作者在此給出了本書的核心概念「",[454,538,539],{},"leverage","」，它是一個放大器，可以將你的努力轉換成巨大的產值和影響力，同時也是",[454,542,543],{},"突破日常開發瑣事的施力點","。以下是 leverage 的計算公式：",[106,546,548],{"className":517,"code":547,"language":519,"meta":38,"style":38},"leverage = impactProduced / timeInvested\n",[112,549,550],{"__ignoreMap":38},[115,551,552],{"class":117,"line":118},[115,553,547],{},[12,555,556],{},"工程師的開發日常，也符合 80 / 20 法則。20% 的任務創造了 80% 的價值和影響，而 80% 的任務，只帶來了 20% 的成效。",[12,558,559,560,457],{},"作者要我們辨識那些花最少時間，卻能創造最大價值和影響力的事情，並且優先去執行它，這些影響至關重大的事情叫做 ",[454,561,562],{},"high-leverage activities",[12,564,565],{},"在演講中，作者提及了以下 5 種 high-leverage activity ，就讓我們一一來了解吧！",[567,568,570],"h3",{"id":569},"optimize-for-learning","Optimize for learning",[12,572,573,574,577],{},"第一個 high-leverage activity 是最大化自己學習能力。因為，",[454,575,576],{},"學習是有複利效果的","！所以越早開始進步的幅度越大，學習能力越好，進步得越快。",[20,579,580],{},[12,581,582],{},"Learning compounds!",[12,584,585,586,589],{},"因為學習具有複利效果，所以能力的成長曲線呈",[454,587,588],{},"指數增長","，一開始緩緩上升，幾乎是平的，但過了某一個臨界點之後，會近乎垂直地向上攀升。",[12,591,592],{},"這也滿符合事實，當要攻克一個難題時，需要累積不同面向的知識，當知識點連成線之後，就能夠兜出解法解決問題了。",[12,594,595],{},"作者舉了一個老生常談的例子，每天進步 1%，一年後，會進步 37 倍！",[12,597,598],{},"要努力學習這個大家都知道，但困難的地方是，我們常常被淹沒在日常的開發瑣事、隕石一般的 bug 轟炸之中。每天要做的事情都做不完了，要怎麼騰出時間來學習呢？",[12,600,601],{},"在書中，作者舉了一個 Google 的例子，為了提升員工的生產力與創造力，Google 實行了 20% Time，每週空出一天做自己本職工作以外的事情，研究新的技術、做自己有興趣的專案等等。例如 Gmail 就是從 20% Time 中誕生的。",[12,603,604,605,457],{},"但是身為一般公司的員工，不可能每個禮拜空出一天。於是作者建議，我們可以",[454,606,607],{},"每天預留 1 小時的工時，來實行自己的 20% Time",[12,609,610,611,614],{},"關於學習的最後一點，作者建議我們可以從自己感興趣，或是工作上面臨的問題著手研究，因為",[454,612,613],{},"動機","永遠是持續一項行動最重要的元素。",[567,616,618],{"id":617},"invest-in-iteration-speed","Invest in iteration speed",[12,620,621,622,457],{},"第二個 high-leverage activity 是加速處理重複事務的速度。這和決定是否要將一段 code 寫成一個 function 的判斷方式一樣，當一件事情重複做第二次的時候，你就應該想辦法",[454,623,624],{},"讓第三次作業能夠自動化地進行",[12,626,627],{},"在作者問了每個 CTO，什麼事情造就了有效率的工程師，使他們有別於普通的工程師的時候，他們回答：「會投資時間自己寫一些自動化小工具的工程師，往往效率都是最高的。」",[12,629,630],{},"這裡說的小工具，小到 shell script，大到整個 CI/CD 的自動化基礎建設，都包含在內。",[12,632,633],{},"作者舉例，之前他在 Quora 工作時，每天平均會部署 40～50 次，可以想見如果沒有 CI/CD 的自動化流程，會花費多麼龐大的時間。",[12,635,636,637,640],{},"許多矽谷的大公司都有專門的 team 在打造內部開發工具，像是 facebook 開發了 React.js。作者說：「",[454,638,639],{},"我們都很想成為某個新潮 framework 的作者，但其實，從每天的開發日常，就可以開始了","！」",[567,642,644],{"id":643},"validate-your-ideas-aggressively-and-iteratively","Validate your ideas aggressively and iteratively",[12,646,647],{},"第三個 high-leverage activity 是盡量在進到實作的階段之前，就先驗證 feature 的可行性，避免浪費不必要的時間以及人力。",[12,649,650],{},"舉例來說，Etsy 把產品搜尋結果頁面改成可以無限捲動。在上線之前，他們做了 A/B test，發現點擊率和轉換率各自下跌了 10% 和 25%。因此，這個功能最後根本無法上線，白白浪費了幾個月的時間和人力。",[12,652,653,654,657,658,661],{},"有了這次的經驗，Esty 在修改產品內容頁面的時候，採取",[454,655,656],{},"漸進式","的做法，先將想做的 feature 拆解成幾個",[454,659,660],{},"可以驗證的前提假設","，確認對產品有幫助之後，才真的開始開發。",[12,663,664,665,668],{},"作者說，在一個專案裡，",[454,666,667],{},"越是不確定、有風險的事情，越要在第一時間執行","，避免後續做白工。",[567,670,672],{"id":671},"minimize-operational-burden","Minimize operational burden",[12,674,675,676,679],{},"第四個 high-leverage activity 是要盡量降低日常維護的成本，作者在演講中著重在",[454,677,678],{},"複雜度 complexity"," 的討論上。",[12,681,682],{},"當 Instagram 被 facebook 收購的時候，服務著 4000 萬的使用者，員工卻只有 13 人，其中只有 5 位是工程師。無論從什麼角度來看，他們絕對是一個超級有效率的團隊。",[12,684,685,686,689],{},"作者訪問他們的 CTO，是什麼造就了這一切？CTO 的回答是：「我們",[454,687,688],{},"只採取最簡單的做法來解決問題","。工程師們互相詰問，確認不會增加後續維護的成本之後，才會進行開發。」",[12,691,692],{},"作者說複雜度的影響，從小至大都可能存在。",[20,694,695],{},[12,696,697],{},"code complexity -> system complexity -> product complexity -> organization complexity。",[12,699,700],{},"複雜的 code 會增加工程師的理解和互相溝通的成本、系統的複雜度會增加維護的成本、產品功能的複雜度越高，會讓未來開發的功能的難度增加、甚至是組織上的複雜度，都會影響到開發團隊的效率。",[12,702,703],{},"作者有一次在夏威夷休假，但是剛好有一個只有他懂的系統出問題，而火山上面沒有網路可以處理 bug，於是他就直接變成 single point of failure 了⋯⋯",[12,705,706,707,710],{},"於是作者開始重視 ",[454,708,709],{},"mentorship","，製作詳盡的 on boarding 文件和流程。原本入職三個月的工程師還在理解 code base，現在剛入職的工程師，在第一個禮拜就可以開始貢獻 production。這真的是非常巨大的效率改善！",[567,712,714],{"id":713},"building-a-great-engineering-culture","Building a great engineering culture",[12,716,717,718,721],{},"第五個 high-leverage activity 是建立良好的開發團隊文化。工程師們都想在聊好的環境中工作，",[454,719,720],{},"專注於 leverage activities，會成為一個正向循環","，讓效率推進越來越順手。",[12,723,724],{},"最後是一些 Q&A：",[567,726,728],{"id":727},"q-寫測試雖然必要但是很花時間有沒有更有效率的寫測試方法","Q: 寫測試雖然必要，但是很花時間，有沒有更有效率的寫測試方法？",[12,730,731,732,735],{},"A: 可以",[454,733,734],{},"先確保重要的環節都有測試覆蓋","，在頻繁的改動下不會出錯為目標。",[12,737,738],{},"整個系統不一定要有 100% 的 test coverage，在很少用到的地方寫測試，有時候可能是一種浪費。",[567,740,742],{"id":741},"q-你提到的例子都是新創公司或規模不大的公司關於減低複雜度有沒有在大公司也適用的方法呢","Q: 你提到的例子都是新創公司或規模不大的公司，關於減低複雜度，有沒有在大公司也適用的方法呢？",[12,744,745],{},"A: 新創公司的好處是大家容易直接溝通，但大公司也有它的優點，例如容易取得歷史數據。",[12,747,748,749,752],{},"以 Google 來說，它是一間非常 Data-driven 的公司，所以可以",[454,750,751],{},"讓數據說話，影響決策者","做出 leverage activities。",[244,754,755],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":38,"searchDepth":39,"depth":39,"links":757},[758,759,760,761,762,763,764],{"id":569,"depth":141,"text":570},{"id":617,"depth":141,"text":618},{"id":643,"depth":141,"text":644},{"id":671,"depth":141,"text":672},{"id":713,"depth":141,"text":714},{"id":727,"depth":141,"text":728},{"id":741,"depth":141,"text":742},"/images/effective-engineer.jpg","在傍晚吃飯時間，看著 VSCode 上抽象再抽象的程式碼、Terminal 上惱人的錯誤訊息，這時 Slack 又跳出通知，有緊急的 Bug 票需要解決。螢幕右上角的時鐘，不知道什麼時候已經又過了一小時。明明下班時間都已經到了，今天的進度卻才剛開始沒多久。這時候你不禁感嘆，上班就和爬山一樣，下班路比上班難。",[],{"readingTime":214},"/threads/articles/effective-engineer-talks-at-google",[],"2023-05-11",{"title":447,"description":766},"effective-engineer-talks-at-google","threads/articles/effective-engineer-talks-at-google","每天預留 1 小時的工時，來實行自己的 20% Time。",[777,778],"effective engineer","high leverage","ns_O1uYxzH24KU29S8VH6qdBCwQTjy11MmCTogKBlwo",{"id":781,"title":782,"animated":7,"body":783,"client":41,"cover":793,"css_code":41,"description":787,"extension":42,"html_code":41,"images":794,"is_announcement":7,"is_pinned":7,"is_published":44,"key_points":41,"lang":41,"meta":795,"navigation":44,"order":41,"path":796,"photos":797,"published_at":799,"reading_time":41,"related":41,"role":41,"seo":800,"slug":801,"source_hash":41,"status":41,"stem":802,"summary":803,"tags":804,"tech_stack":41,"translation_of":41,"type":808,"url":41,"video_url":41,"__hash__":809},"threads/threads/gallery/tokyo-wide-sanpo.md","東京廣域散步",{"type":9,"value":784,"toc":791},[785,788],[12,786,787],{},"四月的東京，上野公園的染井吉野正盛開。",[12,789,790],{},"人群與花瓣一起在風中飄散，每年此刻，這座城市都暫時把它的效率感放下。",{"title":38,"searchDepth":39,"depth":39,"links":792},[],"/images/gallery/uzawaechigo.jpeg",[],{},"/threads/gallery/tokyo-wide-sanpo",[793,798],"/images/gallery/urikamome.jpg","2023-04-21",{"title":782,"description":787},"tokyo-wide-sanpo","threads/gallery/tokyo-wide-sanpo","2023 年春季剪影",[805,806,807],"旅遊","東京","春天","gallery","Dvppaz0RPv2sCHIbs0tz3Leyp8_nylkgiC_g4drF7hk",{"id":811,"title":812,"animated":7,"body":813,"client":41,"cover":846,"css_code":41,"description":817,"extension":42,"html_code":41,"images":847,"is_announcement":7,"is_pinned":7,"is_published":44,"key_points":41,"lang":41,"meta":848,"navigation":44,"order":41,"path":849,"photos":850,"published_at":851,"reading_time":41,"related":41,"role":41,"seo":852,"slug":853,"source_hash":41,"status":41,"stem":854,"summary":855,"tags":856,"tech_stack":41,"translation_of":41,"type":342,"url":41,"video_url":41,"__hash__":859},"threads/threads/articles/sankahakuu.md","東京散步 ｜ 両国篇",{"type":9,"value":814,"toc":844},[815,818,821,824,830,833,836,839],[12,816,817],{},"一直以來最喜歡的北齋浮世繪作品都是《神奈川沖浪裏》",[12,819,820],{},"因為那開出萬千白花的浪尖，生動得彷彿是許多小手想將單薄的小船攫走。",[12,822,823],{},"這彷彿讓我看見，北齋畫了一輩子，終於在年老時遇見了普魯士藍，得以在畫布上自由揮灑江戶的海與天空的狂喜。",[12,825,826,827,457],{},"但今天在北齋美術館，看到了《山下白雨》這幅作品。一下子也躍升為我",[454,828,829],{},"最喜歡的北齋作品",[12,831,832],{},"在《山下白雨》中，山腳下烏雲密佈、雷電交加，而富士山山頂卻穿越雲雨，聳立在晴朗的天空中。",[12,834,835],{},"在有限的畫布上，北齋為了表現出富士山的雄偉，用了天氣作為對比，襯托出立體的高度。",[12,837,838],{},"在好的作品中，這種巧思好像無處不在。文學、攝影、繪畫、音樂，都有各自的方式。",[20,840,841],{},[12,842,843],{},"我想，能將心中的想像，用手邊的工具實現的人。放在什麼時代，都是最厲害的吧！",{"title":38,"searchDepth":39,"depth":39,"links":845},[],"/images/sankahakuu.png",[],{"readingTime":214},"/threads/articles/sankahakuu",[],"2023-03-17",{"title":812,"description":817},"sankahakuu","threads/articles/sankahakuu","我彷彿看見，北齋畫了一輩子，終於在年老時遇見了普魯士藍，得以在畫布上自由揮灑江戶的海與天空的狂喜。",[857,858],"葛飾北齋","富嶽三十六景","QDTUujuO4YttNiwcqEQuzgLHg5sk0HMrdKWTh4-Z7m8",{"id":861,"title":862,"animated":7,"body":863,"client":41,"cover":952,"css_code":41,"description":38,"extension":42,"html_code":41,"images":953,"is_announcement":7,"is_pinned":7,"is_published":44,"key_points":41,"lang":41,"meta":954,"navigation":44,"order":41,"path":955,"photos":956,"published_at":957,"reading_time":41,"related":41,"role":41,"seo":958,"slug":959,"source_hash":41,"status":41,"stem":960,"summary":961,"tags":962,"tech_stack":41,"translation_of":41,"type":342,"url":41,"video_url":41,"__hash__":963},"threads/threads/articles/liuyi-english-school.md","孩子們的南陽街與大人們的補習班",{"type":9,"value":864,"toc":950},[865,870,873,876,879,882,885,892,895,898,901,904,907,910,915,930,937],[20,866,867],{},[12,868,869],{},"「接下來的大學四年，將會是你們人生中過最爽的日子。」",[12,871,872],{},"Wayne 老師堅定的語氣，與其說是在向我們預告，更像是在回憶。「你們會發現，高中時期曾經覺得很厲害的大型成發、深刻的戀愛，原來是那麼地小兒科。在大學裡，永遠有更令你興奮的事情可以去做。你們要非常珍惜這段時光。因為，人生最爽、最無憂無慮的時候，可能真的就是大學這四年了。」",[12,874,875],{},"這是我高三的這一年中，在劉毅英文記憶最深刻的一句話。大我們 10 歲的 Wayne 老師，對高中生來說，不是一個長輩，而是同儕般的存在。他在課堂間偶爾閒談起的回憶，是我們在書堆中仰望的未來。升上大學以後，就是個大人了。自由彷彿唾手可得，那會是什麼樣的感覺呢?",[12,877,878],{},"《孩子們的南陽街與大人們的補習班》是一本記錄高中生們的青春歲月、也報導大人們的補習班事業的回憶錄。最初，我是在台下聽講的學生。本書出版後，我是該開始 ( 但拖延 ) 思考未來的大三生。再次閱讀，我已工作兩年並且轉職到理想跑到的上班族。每次閱讀本書都有不同的體驗，有種少年聽雨的感覺。",[12,880,881],{},"最大的不同，是初次閱讀時，我完全把焦點放在學生的部分，覺得這個學生好奇特、這個學生的煩惱我也有等等。而再次閱讀時，我則不由自主地關注 Wayne 老師在補習班的經歷，周旋於管理階層之間的為難。",[12,883,884],{},"同時也意識到了，當年滿心期待的每週三晚上，讓我感到能夠窺見大人自由世界的模考班解題時間，其實是扎扎實實地，經歷了許多苦練、苦澀，甚至是自我懷疑，才得以展現在我們面前。出社會工作了以後，才注意到光鮮亮麗背後的辛苦付出。",[12,886,887,888,891],{},"本書的作者 蔡世偉 ",[112,889,890],{},"@waynetsai1984"," 為補習班老師、 知名英文譯者。曾經翻譯過的書籍有：《原子習慣》、《我是GaryVee》、《麥可喬丹傳》、《曼巴精神》、《每一天的覺醒》等等。",[12,893,894],{},"本書一共分為三個部分，分別是「那些學生教我的事」、「補習班的那些事」以及隱藏版內容「課間閒談」。",[12,896,897],{},"「那些學生教我的事」是 Wayne 老師在補習班中所教到的奇葩學生，有母管嚴的森哥、熱愛山本五十六的軍事迷、考試與烘焙都臻至頂尖的北一女甜點師。每一位被提及的高中生，在努力符合學測、指考這個品管標準的，高中教育標準化製造流程下，都顯得特別的突出。突出的原因可能是有特別熱愛的興趣、特別擅長的技能，甚至是特別地聽話、不反抗。看完這部分後，不禁想到 Pink Floyd 樂團的 Another Brick In The Wall。教育究竟是讓我們變得更好，還是一種篩選機制呢?",[12,899,900],{},"「補習班的那些事」紀錄了 Wayne 老師在劉毅英文中的經歷與遭遇。從入行到成為補習班王牌老師。從光鮮亮麗的講台到下課的備課時間、再到與補習班管理層間的周旋等等。其中讓我印象最深刻的是補習班老闆劉毅曾經對 Wayne 老師說：「我討厭你！」。即便如此，Wayne 老師還是在書中表示他自己非常尊敬劉毅老師。其中最大的原因是，他被劉毅教英文的熱情所感動。劉毅曾經在講台上說過：「萬一我突然死掉了也沒有關係，我已經把講義都編好了，會有老師代替我上下去。」",[12,902,903],{},"我自己在高中補習的時候，每學期都會拿到劉毅出版社新編的單字書、文法書、句型書。雖然實際上沒有多少人看，但這種對於自己在乎的事情，展現捨我其誰的態度去做的精神，也深刻地感動到了我。",[12,905,906],{},"「課間閒談」節錄了十幾句 Wayne 老師在閱讀中深獲啟發的文字，並且加上他的人生經驗作為印證，是本書中我最喜歡的部分。日本出版社幻冬社的老闆見城徹曾經說過「重要的不是書中寫了什麼，而是自己如何感受。」在讀課間閒談時，我的腦中突然浮現了這句話。",[12,908,909],{},"Wayne 老師熱愛閱讀，並且藉由自己的人生經驗和作者們對話。閱讀《孩子們的南陽街與大人們的補習班》可以看見那些走在我們人生前面的人，反覆思索的問題與回答。同時也能知道，不是只有我一個人有這些煩惱。雖然我們必須靠自己過好自己的人生，但是我們並不孤獨。😉",[20,911,912],{},[12,913,914],{},"The reading of all good books is like conversation with the finest men of past centuries. - René Descartes\n閱讀好書，如同與過往世代的人傑們對話。 - 勒內·笛卡兒",[12,916,917,918,921,922,925,926,929],{},"電子化的浪潮席捲而來，每個人都無法置身事外。選擇讀墨帶你在文字之海中乘風破浪吧！點擊以下連結",[454,919,920],{},"註冊讀墨會員","，30 天內首購享 ",[454,923,924],{},"79 折","，60 天內單筆訂單滿額再送 ",[454,927,928],{},"$100 購書金","！",[12,931,932,933],{},"立即註冊 👉 ",[235,934,935],{"href":935,"rel":936},"http://moo.im/i/DbsBO",[385],[12,938,939,940,945,946],{},"立即購買",[235,941,944],{"href":942,"rel":943},"https://readmoo.com/book/210208251000101",[385],"《孩子們的南陽街與大人們的補習班》","喚起那些憧憬大人世界的夏日回憶 👉 ",[235,947,948],{"href":948,"rel":949},"https://moo.im/a/3fglvC",[385],{"title":38,"searchDepth":39,"depth":39,"links":951},[],"/images/wayne-english-teacher.png",[],{},"/threads/articles/liuyi-english-school",[],"2021-09-05",{"title":862,"description":38},"liuyi-english-school","threads/articles/liuyi-english-school","升上大學以後，就是個大人了。自由彷彿唾手可得，那會是什麼樣的感覺呢?",[],"K2_vsCLpzdn_w9T0inU1x6Qr3kBq20C9lIe218mG3oc",{"id":965,"title":966,"animated":44,"body":967,"client":41,"cover":41,"css_code":971,"description":38,"extension":42,"html_code":972,"images":973,"is_announcement":7,"is_pinned":7,"is_published":44,"key_points":41,"lang":41,"meta":974,"navigation":44,"order":41,"path":975,"photos":976,"published_at":977,"reading_time":41,"related":41,"role":41,"seo":978,"slug":979,"source_hash":41,"status":41,"stem":980,"summary":981,"tags":982,"tech_stack":41,"translation_of":41,"type":986,"url":41,"video_url":41,"__hash__":987},"threads/threads/cssart/face-mask.md","口罩圖鑑",{"type":9,"value":968,"toc":969},[],{"title":38,"searchDepth":39,"depth":39,"links":970},[],".mask-art * {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n  text-decoration: none;\n  list-style-type: none;\n  letter-spacing: 4px;\n  font-size: 20px;\n}\n\n.mask-art {\n  background-color: #a98e7c;\n  color: #ddd;\n  padding: 20px 0;\n}\n\n.mask-art .container {\n  margin: 0 auto;\n  width: 700px;\n  max-width: 100%;\n}\n\n.mask-art .prod-wrapper {\n  width: 100%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n\n.mask-art .prod-name {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  text-align: center;\n  padding: 30px 0;\n  margin: 20px 30px;\n  width: 30%;\n}\n\n.mask-art .mask-wrapper {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  text-align: center;\n  padding: 30px 0;\n  margin: 20px 0;\n  width: 40%;\n}\n\n.mask-art .desc {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  text-align: left;\n  margin: 20px 0 20px 70px;\n  width: 30%;\n  font-size: 16px;\n}\n\n/* 醫療口罩 */\n.mask-art .mask {\n  position: relative;\n  width: 200px;\n  height: 90px;\n  background-color: #87f0df;\n  border: 3px dotted #eee;\n  border-top: 4px solid #eee;\n  border-radius: 2px;\n  transition: all 0.7s;\n}\n\n.mask-art .mask:hover {\n  transform: translate(0, -5px);\n  box-shadow: 0px 20px 10px rgba(0, 0, 0, 0.4);\n}\n\n.mask-art .mask .iron-line {\n  margin: 6px auto;\n  width: 190px;\n  border: 2px solid #eee;\n}\n\n.mask-art .mask .line {\n  margin: 20px auto;\n  width: 190px;\n  border: 1px solid #eee;\n}\n\n.mask-art .mask::before {\n  content: \"\";\n  display: block;\n  width: 50px;\n  height: 80px;\n  position: absolute;\n  border: 2px solid #eee;\n  border-right: 2px dotted #eee;\n  left: -50px;\n  border-radius: 40px 0px 0px 40px;\n}\n\n.mask-art .mask::after {\n  content: \"\";\n  display: block;\n  width: 50px;\n  height: 80px;\n  position: absolute;\n  border: 2px solid #eee;\n  border-left: 2px dotted #eee;\n  top: 0;\n  right: -50px;\n  border-radius: 0px 40px 40px 0px;\n}\n\n/* 活性碳口罩 */\n.mask-art .carbon-mask {\n  position: relative;\n  width: 200px;\n  height: 90px;\n  background-image: radial-gradient(#778683 70%, #aab3b2 30%);\n  background-size: 2px 2px;\n  border: 3px dotted #ddd;\n  border-top: 4px solid #ddd;\n  border-radius: 2px;\n  transition: all 0.7s;\n}\n\n.mask-art .carbon-mask:hover {\n  transform: translate(0, -5px);\n  box-shadow: 0px 20px 10px rgba(0, 0, 0, 0.4);\n}\n\n.mask-art .carbon-mask .iron-line {\n  margin: 6px auto;\n  width: 190px;\n  border: 2px solid #ddd;\n}\n\n.mask-art .carbon-mask .line {\n  margin: 20px auto;\n  width: 190px;\n  border: 1px solid #aab3b2;\n}\n\n.mask-art .carbon-mask::before {\n  content: \"\";\n  display: block;\n  width: 50px;\n  height: 80px;\n  position: absolute;\n  border: 2px solid #eee;\n  border-right: 2px dotted #eee;\n  left: -50px;\n  border-radius: 40px 0px 0px 40px;\n}\n\n.mask-art .carbon-mask::after {\n  content: \"\";\n  display: block;\n  width: 50px;\n  height: 80px;\n  position: absolute;\n  border: 2px solid #eee;\n  border-left: 2px dotted #eee;\n  top: 0;\n  right: -50px;\n  border-radius: 0px 40px 40px 0px;\n}\n\n/* N95 口罩 */\n.mask-art .n95-mask {\n  position: relative;\n  width: 150px;\n  height: 150px;\n  background-image: radial-gradient(#eee, rgb(177, 177, 177));\n  background-size: cover;\n  border: 3px solid #ccc;\n  border-radius: 75px 40px 75px 75px;\n  transform: rotate(-45deg);\n  transition: 0.7s;\n}\n\n.mask-art .n95-mask:hover {\n  transform: translate(0, -10px) rotate(-45deg);\n  box-shadow: 0px 20px 10px rgba(0, 0, 0, 0.4);\n}\n\n.mask-art .n95-mask .iron-line-left {\n  position: absolute;\n  top: 8%;\n  left: 22%;\n  margin: 6px auto;\n  width: 90px;\n  border: 2px solid #ddd;\n  transform: rotate(5deg);\n}\n\n.mask-art .n95-mask .iron-line-right {\n  position: absolute;\n  top: 42%;\n  left: 54%;\n  margin: 6px auto;\n  width: 90px;\n  border: 2px solid #ddd;\n  transform: rotate(85deg);\n}\n\n.mask-art .n95-mask .filter {\n  position: absolute;\n  top: 6px;\n  left: 16px;\n  margin: 20px auto;\n  width: 30px;\n  height: 30px;\n  background-image: radial-gradient(#ddd 60%, rgb(177, 177, 177) 40%);\n  background-size: contain;\n  border: 2px dotted #ddd;\n  border-radius: 50%;\n}\n\n.mask-art .n95-mask .mark {\n  position: absolute;\n  top: 88px;\n  left: 2%;\n  width: 90px;\n  height: 20px;\n  background-color: #ddd;\n  border: 1px dotted #aab3b2;\n  transform: rotate(45deg);\n  font-size: 10px;\n  color: #666;\n  letter-spacing: 0;\n  font-weight: 600;\n}\n\n.mask-art .n95-mask::before {\n  content: \"\";\n  display: block;\n  width: 50px;\n  height: 80px;\n  position: absolute;\n  border: 2px solid #eee;\n  border-right: 2px dotted #eee;\n  top: -32px;\n  left: -16px;\n  border-radius: 40px 0px 0px 40px;\n  transform: rotate(45deg);\n}\n\n.mask-art .n95-mask::after {\n  content: \"\";\n  display: block;\n  width: 50px;\n  height: 80px;\n  position: absolute;\n  border: 2px solid #eee;\n  border-left: 2px dotted #eee;\n  top: 87px;\n  right: -17px;\n  border-radius: 0px 40px 40px 0px;\n  transform: rotate(45deg);\n}\n\n/* 國王的口罩（買不到） */\n.mask-art .no-mask {\n  position: relative;\n  width: 200px;\n  height: 90px;\n  background-color: transparent;\n  border: 1px dotted #eee;\n  border-radius: 2px;\n  transition: all 0.7s;\n}\n\n.mask-art .no-mask:hover {\n  transform: translate(0, -5px);\n}\n\n.mask-art .no-mask .line {\n  margin: 30px auto;\n  width: 190px;\n  color: #444;\n  text-decoration: line-through;\n}\n\n.mask-art .no-mask::before {\n  content: \"\";\n  display: block;\n  width: 50px;\n  height: 80px;\n  position: absolute;\n  border: 1px dotted #eee;\n  top: 2px;\n  left: -50px;\n  border-radius: 40px 0px 0px 40px;\n}\n\n.mask-art .no-mask::after {\n  content: \"\";\n  display: block;\n  width: 50px;\n  height: 80px;\n  position: absolute;\n  border: 1px dotted #eee;\n  top: 2px;\n  right: -50px;\n  border-radius: 0px 40px 40px 0px;\n}\n\n@media (max-width: 768px) {\n  .mask-art .container {\n    width: 90%;\n  }\n\n  .mask-art .prod-wrapper {\n    flex-direction: column;\n    margin: 0 auto;\n  }\n\n  .mask-art .prod-name {\n    width: 100%;\n    margin: 20px auto 0;\n    padding: 0;\n  }\n\n  .mask-art .mask-wrapper {\n    width: 100%;\n    margin-bottom: 30px;\n    padding: 0;\n  }\n\n  .mask-art .desc {\n    width: 60%;\n    margin: 0 auto 30px;\n  }\n}\n","\u003Cdiv class=\"mask-art\">\n  \u003Cdiv class=\"container\">\n    \u003Cdiv class=\"prod-wrapper\">\n      \u003Cdiv class=\"prod-name\">醫療口罩\u003C/div>\n      \u003Cdiv class=\"mask-wrapper\">\n        \u003Cdiv class=\"mask\">\n          \u003Cdiv class=\"iron-line\">\u003C/div>\n          \u003Cdiv class=\"line\">\u003C/div>\n          \u003Cdiv class=\"line\">\u003C/div>\n          \u003Cdiv class=\"line\">\u003C/div>\n        \u003C/div>\n      \u003C/div>\n      \u003Cdiv class=\"desc\">可有效阻擋大部分飛沫，適合一般民眾配戴。\u003C/div>\n    \u003C/div>\n    \u003Cdiv class=\"prod-wrapper\">\n      \u003Cdiv class=\"prod-name\">活性碳口罩\u003C/div>\n      \u003Cdiv class=\"mask-wrapper\">\n        \u003Cdiv class=\"carbon-mask\">\n          \u003Cdiv class=\"iron-line\">\u003C/div>\n          \u003Cdiv class=\"line\">\u003C/div>\n          \u003Cdiv class=\"line\">\u003C/div>\n          \u003Cdiv class=\"line\">\u003C/div>\n        \u003C/div>\n      \u003C/div>\n      \u003Cdiv class=\"desc\">可吸附異味，大多數無法隔絕飛沫，沒有防疫效果。\u003C/div>\n    \u003C/div>\n    \u003Cdiv class=\"prod-wrapper\">\n      \u003Cdiv class=\"prod-name\">N95 口罩\u003C/div>\n      \u003Cdiv class=\"mask-wrapper\">\n        \u003Cdiv class=\"n95-mask\">\n          \u003Cdiv class=\"iron-line-left\">\u003C/div>\n          \u003Cdiv class=\"iron-line-right\">\u003C/div>\n          \u003Cdiv class=\"filter\">\u003C/div>\n          \u003Ci class=\"mark\"> Warning 3M\u003C/i>\n        \u003C/div>\n      \u003C/div>\n      \u003Cdiv class=\"desc\">可有效阻絕 95％ 以上的病毒，適合長時間接觸患者的第一線醫療人員配戴。\u003C/div>\n    \u003C/div>\n    \u003Cdiv class=\"prod-wrapper\">\n      \u003Cdiv class=\"prod-name\">國王的口罩\u003C/div>\n      \u003Cdiv class=\"mask-wrapper\">\n        \u003Cdiv class=\"no-mask\">\n          \u003Cdiv class=\"iron-line\">\u003C/div>\n          \u003Cdiv class=\"line\">買不到\u003C/div>\n        \u003C/div>\n      \u003C/div>\n      \u003Cdiv class=\"desc\">身體健康、從事戶外運動，現階段可以不用戴口罩。\u003C/div>\n    \u003C/div>\n  \u003C/div>\n\u003C/div>\n",[],{},"/threads/cssart/face-mask",[],"2020-02-06",{"title":966,"description":38},"face-mask","threads/cssart/face-mask","2020 年口罩實名制上路，用純 CSS 畫下那個全民搶口罩的年代：醫療口罩、活性碳口罩、N95、還有「買不到」的國王口罩。",[983,984,985],"CSS Art","Pure CSS","2020","cssart","ExrxwA1mT318QSStUg-lJCJm6bvqoqtkMmq2lh48txA",{"id":989,"title":990,"animated":44,"body":991,"client":41,"cover":41,"css_code":1023,"description":995,"extension":42,"html_code":1024,"images":1025,"is_announcement":7,"is_pinned":7,"is_published":44,"key_points":41,"lang":41,"meta":1026,"navigation":44,"order":41,"path":1027,"photos":1028,"published_at":1029,"reading_time":41,"related":41,"role":41,"seo":1030,"slug":1031,"source_hash":41,"status":41,"stem":1032,"summary":1033,"tags":1034,"tech_stack":41,"translation_of":41,"type":986,"url":41,"video_url":41,"__hash__":1037},"threads/threads/cssart/bubble-tea.md","珍珠奶茶手搖杯",{"type":9,"value":992,"toc":1021},[993,996,999,1010,1013,1016],[12,994,995],{},"Vue.js 櫻花珍珠手搖杯，現在就來為自己調一杯珍奶吧！",[12,997,998],{},"你可以：",[70,1000,1001,1004,1007],{},[73,1002,1003],{},"選擇杯型（保溫杯、手搖杯、咖啡杯、馬克杯）",[73,1005,1006],{},"調整各種成分的比例（奶蓋、牛奶、綠茶、紅茶）",[73,1008,1009],{},"增減珍珠數量",[12,1011,1012],{},"本點餐系統提供 4 種飲品、4 款杯子，供顧客自由搭配選用。",[12,1014,1015],{},"建議選用環保杯，因為",[20,1017,1018],{},[12,1019,1020],{},"地球已經太擁擠了，再也容不下一點塑膠！",{"title":38,"searchDepth":39,"depth":39,"links":1022},[],".bubble-tea-container {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  min-height: 200px;\n  background-color: #698474;\n  padding: 24px;\n}\n.label { color: #e5e4cc; margin-top: 12px; font-size: 14px; }\n.beverage { position: relative; margin-top: 30px; }\n.cup {\n  width: 60px; height: 100px; margin: 0 auto;\n  border: 4px solid #fff; border-top: none;\n  padding-top: 5px; position: relative;\n}\n.ingradients {\n  width: 100%; position: absolute; bottom: 0;\n  background-color: #9dab86; overflow: hidden; font-size: 0;\n}\n.thermos-height { max-height: 80px; }\n.bubbles {\n  width: 10px; height: 10px; background-color: #fbc1bc;\n  border-radius: 5px; display: inline-block;\n}\n.green-tea { width: 100%; height: 25px; background-color: #9dab86; }\n.milk { width: 100%; height: 25px; background-color: #f7d8bb; }\n.foam { width: 100%; height: 10px; background-color: #eee; }\n.black-tea { width: 100%; height: 0; background-color: #801a08; }\n.box { width: 100%; height: 10px; position: absolute; top: 0; overflow: hidden; z-index: 1; }\n.wave {\n  position: absolute; bottom: 47%; left: -147%;\n  background: #698474; width: 222px; height: 222px;\n  transform-origin: 50% 48%; border-radius: 43%;\n  animation: drift 5000ms infinite linear;\n}\n.wave.-three { animation: drift 7000ms infinite linear; }\n.wave.-two { animation: drift 9000ms infinite linear; opacity: .1; background: #f8b195; }\n@keyframes drift { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }\n.thermos { border-top: 4px solid #fff; border-radius: 2px; }\n.handle.top {\n  border: 4px solid #fff; width: 60px; height: 20px;\n  position: relative; left: 50%; transform: translateX(-50%); border-radius: 2px;\n}\n.handle.top::after {\n  content: \"\"; display: block; width: 10px; height: 20px;\n  border: 2px solid #fff; position: absolute; left: 60%; top: 40%; border-radius: 4px;\n}\n","\u003Cdiv class=\"bubble-tea-container\">\n  \u003Cdiv class=\"beverage\">\n    \u003Cdiv class=\"handle top\">\u003C/div>\n    \u003Cdiv class=\"cup thermos\">\n      \u003Cdiv class=\"ingradients thermos-height\">\n        \u003Cdiv class=\"box\">\n          \u003Cdiv class=\"wave -one\">\u003C/div>\n          \u003Cdiv class=\"wave -two\">\u003C/div>\n          \u003Cdiv class=\"wave -three\">\u003C/div>\n        \u003C/div>\n        \u003Cdiv class=\"foam\" style=\"height: 10px;\">\u003C/div>\n        \u003Cdiv class=\"milk\" style=\"height: 25px;\">\u003C/div>\n        \u003Cdiv class=\"green-tea\" style=\"height: 25px;\">\u003C/div>\n        \u003Cdiv class=\"black-tea\" style=\"height: 0px;\">\u003C/div>\n        \u003Cdiv class=\"bubbles\">\u003C/div>\n        \u003Cdiv class=\"bubbles\">\u003C/div>\n        \u003Cdiv class=\"bubbles\">\u003C/div>\n        \u003Cdiv class=\"bubbles\">\u003C/div>\n        \u003Cdiv class=\"bubbles\">\u003C/div>\n      \u003C/div>\n    \u003C/div>\n  \u003C/div>\n  \u003Cp class=\"label\">四季奶青加珍珠\u003C/p>\n\u003C/div>\n",[],{},"/threads/cssart/bubble-tea",[],"2019-12-31",{"title":990,"description":995},"bubble-tea","threads/cssart/bubble-tea","Vue 3 互動式珍奶模擬器 — 調整奶蓋、牛奶、綠茶、紅茶、珍珠的比例，選擇你喜歡的杯型，調製屬於自己的一杯珍奶。",[983,1035,1036],"Vue 3","Interactive","xth75bDYQItZEPv6qNk6Xo9_cUylJLDTZ-9I1XXDU_Q",{"id":1039,"title":1040,"animated":7,"body":1041,"client":41,"cover":41,"css_code":41,"description":38,"extension":42,"html_code":41,"images":1069,"is_announcement":7,"is_pinned":7,"is_published":44,"key_points":41,"lang":41,"meta":1070,"navigation":44,"order":41,"path":1071,"photos":1072,"published_at":1073,"reading_time":41,"related":41,"role":41,"seo":1074,"slug":1075,"source_hash":41,"status":41,"stem":1076,"summary":1077,"tags":1078,"tech_stack":41,"translation_of":41,"type":342,"url":41,"video_url":1082,"__hash__":1083},"threads/threads/articles/encounter.md","遇見",{"type":9,"value":1042,"toc":1067},[1043,1048,1051,1054,1057,1059,1061,1064],[20,1044,1045],{},[12,1046,1047],{},"演奏曲沒有歌詞，但是你聽得到。",[12,1049,1050],{},"聽見 冬天的離開\n我在某年某月醒過來\n我想 我等 我期待\n未來卻不能因此安排",[12,1052,1053],{},"陰天 傍晚 車窗外\n未來有一個人在等待\n向左 向右 向前看\n愛要拐幾個彎才來?",[12,1055,1056],{},"我遇見誰 會有怎樣的對白?\n我等的人 他在多遠的未來?\n我聽見風 來自地鐵和人海\n我排著隊 拿著愛的號碼牌",[12,1058,1053],{},[12,1060,1056],{},[12,1062,1063],{},"我往前飛 飛過一片時間海\n我們也曾在愛情裡受傷害\n我看著路 夢的入口有點窄\n我遇見你是最美麗的意外",[12,1065,1066],{},"總有一天 我的謎底會揭開",{"title":38,"searchDepth":39,"depth":39,"links":1068},[],[],{},"/threads/articles/encounter",[],"2019-09-17",{"title":1040,"description":38},"encounter","threads/articles/encounter","ukulele version",[1079,1080,1081],"ukulele","fingerstyle","cover","https://www.youtube.com/watch?v=U5YBtGQbHu4","3Cgz4DxVBPf2Wl1pQbzJ_kn_9js9-k21Tos9RnixeC4",[1085,1131,1337,1367,1432],{"id":272,"title":273,"animated":7,"body":1086,"client":41,"cover":41,"css_code":41,"description":278,"extension":42,"html_code":41,"images":1126,"is_announcement":7,"is_pinned":7,"is_published":44,"key_points":41,"lang":41,"meta":1127,"navigation":44,"order":41,"path":332,"photos":1128,"published_at":334,"reading_time":41,"related":41,"role":41,"seo":1129,"slug":336,"source_hash":41,"status":41,"stem":337,"summary":338,"tags":1130,"tech_stack":41,"translation_of":41,"type":342,"url":41,"video_url":41,"__hash__":343},{"type":9,"value":1087,"toc":1124},[1088,1090,1092,1094,1096,1098,1100,1102,1104,1106,1108,1110,1112,1114,1116,1118,1120,1122],[12,1089,278],{},[12,1091,281],{},[12,1093,284],{},[12,1095,287],{},[12,1097,290],{},[12,1099,293],{},[12,1101,296],{},[12,1103,299],{},[12,1105,302],{},[12,1107,305],{},[12,1109,308],{},[12,1111,293],{},[12,1113,313],{},[12,1115,316],{},[12,1117,319],{},[12,1119,293],{},[12,1121,324],{},[12,1123,327],{},{"title":38,"searchDepth":39,"depth":39,"links":1125},[],[],{},[],{"title":273,"description":278},[340,341],{"id":446,"title":447,"animated":7,"body":1132,"client":41,"cover":765,"css_code":41,"description":766,"extension":42,"html_code":41,"images":1332,"is_announcement":7,"is_pinned":7,"is_published":44,"key_points":41,"lang":41,"meta":1333,"navigation":44,"order":41,"path":769,"photos":1334,"published_at":771,"reading_time":41,"related":41,"role":41,"seo":1335,"slug":773,"source_hash":41,"status":41,"stem":774,"summary":775,"tags":1336,"tech_stack":41,"translation_of":41,"type":342,"url":41,"video_url":41,"__hash__":779},{"type":9,"value":1133,"toc":1323},[1134,1138,1140,1145,1150,1155,1157,1165,1167,1171,1173,1181,1185,1187,1193,1201,1203,1207,1209,1211,1215,1219,1223,1225,1227,1229,1231,1235,1239,1241,1245,1247,1249,1251,1255,1257,1259,1261,1267,1271,1273,1277,1279,1283,1285,1289,1291,1293,1297,1299,1303,1305,1307,1311,1313,1315,1317,1321],[12,1135,452,1136,457],{},[454,1137,456],{},[12,1139,460],{},[12,1141,463,1142,469],{},[235,1143,468],{"href":466,"rel":1144},[385],[12,1146,472,1147,478],{},[235,1148,477],{"href":475,"rel":1149},[385],[12,1151,481,1152,487],{},[235,1153,486],{"href":484,"rel":1154},[385],[12,1156,490],{},[70,1158,1159,1161,1163],{},[73,1160,495],{},[73,1162,498],{},[73,1164,501],{},[12,1166,504],{},[12,1168,507,1169,511],{},[454,1170,510],{},[12,1172,514],{},[106,1174,1175],{"className":517,"code":518,"language":519,"meta":38,"style":38},[112,1176,1177],{"__ignoreMap":38},[115,1178,1179],{"class":117,"line":118},[115,1180,518],{},[20,1182,1183],{},[12,1184,530],{},[12,1186,533],{},[12,1188,536,1189,540,1191,544],{},[454,1190,539],{},[454,1192,543],{},[106,1194,1195],{"className":517,"code":547,"language":519,"meta":38,"style":38},[112,1196,1197],{"__ignoreMap":38},[115,1198,1199],{"class":117,"line":118},[115,1200,547],{},[12,1202,556],{},[12,1204,559,1205,457],{},[454,1206,562],{},[12,1208,565],{},[567,1210,570],{"id":569},[12,1212,573,1213,577],{},[454,1214,576],{},[20,1216,1217],{},[12,1218,582],{},[12,1220,585,1221,589],{},[454,1222,588],{},[12,1224,592],{},[12,1226,595],{},[12,1228,598],{},[12,1230,601],{},[12,1232,604,1233,457],{},[454,1234,607],{},[12,1236,610,1237,614],{},[454,1238,613],{},[567,1240,618],{"id":617},[12,1242,621,1243,457],{},[454,1244,624],{},[12,1246,627],{},[12,1248,630],{},[12,1250,633],{},[12,1252,636,1253,640],{},[454,1254,639],{},[567,1256,644],{"id":643},[12,1258,647],{},[12,1260,650],{},[12,1262,653,1263,657,1265,661],{},[454,1264,656],{},[454,1266,660],{},[12,1268,664,1269,668],{},[454,1270,667],{},[567,1272,672],{"id":671},[12,1274,675,1275,679],{},[454,1276,678],{},[12,1278,682],{},[12,1280,685,1281,689],{},[454,1282,688],{},[12,1284,692],{},[20,1286,1287],{},[12,1288,697],{},[12,1290,700],{},[12,1292,703],{},[12,1294,706,1295,710],{},[454,1296,709],{},[567,1298,714],{"id":713},[12,1300,717,1301,721],{},[454,1302,720],{},[12,1304,724],{},[567,1306,728],{"id":727},[12,1308,731,1309,735],{},[454,1310,734],{},[12,1312,738],{},[567,1314,742],{"id":741},[12,1316,745],{},[12,1318,748,1319,752],{},[454,1320,751],{},[244,1322,755],{},{"title":38,"searchDepth":39,"depth":39,"links":1324},[1325,1326,1327,1328,1329,1330,1331],{"id":569,"depth":141,"text":570},{"id":617,"depth":141,"text":618},{"id":643,"depth":141,"text":644},{"id":671,"depth":141,"text":672},{"id":713,"depth":141,"text":714},{"id":727,"depth":141,"text":728},{"id":741,"depth":141,"text":742},[],{"readingTime":214},[],{"title":447,"description":766},[777,778],{"id":811,"title":812,"animated":7,"body":1338,"client":41,"cover":846,"css_code":41,"description":817,"extension":42,"html_code":41,"images":1362,"is_announcement":7,"is_pinned":7,"is_published":44,"key_points":41,"lang":41,"meta":1363,"navigation":44,"order":41,"path":849,"photos":1364,"published_at":851,"reading_time":41,"related":41,"role":41,"seo":1365,"slug":853,"source_hash":41,"status":41,"stem":854,"summary":855,"tags":1366,"tech_stack":41,"translation_of":41,"type":342,"url":41,"video_url":41,"__hash__":859},{"type":9,"value":1339,"toc":1360},[1340,1342,1344,1346,1350,1352,1354,1356],[12,1341,817],{},[12,1343,820],{},[12,1345,823],{},[12,1347,826,1348,457],{},[454,1349,829],{},[12,1351,832],{},[12,1353,835],{},[12,1355,838],{},[20,1357,1358],{},[12,1359,843],{},{"title":38,"searchDepth":39,"depth":39,"links":1361},[],[],{"readingTime":214},[],{"title":812,"description":817},[857,858],{"id":861,"title":862,"animated":7,"body":1368,"client":41,"cover":952,"css_code":41,"description":38,"extension":42,"html_code":41,"images":1427,"is_announcement":7,"is_pinned":7,"is_published":44,"key_points":41,"lang":41,"meta":1428,"navigation":44,"order":41,"path":955,"photos":1429,"published_at":957,"reading_time":41,"related":41,"role":41,"seo":1430,"slug":959,"source_hash":41,"status":41,"stem":960,"summary":961,"tags":1431,"tech_stack":41,"translation_of":41,"type":342,"url":41,"video_url":41,"__hash__":963},{"type":9,"value":1369,"toc":1425},[1370,1374,1376,1378,1380,1382,1384,1388,1390,1392,1394,1396,1398,1400,1404,1412,1417],[20,1371,1372],{},[12,1373,869],{},[12,1375,872],{},[12,1377,875],{},[12,1379,878],{},[12,1381,881],{},[12,1383,884],{},[12,1385,887,1386,891],{},[112,1387,890],{},[12,1389,894],{},[12,1391,897],{},[12,1393,900],{},[12,1395,903],{},[12,1397,906],{},[12,1399,909],{},[20,1401,1402],{},[12,1403,914],{},[12,1405,917,1406,921,1408,925,1410,929],{},[454,1407,920],{},[454,1409,924],{},[454,1411,928],{},[12,1413,932,1414],{},[235,1415,935],{"href":935,"rel":1416},[385],[12,1418,939,1419,945,1422],{},[235,1420,944],{"href":942,"rel":1421},[385],[235,1423,948],{"href":948,"rel":1424},[385],{"title":38,"searchDepth":39,"depth":39,"links":1426},[],[],{},[],{"title":862,"description":38},[],{"id":1039,"title":1040,"animated":7,"body":1433,"client":41,"cover":41,"css_code":41,"description":38,"extension":42,"html_code":41,"images":1455,"is_announcement":7,"is_pinned":7,"is_published":44,"key_points":41,"lang":41,"meta":1456,"navigation":44,"order":41,"path":1071,"photos":1457,"published_at":1073,"reading_time":41,"related":41,"role":41,"seo":1458,"slug":1075,"source_hash":41,"status":41,"stem":1076,"summary":1077,"tags":1459,"tech_stack":41,"translation_of":41,"type":342,"url":41,"video_url":1082,"__hash__":1083},{"type":9,"value":1434,"toc":1453},[1435,1439,1441,1443,1445,1447,1449,1451],[20,1436,1437],{},[12,1438,1047],{},[12,1440,1050],{},[12,1442,1053],{},[12,1444,1056],{},[12,1446,1053],{},[12,1448,1056],{},[12,1450,1063],{},[12,1452,1066],{},{"title":38,"searchDepth":39,"depth":39,"links":1454},[],[],{},[],{"title":1040,"description":38},[1079,1080,1081],{"id":57,"title":58,"animated":7,"body":1461,"client":41,"cover":249,"css_code":41,"description":38,"extension":42,"html_code":41,"images":1588,"is_announcement":44,"is_pinned":7,"is_published":44,"key_points":41,"lang":41,"meta":1589,"navigation":44,"order":41,"path":256,"photos":1591,"published_at":258,"reading_time":41,"related":41,"role":41,"seo":1592,"slug":260,"source_hash":41,"status":261,"stem":262,"summary":263,"tags":1593,"tech_stack":41,"translation_of":41,"type":268,"url":269,"video_url":41,"__hash__":270},{"type":9,"value":1462,"toc":1586},[1463,1467,1469,1495,1573,1575,1577,1584],[20,1464,1465],{},[12,1466,65],{},[12,1468,68],{},[70,1470,1471,1477,1483,1489],{},[73,1472,75,1473],{},[70,1474,1475],{},[73,1476,80],{},[73,1478,83,1479],{},[70,1480,1481],{},[73,1482,88],{},[73,1484,91,1485],{},[70,1486,1487],{},[73,1488,96],{},[73,1490,99,1491],{},[70,1492,1493],{},[73,1494,104],{},[106,1496,1497],{"className":108,"code":109,"language":110,"meta":38,"style":38},[112,1498,1499,1503,1513,1517,1525,1539,1549,1565,1569],{"__ignoreMap":38},[115,1500,1501],{"class":117,"line":118},[115,1502,122],{"class":121},[115,1504,1505,1507,1509,1511],{"class":117,"line":39},[115,1506,128],{"class":127},[115,1508,132],{"class":131},[115,1510,135],{"class":131},[115,1512,138],{"class":131},[115,1514,1515],{"class":117,"line":141},[115,1516,144],{"emptyLinePlaceholder":44},[115,1518,1519,1521,1523],{"class":117,"line":147},[115,1520,150],{"class":127},[115,1522,153],{"class":131},[115,1524,156],{"class":131},[115,1526,1527,1529,1531,1533,1535,1537],{"class":117,"line":159},[115,1528,150],{"class":127},[115,1530,164],{"class":131},[115,1532,167],{"class":131},[115,1534,170],{"class":131},[115,1536,173],{"class":131},[115,1538,176],{"class":131},[115,1540,1541,1543,1545,1547],{"class":117,"line":179},[115,1542,150],{"class":127},[115,1544,184],{"class":131},[115,1546,187],{"class":131},[115,1548,190],{"class":131},[115,1550,1551,1553,1555,1557,1559,1561,1563],{"class":117,"line":193},[115,1552,150],{"class":127},[115,1554,198],{"class":131},[115,1556,201],{"class":131},[115,1558,204],{"class":131},[115,1560,201],{"class":131},[115,1562,209],{"class":131},[115,1564,156],{"class":131},[115,1566,1567],{"class":117,"line":214},[115,1568,144],{"emptyLinePlaceholder":44},[115,1570,1571],{"class":117,"line":219},[115,1572,222],{"class":121},[12,1574,225],{},[12,1576,228],{},[20,1578,1579],{},[12,1580,233,1581],{},[235,1582,242],{"href":237,"target":238,"rel":1583},[240,241],[244,1585,246],{},{"title":38,"searchDepth":39,"depth":39,"links":1587},[],[],{"techStack":1590},[253,254,255],[],{"title":58,"description":38},[265,266,267],{"generatedAt":1595,"author":1596,"articles":1626,"products":1645,"projects":1652,"pages":1653,"cssarts":1655},"2026-07-11T15:24:04.380Z",{"name":1597,"handle":1598,"location":1599,"status":1600,"statusText":1601,"quote":1602,"bio":1603,"featuredLink":1607,"links":1608,"site":1623},"徐可可","ivanhsu","Taipei, Taiwan","building","踊る暇があったら発明して","寫 Code 算是文字工作者嗎？🤔",[1604,1605,1606],"用剛剛好的 Tech Stack 開發實用的生活小物 SaaS。👨🏻‍💻","```npm i inspiration && npm run dev```","看到好吃的 Reels？分享給我，幫你摘要店家清單 👇🏻","https://reelly.life/u/ivanhsu.co/tenjin-shinya-shokudou",[1609,1612,1614,1617,1620],{"type":1610,"url":1611},"email","ivanhsu.ship@gmail.com",{"type":1613,"url":383},"website",{"type":1615,"url":1616},"github","https://github.com/ivan19940106",{"type":1618,"url":1619},"twitter","https://twitter.com/ivanhsuu",{"type":1621,"url":1622},"instagram","https://www.instagram.com/ivanhsu.co",{"name":1597,"url":1624,"description":1625},"https://ivanhsu.co","千里の道も一歩から。",[1627,1630,1634,1638,1642],{"title":812,"slug":853,"publishedAt":851,"tags":1628,"excerpt":855,"keyPoints":1629,"cover":846},[857,858],[],{"title":273,"slug":336,"publishedAt":1631,"tags":1632,"excerpt":338,"keyPoints":1633},"2025-12-31T00:00:00.000Z",[340,341],[],{"title":862,"slug":959,"publishedAt":1635,"tags":1636,"excerpt":961,"keyPoints":1637,"cover":952},"2021-09-05T00:00:00.000Z",[],[],{"title":1040,"slug":1075,"publishedAt":1639,"tags":1640,"excerpt":1077,"keyPoints":1641,"videoUrl":1082},"2019-09-17T00:00:00.000Z",[1079,1080,1081],[],{"title":447,"slug":773,"publishedAt":771,"tags":1643,"excerpt":775,"keyPoints":1644,"cover":765},[777,778],[],[1646,1648,1650],{"title":408,"slug":436,"excerpt":438,"tags":1647,"url":443,"status":261},[265,440,441,442],{"title":346,"slug":399,"excerpt":401,"tags":1649,"url":383,"status":261},[265,403,404],{"title":58,"slug":260,"excerpt":263,"tags":1651,"url":269,"status":261},[265,266,267],[],[1654],{"title":6,"slug":50,"excerpt":52},[1656,1657],{"title":990,"slug":1031},{"title":966,"slug":979},1783783478625]