Nhật ký làm Notas - Kỳ đầu

Nhật ký làm Notas - Kỳ đầu

Tin ngắn hàng ngày dành cho bạn
  • Manus đã chính thức mở cửa cho tất cả người dùng rồi đấy mọi người. Cho những ai chưa biết thì đây là một công cụ viết báo cáo (làm mưa làm gió) giống như Deep Research của OpenAI á. Mỗi ngày được miễn phí 300 Credits để nghiên cứu. Mỗi lượt nghiên cứu tiêu tốn tuỳ thuộc vào độ phức tạp của yêu cầu. À với cả họ đang có chương trình tặng miễn phí Credits hay sao á. Như mình thì vào thấy được hẳn 2000.

    Mình dùng thử, so sánh với cùng một lệnh giống như đợt trước dùng bên Deep Research thì nội dung khác biệt nhau hoàn toàn. Manus báo cáo như kiểu viết văn hơn so với OpenAI là các gạch đầu dòng và bảng biểu.

    À lúc đăng ký xong có bắt nhập số điện thoại để xác minh, nếu lỗi thì các bạn đợi qua ngày thử lại xem có được không nhé.

    » Xem thêm
  • Mọi người chắc nghe nhiều về xu hướng tìm kiếm thông tin bằng AI chứ không cần công cụ tìm kiếm như Google nữa rồi đúng không? Không đâu xa ánh xạ vào bản thân thì thấy đúng thật, thi thoảng mới tìm kiếm thôi chứ còn đâu toàn hỏi tụi AI.

    Ngay từ đầu viết blog, thứ mà mình hướng đến là chia sẻ kinh nghiệm chứ không phải là những bài mang nặng tính kỹ thuật, máy móc, hướng dẫn từ đầu... Vì thời điểm đó đã có quá nhiều người làm nội dung này rồi và họ làm rất tốt, tại sao mình phải cố phát minh lại bánh xe? Một điều nữa là tin tưởng độc giả của mình có khả năng tìm hiểu vấn đề. Nếu bạn đọc đủ nhiều các bài viết trên blog thì thấy mình luôn cố gắng chèn thêm các liên kết tham khảo ngoài bài viết, nêu ra vấn đề mở và rất ít khi kết luận chắc chắn một điều gì đó.

    Mình đã cố gắng rèn luyện kỹ năng viết, kỹ năng trình bày và cả cách tương tác với độc giả để mang lại giá trị cho họ. Nhiều lúc ngồi lật lại các con số thống kê thấy lượng đọc bài viết tăng lên lại cảm thấy vui. Nhưng khi nguồn truy cập đến từ Google thì lại thấy buồn, vì điều đó chứng tỏ họ biết đến mình chỉ khi đang cố đi tìm giải pháp, có thể họ chỉ đọc chớp nhoáng, may ra tìm được cách giải quyết và thế là đóng cửa sổ trình duyệt rồi đi như một cơn gió.

    Chừng vài tháng đổ lại đây, một điều khiến mình rất vui đó là lượng người truy cập thẳng vào trang chủ mà không thông qua công cụ tìm kiếm đang tăng dần lên, có nhiều hôm lượng truy cập tự nhiên còn cao hơn cả đến từ Google. Điều đó chứng tỏ độc giả đã có thói quen quay lại trang của mình nhiều hơn và họ tìm thấy được giá trị từ blog mang lại. Vui mừng khôn xiết 🤩

    Bên cạnh đó thì lượng truy cập vào chuyên mục Threads - tức là mục mình đang viết bài này đang cao hơn bao giờ hết. Điều đó chứng tỏ xu hướng đi theo tin nhanh là đúng đắn. Mình có thể ngồi cả ngày để viết tin ngắn cho bạn đọc vì nó rất nhanh mà tiện, không tốn công đi tìm tài liệu để viết, không tốn cả thời gian viết nữa, còn mình thì có rất nhiều thứ để chia sẻ 😅. Nhưng không vì thế mà bỏ bê các bài viết dài, vì dài thì có nhiều thông tin để chia sẻ hơn.

    Vài lời tâm sự thế thôi chứ hơn một tháng nay mình chưa viết bài viết mới nào vì công việc bận quá. Xong lâu dần cứ trì hoãn lại thành lười. À với cả tháng 5 này rất thích hợp để đọc các cuốn sách về cách mạng á. Có hôm đọc đến 2 giờ sáng mới đi ngủ 🥱

    » Xem thêm
  • Mình mới nhìn thấy một trang web khá thú vị nói về các cột mốc đáng nhớ trong lịch sử phát triển Internet toàn cầu: Internet Artifacts

    Chỉ từ 1977 - khi Internet còn nằm trong hộp thí nghiệm thì nhìn xem - giờ đây Internet đã khiến mọi thứ phát triển đến mức nào 🫣

    » Xem thêm

Vấn đề

Cũng tròn một tuần kể từ bài viết Làm ứng dụng ghi chú - Notas mà tôi đã bật mí với bạn đọc trước đó. Trong suốt thời gian vừa rồi, tôi gần như tập trung hoàn toàn vào công việc này. Cái nhìn ban đầu của Notas đã và đang dần lộ ra rõ nét như ban ngày và tôi nghĩ quá trình xây dựng Notas khá thú vị, vì thế càng hữu ích hơn nếu ghi lại nhật ký phát triển ứng dụng tiện ích đầu tay của mình.

Nhưng trước khi bắt đầu kể, xin có một vài lời muốn nói!

Chỉ sau một hai bài viết trên Facebook (trước đây tôi rất ít đăng bài lên Facebook, từ trang cá nhân cho đến hội nhóm) thì có vẻ như nhiều người khá mất kiên nhẫn trước những bài viết "dài". Gọi là nhiều chữ nhưng những bài viết ra chỉ có độ dài biến thiên trong khoảng 1000 chữ đến dưới 2000, mà theo như tôi thấy thì điều đó cũng... đâu có dài lắm. Thầm nghĩ có lẽ mọi người đang quen dần với xu hướng thông tin "nhanh" nên đối với một bài viết có nội dung dài, hẳn là rất choáng ngợp.

Tôi nghĩ rằng một bài viết thành công là bài viết thuyết phục được người đọc, không liên quan nhiều đến dài hay ngắn, miễn sao họ cảm thấy người viết đang trình bày vấn đề một cách nghiêm túc thì đã là thành công bước đầu. Mà bài viết dài, cốt là để dẫn dắt người đọc vào ngữ cảnh, để cho họ hiểu bối cảnh, để từ đó dễ thuyết phục hơn. Nhưng nói gì thì nói, nếu đã không đọc thì có bắt ép cũng không thể. Hy vọng bạn đọc hiểu những gì tôi đang nói, để từ đó có cái nhìn khách quan cho những gì mà tôi viết ra.

Quay lại vấn đề!

Tuần vừa rồi, tôi chủ yếu là nghiên cứu tất cả các trường hợp liên quan đến logic xử lý của một ứng dụng ghi chú. Khi bắt đầu nói "Tôi sẽ làm ứng dụng ghi chú", nghe có vẻ dễ dàng (kể cả tôi lúc đó cũng nghĩ là nó dễ) nhưng vấn đề chỉ phát sinh khi bạn thực sự bắt tay vào làm một cái gì đó.

Cách làm

Thường thì trước khi làm, ai cũng dành một khoảng thời gian để suy nghĩ xem mình cần làm gì, chuẩn bị những gì và nên làm như thế nào.

Khi làm Notas cũng vậy. Như ở bài viết trước, tôi xác định các bộ khung và thư viện (framework/library) để làm ứng dụng. Nhiều cái tên rất thân thuộc như Nuxt.js, Tailwind và thư viện DaisyUI. Đây là những công cụ mà tôi đã quen sử dụng, tận dụng được lợi thế đó để đẩy nhanh quá trình phát triển Notas.

Vì có dự tính Opensource, nên việc dành thời gian suy nghĩ cho cấu trúc cũng là một vấn đề. Thực ra một cấu trúc dù tốt đến đâu cũng không thể mang ra áp dụng cho tất cả các trường hợp được. Tôi đang nghĩ đến một kiến trúc phù hợp thì hợp lý hơn, nghĩa là nó rõ ràng, đọc hiểu nhanh chóng, từ đó đẩy nhanh quá trình đóng góp mã hoặc sửa chữa nếu có. Cấu trúc thư mục của Notas được chia ra theo vị trí của nhũng thành phần trong mảnh ghép tạo nên Notas.

Cấu trúc thư mục

Về kiến trúc, được chia thành 3 lớp (layer) chính đó là GUI, Logic và Adapter. Trong khi GUI là giao diện, Logic là một tầng xử lý dữ liệu lấy từ Adapter, và Adapter là nơi để lấy dữ liệu. Adapter là thành phần có thể triển khai lại theo cách mà bạn thích, chỉ cần đảm bảo đủ các hàm lấy dữ liệu là có thể cắm vào hoạt động như một cơ sở dữ liệu cho Notas.

Adapter đơn giản nhất tôi đang xây dựng là LocalStorage của trình duyệt. Chỉ cần trữ lưu dữ liệu và lấy ra trong bộ nhớ cục bộ này là đủ để thử nghiệm xem liệu Adapter có hoạt động được như mong muốn. Cho đến bây giờ thì tôi chưa gặp vấn đề gì với Adapter cả, có lẽ mọi thứ đang đi đúng hướng.

Trình soạn thảo có lẽ trái tim của Notas, như lời gợi ý từ một người bạn làm thế nào để dễ đa dạng trình soạn thảo, thì tôi đã thiết kế để tách riêng soạn thảo thành các thành phần (components) trong Vue. Nghĩa là bạn có thể dễ dàng thêm bất kỳ trình soạn thảo nào mà bạn thích, miễn là làm sao triển khai (implements) đầy đủ các phương thức cần có của một trình soạn thảo. Hai cái tên được tích hợp ban đầu là Tiptap và SimpleMDE, ngoài ra, còn rất nhiều cái tên khác nữa như là CKEditor và TinyMCE... cũng rất tiềm năng tích hợp.

Kết quả tuần đầu tiên

Giao diện Notas

Về cơ bản, giao diện của Notas phiên bản Desktop đã được định hình. Gồm có 3 cột tương ứng danh sách thư mục, danh sách ghi chú và khung soạn thảo ghi chú. Giao diện chưa được chau chuốt cho lắm vì cốt là định hình được các nút tính năng, sau đó rất có thể cần lời khuyên của nhiều người hơn về UI/UX cho Notas.

Hiện tại tôi đang triển khai Adapter đơn giản nhất để lưu trữ dữ liệu là LocalStorage của trình duyệt. Dữ liệu được lưu dưới dạng JSON để dễ dàng xử lý. Đây cũng là một trong những Adapter mà sẽ xuất hiện trong Notas, ngoài ra bạn cũng có thể tự triển khai lại Adapter lưu trữ dữ liệu nơi mà bạn muốn. Sau đó, tôi sẽ viết thêm một vài Adapter dành cho SQLite và Turso để đồng bộ hóa ghi chú trực tuyến.

Notas đã có thể thêm/sửa/xóa thư mục, thêm/sửa/xóa ghi chú - là các tính năng cơ bản nhất của một ứng dụng ghi chú. Ngoài ra, một vài tính năng cũng hữu ích khác như là ghim/bỏ ghim ghi chú lên đầu mục, đặt/gỡ mật khẩu cho ghi chú và Thùng rác cũng đã hoạt động (với một vài lỗi - nhưng không đáng kể :D).

Khó khăn

Có khá nhiều khó khăn mà tôi đang phải đối mặt.

Đầu tiên là thời gian, một vấn đề mà không khóc không được. Mỗi buổi tối chỉ dành được một vài tiếng để tập trung vào Notas vì ban ngày là thời gian cho công việc chính. Nhưng ngoài viết mã ra, cũng có nhiều việc khác cần phải làm như nghiên cứu, phân tích tính năng, cũng như lên phương án xử lý cho các vấn đề đang nhìn ra trước mắt.

Một trong những vấn đề đang thấy đó là đặt mật khẩu cho ghi chú. Hmm... cứ cho người dùng cài đặt một mật khẩu rồi sau đó sử dụng để khóa/mở khóa chẳng phải rất dễ sao? Nhưng hãy nhớ ai cũng có thể đọc mã thì chẳng phải ai cũng sẽ biết cách xử lý mật khẩu như thế nào hay sao? Vì thế việc bẻ khóa mật khẩu ở máy khách há sẽ rất dễ dàng. Nhưng đừng lo, tôi đã nghĩ ra một giải pháp để tăng tính bảo mật cho phần này, chỉ là chưa có thời gian để kiểm chứng. Hy vọng sang tuần tôi sẽ có thời gian để thử nghiệm.

Cuối cùng là vấn đề đồng bộ. Một ứng dụng ghi chú có thể trở nên vô nghĩa nếu thiếu đi mất tính năng này. LocalStorage chỉ lưu trữ được cục bộ cho nên Adapter này chắc chắn không thể dùng để đồng bộ được. Thay vào đó, tôi sẽ tận dụng Turso để làm một cơ sở dữ liệu trực tuyến, cái khó ở đây là làm sao thiết lập được cấu hình kết nối đến Turso và làm thế nào để người dùng thiết lập cấu hình cho Adapter một cách dễ dàng nhất.

Tổng kết

Với tất cả những gì đã làm được, Notas đã có thể sử dụng được các thao tác cơ bản, bên cạnh đó là rất nhiều khó khăn mà đang nhìn thấy. Nhưng tôi không phải là một người nghiêm túc với việc đặt mục tiêu cho lắm, mà mang hơi hướng của một kẻ "cứ làm đi, rồi sẽ xong cả thôi"!

Cao cấp
Hello

Tôi & khao khát "chơi chữ"

Bạn đã thử viết? Và rồi thất bại hoặc chưa ưng ý? Tại 2coffee.dev chúng tôi đã có quãng thời gian chật vật với công việc viết. Đừng nản chí, vì giờ đây chúng tôi đã có cách giúp bạn. Hãy bấm vào để trở thành hội viên ngay!

Bạn đã thử viết? Và rồi thất bại hoặc chưa ưng ý? Tại 2coffee.dev chúng tôi đã có quãng thời gian chật vật với công việc viết. Đừng nản chí, vì giờ đây chúng tôi đã có cách giúp bạn. Hãy bấm vào để trở thành hội viên ngay!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.

Bình luận (1)

Nội dung bình luận...
Avatar
Luc Tan1 năm trước
Em thấy các bài viết của anh cũng kh đến mức là dài, nội dung anh viết được truyền đạt theo cách kể chuyện - nói chuyện rất hay cho nên e đọc kh có cảm giác bị nhàm chán. Chúc anh vẫn luôn giữ lửa và năng lượng này để có thêm nhiều bài viết chất lượng
Trả lời
Avatar
Xuân Hoài Tống1 năm trước
Cảm ơn em, anh hay lồng ghép câu chuyện của mình vào các bài viết để dẫn dắt người đọc vào bối cảnh của mình vì như thế giúp cho bài viết có chiều sâu hơn. Kể cả thế vẫn rất khó để câu chuyện diễn ra một cách tự nhiên, và anh thì vẫn rèn luyện để viết tốt hơn mỗi ngày á 😄