Sau gần 2 tháng chuyển nhà (blog) từ nền tảng Ghost Blog sang Notion Pages thì mình lại quyết định tiếp tục chuyển từ Notion sang Github Pages. Do chưa hài lòng lắm vì không thể tuỳ biến được giao diện của Notion Pages, trong khi mình lại có nhu cầu sử dụng một giao diện tối giản hơn, đặc sắc hơn. Vì vậy, một ngày, mình bỗng dưng có ý nghĩ, tại sao không tận dụng lợi thế là coder của mình, để làm một thứ gì đó đáp ứng nhu cầu của mình, vừa miễn phí (không tốn phí duy trì hệ thống như khi sử dụng Ghost Blog), lại vừa dễ tuỳ biến. Thế là dự án “Migrate Blog duongdao.family từ Notion sang Github Pages” ra đời và nhanh chóng hoàn thành với sự trợ giúp đắc lực của một trợ thủ đặc biệt - Github Copilot (và ChatGPT 4).
Ý tưởng của dự án này là:
- Vẫn tận dụng Editor của Notion vì thao tác tiện lợi, quen thuộc, nhất là đối với người không rành IT như vợ mình. Còn mình thì vốn không xa lạ gì với Markdown.
- Dùng Github Pages để host blog được viết bằng Markdown và xuất ra file HTML bởi một Static Site Generator (mình chọn dùng Mã nguồn mở Hexo Blog trên nền Node.js, vì trước đây, mình đã sử dụng Jekyll ~ Ruby rồi nên muốn thử một mã nguồn đó khác, với lại Ruby cũng quá quen thuộc với mình vì là ngôn ngữ lập trình mình sử dụng hàng ngày mà).
- Thách thức kỹ thuật của dự án là (1) truy xuất Notion API để lấy thông tin về bài viết, (2) chuyển nội dung bài viết từ Notion sang Markdown, (3) xử lý hình ảnh trong bài viết trên Notion, tải chúng về, và rồi thay bằng đường dẫn mới.
Vấn đề (1) thì không quá xa lạ với mình, vì mình từng phát triển một số project cá nhân với Notion API. Vấn đề (2) có thể giải quyết rốt ráo với thư viện https://github.com/souvikinator/notion-to-md. Quan trọng là làm thế nào để trong một thời gian ngắn giải quyết cả (1) + (2) + (3) để chúng phối hợp nhau làm việc và cho ra kết quả mong muốn. Thế là, mình với vai trò cơ trưởng, đã nhờ sự trợ giúp của cơ phó: Github Copilot. Nếu không có vị cơ phó này, thì cơ trưởng vẫn có thể lái máy bay đến đích nhưng sẽ căng thẳng, mệt mỏi hơn, mất nhiều thời gian hơn, chứ không nhàn tênh được chút nào.
Ngoài ra, còn có sự tham gia của ChatGPT4, mình bắt đầu bằng việc hỏi ChatGPT4 các source code Static Site Generator nào đang phổ biến và thông dụng nhất hiện nay. ChatGPT4 đưa ra một list vài cái tên nổi bật, và do đó, mình chọn Hexo Blog. Sau đó, mình lại hỏi tiếp một vài câu hỏi kĩ thuật khác liên quan đến Hexo Blog để có thể chắc rằng Hexo Blog đáp ứng được yêu cầu của mình, các câu hỏi kiểu như: Hexo Blog có thể làm được việc này việc kia không? Để làm được thì phải làm như thế nào?, … Việc hỏi trực tiếp ChatGPT4 tiết kiệm giúp mình rất nhiều thời gian phải vào Documentation của Hexo Blog mà tự đọc.
Việc tiếp theo là bắt tay vào code thôi, tuy nhiên mình lại không cần phải tự code một dòng nào trong project này cả. Việc của mình (và mình nghĩ cũng sẽ là việc của các Software Engineer trong tương lai không xa) là phân tích vấn đề, chia nhỏ vấn đề, tìm ra hướng giải quyết, biết bắt đầu từ đâu, bước tiếp theo cần làm gì, có những vấn đề nào sẽ phát sinh, có những lỗi nào đang tiềm ẩn, … Đây hoàn toàn là kinh nghiệm và kỹ năng thuần tuý của một software engineer (con người) mà ở thời điểm này AI chưa thay thế được. Sau khi đã có được mọi phác thảo trong đầu, mình chỉ việc hỏi thôi, và Github Copilot sẽ sinh ra code đáp ứng yêu cầu của mình, cho từng công việc nhỏ, cụ thể.
Qua đoạn video dưới đây quay lại quá trình mình tương tác với Github Copilot:
Video chứa khoảng 1/3 lượng tasks mà mình đã nhờ Github Copilot hỗ trợ, vì mình không thể hỏi cùng lúc vài chục câu hỏi trong một Window, mà nên tách ra làm nhiều Window khác vì sự giới hạn về lượng Tokens tối đa mà Github Copilot có thể xử lý được.
Bạn thấy đấy, việc của mình sau đó, chỉ đơn giản là copy đoạn code mà Github Copilot đề xuất, tinh chỉnh lại cho phù hợp, và kiểm thử. Nếu không đúng ý mình thì mình sẽ hỏi lại, và lặp lại quy trình này. Trong suốt toàn bộ dự án, mình không phải tự viết một dòng code xử lý nào. Cũng có một số vấn đề, dù đã hỏi đi hỏi lại, Github Copilot vẫn không thể xử lý triệt để. Thế là mình lại phải nhờ cậy thằng anh thông minh hơn của Github Copilot - ChatGPT4, và hoàn toàn hài lòng với kết quả dự án.
Từ quá trình làm dự án này, cũng như sau khoảng 4-5 tháng sử dụng Github Copilot và ChatGPT, mình nhận ra rằng việc biết áp dụng Generative AI vào công việc để nâng cao hiệu suất là rất quan trọng, thay vì sợ hãi AI sẽ thay thế mình, hãy biến nó thành trợ thủ của mình, và kĩ năng quan trọng nhất trong việc ứng dụng Generative AI là mình phải biết phân tích vấn đề và phải đặt câu hỏi đúng (và Prompt Engineering, …).
Code của mình đây (thậm chí mình quá lười để tổ chức file code thành các module cho gọn đẹp)