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

Table of Contents
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.
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.
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)
Đ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ách tôi tạo hình ảnh Hero và OG cho Blog kỹ thuật của mình mà không bị mất trí
- Cách xây dựng một Playwright Reporter tùy chỉnh cho Next.js Dashboards
- Next.js Middleware: Xây dựng xác thực và ủy quyền mạnh mẽ
- TypeScript một mình là không đủ: An toàn kiểu dữ liệu từ đầu đến cuối với Zod trong Next.js
Các câu hỏi thường gặp
Free In-Browser Developer Tools
Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.
Related Articles

suppressHydrationWarning trong Next.js: Hướng dẫn sử dụng an toàn & gỡ lỗi đầy đủ
Hướng dẫn toàn diện về suppressHydrationWarning trong Next.js: sử dụng an toàn & gỡ lỗi đầy đủ với các ví dụ thực tế đã được kiểm chứng.
Read more
Next.js 15 Server Actions vs Route Handlers: So sánh kiến trúc chuyên sâu
Nắm vững khi nào nên chọn Server Actions so với Route Handlers trong Next.js 15, đi sâu vào progressive enhancement, hành vi caching, giao thức RPC và các ranh giới bảo mật.
Read more
Quản lý trạng thái trong React 2026: Vượt xa Redux
Hướng dẫn toàn diện về quản lý trạng thái React năm 2026: so sánh React 19 actions, trạng thái máy chủ TanStack Query, Zustand, Jotai và Signals.
Read more