•9 min read

Cách tôi xây dựng microblog TIL để lưu giữ những điều tôi có thể quên

Cách tôi xây dựng microblog TIL để lưu giữ những điều tôi có thể quên

Tôi liên tục học được những điều nhỏ nhặt: một cờ git mà tôi không biết là có tồn tại, một mẹo CSS giải quyết vấn đề bố cục, một dòng Python thay thế năm dòng mã lặp. Tôi từng chia sẻ những điều này trên Mastodon, nhưng chúng sẽ bị trôi mất trong nguồn cấp dữ liệu chỉ trong vài giờ. Viết một bài đăng blog đầy đủ cho mỗi điều đó thì có vẻ quá tốn công.

Giải pháp là một mục TIL (Today I Learned - Hôm nay tôi học được): các bài đăng ngắn hơn với ít định dạng hơn, một nguồn cấp dữ liệu RSS riêng biệt và cố tình giảm thiểu rào cản xuất bản.

Audio Briefing
0:00 / 0:00

Thiết lập

Tôi đã thêm một tuyến /til/ vào trang web Next.js của mình. Mỗi bài đăng TIL là một tệp markdown đơn giản với phần frontmatter tối thiểu:

---

title: "Use `git log --oneline --graph` for a compact commit tree"
date: 2026-03-15
tags: ["git"]
---

Running `git log --oneline --graph --all` shows a compact ASCII commit
graph in the terminal. I use this daily now instead of `git log`.

Không có tóm tắt, không có hình ảnh hero, không có danh mục: chỉ có tiêu đề, ngày, thẻ và vài câu. Việc giảm thiểu chi phí là có chủ ý. Nếu viết một bài đăng mất hơn hai phút, tôi sẽ không làm.

Advertisement

Nguồn cấp dữ liệu RSS riêng biệt

Một yêu cầu tôi có: cho phép mọi người đăng ký các bài đăng TIL riêng biệt với các bài đăng blog đầy đủ. Trong Next.js, tôi đã tạo một điểm cuối nguồn cấp dữ liệu RSS riêng biệt:

// app/til/feed.xml/route.ts
export async function GET() {
  const posts = getAllTilPosts();
  const feed = generateFeed({
    title: "TIL - Loc's Blog",
    posts,
    feedUrl: `${SITE_URL}/til/feed.xml`,
  });
  return new Response(feed, {
    headers: { 'Content-Type': 'application/xml' },
  });
}

Bằng cách này, những người đăng ký RSS có thể chọn giữa tất cả hoặc chỉ các mẹo nhanh.

Tự động hóa với tác vụ Rake tùy chỉnh

Tôi đã tạo một tập lệnh tạo mẫu bài đăng TIL mới từ dòng lệnh:

npm run til "git log --oneline graph"

Điều này tạo một tệp .md mới với ngày được điền sẵn, tiêu đề từ đối số và nội dung mẫu mà tôi chỉ cần điền vào. Loại bỏ rào cản là chìa khóa: nếu tôi phải nhớ quy ước đặt tên tệp và định dạng frontmatter mỗi lần, tôi sẽ ngừng làm điều đó.

Triết lý

Tôi đã lấy ý tưởng này từ blog TIL của Simon Willison. Cái nhìn sâu sắc là hầu hết những gì bạn học được không đáng để viết một bài báo đầy đủ nhưng đáng để ghi lại. Một mục TIL nắm bắt được khoảng giữa đó. Theo thời gian, những bài đăng nhỏ này sẽ xây dựng thành một cơ sở kiến thức cá nhân hữu ích đáng ngạc nhiên.

Điều gì đã thay đổi

Kể từ khi thêm mục TIL, tôi đã ghi lại những điều mà trước đây tôi sẽ bỏ qua. Một bản sửa lỗi cho vấn đề mạng Docker, một mẹo công cụ dành cho nhà phát triển trình duyệt, một bí danh shell mà tôi liên tục sử dụng lại: mỗi cái mất 30 giây để viết và giúp tôi tiết kiệm 10 phút để tìm hiểu lại sau này.

Việc tích hợp danh sách gửi thư hàng tuần là bước tiếp theo: một bản tóm tắt ngắn gọn về các TIL gần đây sẽ được gửi cùng với bản tin thông thường.

Zustand vs Jotai State Management Comparison](/en/blog/zustand-vs-jotai-react-state-management)

Advertisement

Đi sâu: Cơ chế cốt lõi

Khi chúng ta nhìn sâu hơn, các cơ chế cơ bản cho thấy sự tương tác phức tạp của các hệ thống. Trong phát triển hiện đại, việc hiểu các cơ chế này là điều phân biệt một người mới với một chuyên gia.

Hãy xem xét ví dụ thực tế này:

// A comprehensive example demonstrating advanced patterns
class ServiceManager {
  constructor() {
    this.services = new Map();
    this.initialized = false;
  }

  register(name, service) {
    if (this.services.has(name)) {
      throw new Error(`Service ${name} already registered`);
    }
    this.services.set(name, service);
  }

  async initializeAll() {
    this.initialized = true;
    for (const [name, service] of this.services) {
      if (typeof service.init === 'function') {
        await service.init();
      }
    }
  }

  get(name) {
    if (!this.initialized) {
      console.warn('Accessing services before initialization');
    }
    return this.services.get(name);
  }
}

Mô hình này đảm bảo rằng kiến trúc của chúng ta vẫn có thể mở rộng và mạnh mẽ ngay cả khi các yêu cầu kinh doanh thay đổi. Đó là một cách tiếp cận cơ bản mang lại lợi ích trong các ứng dụng quy mô lớn.

Ứng dụng thực tế và mở rộng quy mô

Việc triển khai điều này trong môi trường sản xuất đưa ra một loạt thách thức mới. Chúng ta phải tính đến tính đồng thời, quản lý trạng thái và rò rỉ bộ nhớ.

Ví dụ, khi xử lý các hệ thống thông lượng cao, mọi tối ưu hóa nhỏ đều có giá trị. Chúng ta thường dựa vào các công cụ phân tích hiệu suất để xác định các nút thắt cổ chai không rõ ràng trong quá trình phát triển cục bộ.

Sơ đồ trên minh họa một chiến lược triển khai điển hình trong đó ứng dụng của chúng ta mở rộng theo chiều ngang.

Kiểm tra sự hiểu biết của bạn

Bạn cũng có thể thích

Các câu hỏi thường gặp

Một bài đăng kỹ thuật đầy đủ thường là một bài luận chuyên sâu, dài (800 đến 2.500+ từ) bao gồm các khái niệm kiến trúc, hướng dẫn từ đầu đến cuối và các điểm chuẩn. Một bài đăng TIL bao gồm các ghi chú kỹ thuật ngắn gọn, nguyên tử (100 đến 300 từ) ghi lại một lệnh duy nhất, một lỗi khó hiểu hoặc một đoạn mã mà không có rào cản của các phần giới thiệu chính thức.
Trong Next.js App Router, hãy tạo một trình xử lý tuyến tại app/til/feed.xml/route.ts bằng cách sử dụng thư viện tạo nguồn cấp dữ liệu như feed. Lọc bộ sưu tập nội dung của bạn cụ thể cho type === 'TIL', xây dựng tải trọng XML chứa tiêu đề, ngày xuất bản và permalink, sau đó trả về phản hồi với Content-Type: application/xml; charset=utf-8 và các tiêu đề cache-control.
Các bài đăng ngắn có thể gây rủi ro bị gắn cờ nội dung mỏng nếu được lập chỉ mục một cách bừa bãi mà không có cấu trúc. Các phương pháp hay nhất bao gồm: (1) Áp dụng dữ liệu có cấu trúc Schema.org TechArticle hoặc HowTo; (2) Nhóm các TIL liên quan vào các trang trung tâm thẻ được lập chỉ mục; (3) Thêm URL chính tắc; và (4) Nếu một ghi chú cực kỳ ngắn (dưới 100 từ), hãy nhúng nó vào một bản tóm tắt hàng tháng được tuyển chọn hoặc áp dụng robots: noindex cho đến khi được mở rộng.
Tạo một tập lệnh bash đơn giản hoặc lệnh CLI Node.js (ví dụ: npm run til 'new-post-title') đọc tiêu đề, chuyển nó thành tên tệp có ngày (YYYY-MM-DD-title.md), chèn boilerplate frontmatter với dấu thời gian hiện tại và tự động mở tệp trong trình chỉnh sửa mã ưa thích của bạn.
Các ghi chú TIL nguyên tử là tài liệu nguồn lý tưởng cho các nền tảng xã hội của nhà phát triển. Một mẹo mã duy nhất có thể được tự động định dạng thành một bài đăng đoạn mã ngắn trên X, một thông tin chi tiết về nhà phát triển trên LinkedIn hoặc được tổng hợp thành một số bản tin 'Những gì tôi đã học được trong tuần này' hàng tuần bằng cách sử dụng GitHub Actions và trình phân tích cú pháp markdown.
Share this article:

Stay Updated

Get the latest posts delivered straight to your inbox.

Free Developer Utilities

Free In-Browser Developer Tools

Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.

Explore Tools
Advertisement