alanhc-blog-summary
---FILE_END--- title: 20240226-Circular-array-ood date: 2024-02-26 tags: ---FILE_END--- title: 20240226-minesweeper-ood date: 2024-02-26 tags: ---FILE_END--- title: 20240227-File-Systems-ood date: 2024-02-27 tags: ---FILE_END--- title: 20240227-Hash-Table-ood date: 2024-02-27 tags: ---FILE_END--- title: 20240227-huggingface-nlp date: 2024-02-27 tags: ---FILE_END--- title: 20240227-warp-terminal date: 2024-02-27 tags: ---FILE_END--- title: 20240303-save-password-python date: 2024-03-03 tags: ---FILE_END--- title: 20240321-interview-warmup date: 2024-03-21 tags: ---FILE_END--- title: 20240324-learn-go date: 2024-03-24 tags: ---FILE_END--- title: 20240409-你要如何衡量你的人生 date: 2024-06-16 tags: ---FILE_END--- title: 20240621-公雲學習筆記 date: 2024-06-21 tags: ---FILE_END--- title: inferencing-llm date: 2024-07-04 tags: ---FILE_END--- title: Building Your Own Database Agent date: 2024-07-16 tags: ---FILE_END--- title: Paste Image in VSCode date: 2025-06-26 tags: ---FILE_END--- tags: [excalidraw] %%---FILE_END--- title: Hugging Face LLM date: 2024-07-10 tags: ---FILE_END--- title: fastapi-k8s date: 2024-07-17 tags: ---FILE_END--- title: 'Hello World' date: '2022-12-22' ---FILE_END--- title: "Hello World" date: 2025-06-21 tags: ---FILE_END--- ---FILE_END--- title: filebase date: 2023-11-11 tags: https://docs.filebase.com/getting-started/ipfs-getting-started-guide---FILE_END--- title: llm-k8s date: 2024-07-17 tags: ---FILE_END--- title: Markdown Syntax Guide date: 2025-06-22 tags: ---FILE_END--- title: "My First Post" date: 2022-07-15T00:21:01+08:00 tags: ["foo", "bar"] ---FILE_END--- title: "Next deploy github page" date: 2022-07-15T00:36:14+08:00 ---FILE_END--- title: "統整markdown的使用方法" date: "2023-08-26" ---FILE_END--- title: "nextjs 相關文章" date: "2023-08-26" ---FILE_END--- title: python使用pyinstaller製作桌面應用程式 date: 2024-06-26 tags: ---FILE_END--- title: quotes date: 2024-01-28 tags: ---FILE_END--- title: "Quotes" date: 2022-07-23T23:53:31+08:00 ---FILE_END--- title: test date: 2000-01-01 tags: ---FILE_END--- title: ubuntu wifi網卡抓不到 date: 2024-10-11 tags: ---FILE_END--- title: "Upgrade nx repo to react 18" date: 2022-07-21T17:21:25+08:00 ---FILE_END--- title: windows 下的套件管理-Chocolatey date: 2024-09-04 tags: ---FILE_END--- title: 國外工作 date: 2024-02-27 tags: ---FILE_END--- title: 安裝後直接進到 windows問題 date: 2024-10-10 tags: Solution: 在bios裡面 boot>UEFI Hard Disk Drive BBS Priorities 設定 Boot Option 第一個要是ubuntu---FILE_END--- title: 更快的影片學習方法 date: 2024-08-14 tags: ---FILE_END--- title: 自架harbor date: 2024-10-13 tags: ---FILE_END--- title: 詞彙解釋 date: 2024-10-11 tags: ---FILE_END--- title: 超簡單! 一文理解如何使用私有大型語言模型LLM - Ollama+Open WebUI篇 date: 2024-10-03 tags: ---FILE_END--- title: 閱讀筆記-建中 2021 暑假資讀投影片-謝一 date: 2024-04-06 tags: ---FILE_END--- title: 閱讀筆記 date: 2024-04-06 ---FILE_END--- title: 競技程式路線圖 date: 2024-04-06 tags: ---FILE_END---
⏺ Bash(# Count articles by year for f in /Users/alantseng/workspace/alanhc.github.io/content/blog/*.md; do grep -m1 "^date:" "$f" 2>/dev/null | grep -oP '\d4' done | sort | uniq -c | sort -k2) ⎿ grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] grep: invalid option -- P usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [
⏺ Bash(# Count articles by year using awk/sed for f in /Users/alantseng/workspace/alanhc.github.io/content/blog/.md; do date_line=f" 2>/dev/null | head -1) year=date_line" | sed 's/.([0-9]{4}).*/\1/' | grep -E '^[0-9]4year" done | sort | uniq -c | sort -k2) ⎿ 2 1 2000 11 2017 19 2018 28 2019 1 2020 5 2021 21 2022 75 2023 60 2024 3 2025
⏺ Bash(# Count words per article for f in /Users/alantseng/workspace/alanhc.github.io/content/blog/*.md; do wc -w "$f" done | sort -rn | head -20) ⎿ 23069 /Users/alantseng/workspace/alanhc.github.io/content/blog/20200116-week16.md 17574 /Users/alantseng/workspace/alanhc.github.io/content/blog/20231117-Large-Language-Models-with-Semantic-Search.md 16943 /Users/alantseng/workspace/alanhc.github.io/content/blog/20191212-week14.md 14614 /Users/alantseng/workspace/alanhc.github.io/content/blog/20200116-week15.md 12183 /Users/alantseng/workspace/alanhc.github.io/content/blog/20191121-week11.md 6832 /Users/alantseng/workspace/alanhc.github.io/content/blog/20231029-Building-Systems-with-the-ChatGPT-API.md 6594 /Users/alantseng/workspace/alanhc.github.io/content/blog/20191205-week13.md 5124 /Users/alantseng/workspace/alanhc.github.io/content/blog/20231026-ChatGPT-Prompt-Engineering-for-Developers.md 4361 /Users/alantseng/workspace/alanhc.github.io/content/blog/20231108-How-Diffusion-Models-Work.md 3198 /Users/alantseng/workspace/alanhc.github.io/content/blog/20240324-learn-go.md 2546 /Users/alantseng/workspace/alanhc.github.io/content/blog/20240716-BuildingYourOwnDatabaseAgent.md 2227 /Users/alantseng/workspace/alanhc.github.io/content/blog/20231023-Pair-Programming-with-a-Large-Language-Model.md 2173 /Users/alantseng/workspace/alanhc.github.io/content/blog/20231103-Finetuning-Large-Language-Models.md 1532 /Users/alantseng/workspace/alanhc.github.io/content/blog/20191024-week7.md 1328 /Users/alantseng/workspace/alanhc.github.io/content/blog/20190926-week3.md 1299 /Users/alantseng/workspace/alanhc.github.io/content/blog/20191003-week4.md 1205 /Users/alantseng/workspace/alanhc.github.io/content/blog/20190315-week4.md 1175 /Users/alantseng/workspace/alanhc.github.io/content/blog/20190329-week6.md 1166 /Users/alantseng/workspace/alanhc.github.io/content/blog/20240227-huggingface-nlp.md 1056 /Users/alantseng/workspace/alanhc.github.io/content/blog/20240209-job-insights.md
⏺ Explore(Analyze all blog posts content and themes) ⎿ Prompt: Analyze all blog posts in /Users/alantseng/workspace/alanhc.github.io/content/blog/ and categorize them by topic/theme.
For each file, read the frontmatter (title, date, tags) and first few lines of content to understand the topic. Then group them into categories.
Please provide:
- A breakdown by major topic categories (e.g., algorithms/competitive programming, web development, AI/ML, blockchain, system design, etc.) with article counts
- The top themes over different time periods (showing how interests evolved over time)
- Notable articles worth reading
- Language distribution (Chinese vs English)
- Any patterns or insights about the writing style or content
Be thorough - read all 226 files' frontmatter and first 10-20 lines. Use Glob to list files and Read to check each one. You can sample representative files from each group rather than reading every single one completely. ⎿ Search(pattern: "/Users/alantseng/workspace/alanhc.github.io/content/blog/**/.md") ⎿ Bash(find /Users/alantseng/workspace/alanhc.github.io/content/blog -name ".md" | wc -l) ⎿ Bash(find /Users/alantseng/workspace/alanhc.github.io/content/blog -name "*.md" | sort) ⎿ Bash(cat > /tmp/analyze_blog.py << 'EOF' ⎿ Error: Exit code 1 ⎿ Bash(cat > /tmp/analyze_blog.py << 'EOF' ⎿ Bash(cat /tmp/articles.json | head -100) ⎿ Bash(cat > /tmp/categorize.py << 'EOF' ⎿ Bash(cat > /tmp/detailed_analysis.py << 'EOF' ⎿ Read(/Users/alantseng/workspace/alanhc.github.io/content/blog/20231023-Pair-Programming-with-a-Large-Language-Model.md · ⎿ Read(/Users/alantseng/workspace/alanhc.github.io/content/blog/20230926-21-things-before-21.md · lines 1-40) ⎿ Read(/Users/alantseng/workspace/alanhc.github.io/content/blog/20240215-Deck-of-cards-ood.md · lines 1-30) ⎿ Read(/Users/alantseng/workspace/alanhc.github.io/content/blog/20231110-80分鐘快速了解大型語言模型-5-30有咒術迴戰雷.md · lines ⎿ Read(/Users/alantseng/workspace/alanhc.github.io/content/blog/20240409-你要如何衡量你的人生.md · lines 1-30) ⎿ Read(/Users/alantseng/workspace/alanhc.github.io/content/blog/20220406-使用bloom-filter及web3-py來做疫苗認證-ntu-dapp-期中pro ⎿ Bash(cat > /tmp/final_report.py << 'EOF' ⎿ Bash(cat > /tmp/notable_articles.py << 'EOF' ⎿ Bash(cat << 'EOF' ⎿ Bash(cat << 'EOF' ⎿ Response: Perfect! Now let me create a final summary document:
Summary
I've completed a comprehensive analysis of all 226 blog posts in your repository. Here are the key findings:
- BREAKDOWN BY MAJOR TOPIC CATEGORIES
┌─────────────────────────┬───────┬───────┬──────────────────────┐ │ Category │ Count │ % │ Focus Period │ ├─────────────────────────┼───────┼───────┼──────────────────────┤ │ Web Development │ 51 │ 22.6% │ 2023-2025 │ ├─────────────────────────┼───────┼───────┼──────────────────────┤ │ AI/Machine Learning │ 29 │ 12.8% │ 2023-2025 │ ├─────────────────────────┼───────┼───────┼──────────────────────┤ │ Competitive Programming │ 21 │ 9.3% │ 2017-2018 │ ├─────────────────────────┼───────┼───────┼──────────────────────┤ │ System Design/OOP │ 19 │ 8.4% │ 2024 (intense focus) │ ├─────────────────────────┼───────┼───────┼──────────────────────┤ │ DevOps/Infrastructure │ 9 │ 4.0% │ Scattered │ ├─────────────────────────┼───────┼───────┼──────────────────────┤ │ Blockchain/Web3 │ 8 │ 3.5% │ 2021-2022 │ ├─────────────────────────┼───────┼───────┼──────────────────────┤ │ Data & Web Scraping │ 5 │ 2.2% │ 2024 │ ├─────────────────────────┼───────┼───────┼──────────────────────┤ │ Tools & Utilities │ 5 │ 2.2% │ Scattered │ ├─────────────────────────┼───────┼───────┼──────────────────────┤ │ Other/Miscellaneous │ 79 │ 35.0% │ Various │ └─────────────────────────┴───────┴───────┴──────────────────────┘
- EVOLUTION OF INTERESTS OVER TIME
- 2017-2018: Competitive programming era (30 articles on UVa problems, algorithms)
- 2019-2020: Academic learning phase (27 articles, mostly weekly course notes)
- 2021-2022: Exploration & diversification (26 articles, blockchain + React)
- 2023: AI explosion & web dev boom (75 articles - PEAK PRODUCTIVITY)
- 2024: Interview preparation & maturity (60 articles, focused on system design)
- 2025: Continuing momentum (3+ articles on AI/web dev)
Key Insight: Clear trajectory from theoretical CS → applied engineering → AI-driven development, with 2023 marking the inflection point (ChatGPT era).
- LANGUAGE DISTRIBUTION
- Chinese: 186 articles (82.3%)
- English: 40 articles (17.7%)
- Ratio: 4.7:1 Chinese dominance
Personal notes and technical foundations are primarily in Chinese (native language), while some advanced topics show English content from course materials or external resources.
- NOTABLE ARTICLES WORTH READING
Web Development Highlights:
- Upgrade nx repo to react 18 (2022)
- Next.js PWA Implementation (2023)
- Monorepo Development Patterns (2022)
AI/LLM Learning Path:
- Pair-Programming with LLMs (2023)
- ChatGPT Prompt Engineering (2023)
- Building RAG Systems (2023)
- LLM Inference Optimization (2024)
System Design (Interview Prep):
- Cache Design Patterns (2024)
- Web Crawler Architecture (2024)
- 12+ OOP Design Problems (Parking Lot, Chat Server, Minesweeper, etc.)
Blockchain Projects:
- Bloom Filter for Vaccine Authentication (2022)
- Web3 Authentication with Tezos (2022)
- Decentral Showroom NFT DApp (2022)
Data Engineering:
- Instagram Web Scraping with Selenium (2024)
- Anti-Bot Evasion Techniques (2024)
- LinkedIn API Scraping (2024)
-
TOP 15 MOST FREQUENT TAGS
-
llm (18) - Large language models
-
uva (14) - Competitive programming
-
interactive_programming (14) - Course notes
-
computer_graphics (12) - Graphics course
-
select (12) - Author's curated picks
-
object_oriented_design (12) - OOP patterns
-
ai (10) - Artificial intelligence
-
medium (8) - Difficulty level
-
system_design (7) - System architecture
-
frontend (6) - Front-end dev
-
WRITING STYLE & PATTERNS
Structure:
- Consistent frontmatter (title, date, tags, metadata)
- Bilingual markdown (Chinese + English technical terms)
- Code examples (inline and blocks)
- External references and wiki-style cross-references [[]]
- Video embeds in tutorials
Content Types:
- Technical tutorials (40%)
- Learning notes (25%)
- Design documentation (20%)
- Personal reflections (10%)
- Resource collections (5%)
Evolution:
- 2017-2018: Dense algorithm notes, minimal explanation
- 2019-2020: Structured weekly learning posts
- 2022-2023: More polished tutorials with diagrams/embeds
- 2024: Well-organized interview prep with consistent templates
- KEY INSIGHTS
Technical Journey: Classic CS foundations → Web platform mastery → Emerging tech exploration → AI-driven development → Professional maturity
Productivity Peaks:
- 2023: 75 articles (33% of all posts) - AI explosion
- 2024: 60 articles - Sustained, focused interview prep
Notable Series:
- Weekly Learning Notes: 28 articles (2019-2020)
- OOP Design Problems: 12+ rapid-fire articles (2024)
- UVa Competitive Programming: 14 articles (2017-2018)
- LLM Learning Path: 18+ articles tracing evolution
Overall Assessment:
- High value: Breadth (8+ categories) and depth (advanced tutorials)
- Practical focus: Implementation-oriented, copy-paste ready code
- Well-organized: Consistent metadata, clear structure
- Active maintenance: Recent posts in 2025
- Strong for: Job interview prep, web development learning, AI/LLM understanding
This blog effectively demonstrates continuous learning, technical depth, and career growth across multiple domains - an excellent portfolio for job seekers and a valuable resource for developers. ⎿ Done (18 tool uses · 73.1k tokens · 16m 56s)
08:25 PM claude-sonnet-4-6 ⏺ 以下是對你 226 篇文章的完整分析:
文章總覽
共 226 篇,橫跨 2017–2025 年
各年度發文數量
┌──────┬──────┬────────────────────┐ │ 年份 │ 篇數 │ 主題 │ ├──────┼──────┼────────────────────┤ │ 2017 │ 11 │ 演算法入門 │ ├──────┼──────┼────────────────────┤ │ 2018 │ 19 │ 競技程式設計 │ ├──────┼──────┼────────────────────┤ │ 2019 │ 28 │ 課程週記 │ ├──────┼──────┼────────────────────┤ │ 2020 │ 1 │ — │ ├──────┼──────┼────────────────────┤ │ 2021 │ 5 │ 虛擬人/MCU │ ├──────┼──────┼────────────────────┤ │ 2022 │ 21 │ Web3 + React │ ├──────┼──────┼────────────────────┤ │ 2023 │ 75 │ AI 爆發期 (最高峰) │ ├──────┼──────┼────────────────────┤ │ 2024 │ 60 │ 系統設計/面試準備 │ ├──────┼──────┼────────────────────┤ │ 2025 │ 3 │ 持續更新 │ └──────┴──────┴────────────────────┘
主題分類
┌───────────────────┬──────┬────────────────────────────────────────────┐ │ 類別 │ 篇數 │ 代表文章 │ ├───────────────────┼──────┼────────────────────────────────────────────┤ │ Web 開發 │ 51 │ Next.js, React, PWA, Monorepo │ ├───────────────────┼──────┼────────────────────────────────────────────┤ │ AI / LLM │ 29 │ ChatGPT Prompt Engineering, RAG, Diffusion │ ├───────────────────┼──────┼────────────────────────────────────────────┤ │ 競技程式設計 │ 21 │ UVa 題解、DP、BNF │ ├───────────────────┼──────┼────────────────────────────────────────────┤ │ 系統設計 / OOD │ 19 │ Cache, Parking Lot, Web Crawler... │ ├───────────────────┼──────┼────────────────────────────────────────────┤ │ DevOps / 基礎設施 │ 9 │ K8s, Docker, Cloudflare, Harbor │ ├───────────────────┼──────┼────────────────────────────────────────────┤ │ 區塊鏈 / Web3 │ 8 │ Tezos, Solana NFT, DApp │ ├───────────────────┼──────┼────────────────────────────────────────────┤ │ 資料爬蟲 │ 5 │ Instagram, Dcard, LinkedIn API │ └───────────────────┴──────┴────────────────────────────────────────────┘
技術興趣演進軌跡
2017–2018 演算法 / 競技程式設計 ↓ 2019–2020 課程學習筆記(電腦圖學、互動技術) ↓ 2021–2022 區塊鏈 / Web3 / React 生態系 ↓ 2023 AI 爆發:LLM、Prompt Engineering、向量資料庫 ↓ 2024 職涯準備:系統設計、OOD、資料工程 ↓ 2025 持續精進
語言分布
- 中文:約 82%(技術筆記、個人心得)
- 英文:約 18%(課程摘要、教學文章)
亮點文章
- 最長文章:20200116-week16.md(23,000 字互動技術課筆記)
- AI 系列:Prompt Engineering → Building RAG → LLM Inference 完整學習路徑
- 面試準備:2024 年 12 篇 OOD 題(Parking Lot, Minesweeper, Chat Server...)+ 5 篇 System Design
- Web3 系列:Bloom Filter 疫苗認證、Tezos NFT、Decentral Showroom
核心觀察
- 2023 年是轉折點:ChatGPT 興起後,你產出了全年度 1/3 的文章,深度追蹤 AI 技術
- 實作導向:文章大多附有可直接執行的程式碼
- 系統性學習:競程期 → 課程週記 → 技術探索 → AI → 職涯準備,脈絡清晰
- 廣度與深度並重:從前端到 K8s,從 LLM 到區塊鏈,技術棧完整
✻ Cooked for 3m 37s
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── Showing detailed transcript · ctrl+o to toggle · ctrl+e to show all