1 điểm bởi GN⁺ 2024-01-15 | 1 bình luận | Chia sẻ qua WhatsApp
  • Citadel là ứng dụng quản lý thư viện sách điện tử, hướng tới UX tốt hơn và cảm giác nhanh hơn trong khi vẫn duy trì thư viện sách điện tử mà Calibre có thể đọc được
  • Mục tiêu cốt lõi là tương thích ngược với Calibre, giao diện dễ dùng và đẹp mắt, cùng hiệu năng cho cảm giác nhanh hơn nhiều so với Calibre và tuyệt đối không chậm hơn
  • Hiện tại đây là phần mềm giai đoạn đầu, nên có thể có lỗi và thiếu tính năng; ứng dụng có thể bị crash, thiếu các chức năng cơ bản hoặc làm hỏng thư viện sách điện tử
  • Citadel không phải là trình đọc sách điện tử hay trình chỉnh sửa nội dung sách điện tử; ứng dụng mở tệp bằng app mặc định và tập trung vào quản lý metadata như tiêu đề
  • Có thể tải bản ổn định từ Releases, bản phát triển từ GitHub Actions, và việc phát triển cần Bun cùng Rust

Citadel hướng tới điều gì

  • Citadel là ứng dụng quản lý thư viện sách điện tử, với tiền đề cốt lõi là khả năng tương thích ngược với Calibre
  • Thư viện mà Citadel chỉnh sửa phải có thể được Calibre đọc
  • Dự án có ba mục tiêu
    • Tương thích ngược với Calibre: thư viện do Citadel chỉnh sửa phải có thể được Calibre đọc
    • UX tốt: phải dễ dùng và đẹp mắt
    • Hiệu năng: phải cho cảm giác nhanh hơn nhiều so với Calibre và tuyệt đối không được chậm hơn

Những điều không làm

  • Citadel không phải là trình đọc sách điện tử
    • Đã có nhiều ứng dụng đọc sách điện tử tốt, và Citadel sẽ mở tệp bằng ứng dụng mặc định của người dùng
  • Citadel không phải là trình chỉnh sửa nội dung sách điện tử
    • Nếu mục đích là chỉnh sửa nội dung thân sách thay vì metadata như tiêu đề, thì đây không phải công cụ thay thế
  • Không hướng tới tương đương 100% tính năng với Calibre
    • Chủ yếu là ở mảng plugin
    • Một số tính năng nâng cao của Calibre có thể sẽ không được làm

Trạng thái hiện tại và tải xuống

  • Citadel đang ở giai đoạn phát triển rất sớm
    • Có thể bị crash
    • Có thể thiếu các tính năng cơ bản
    • Có thể làm hỏng thư viện sách điện tử
  • Nếu dùng Citadel với thư viện Calibre thì cần sao lưu định kỳ
  • Có thể tải các bản build tương đối ổn định từ Releases
  • Có thể tải các bản build phát triển từ GitHub Actions
  • Tác giả đề nghị báo cáo mọi vấn đề hoặc lỗi crash gặp phải khi dùng bất kỳ phiên bản nào

Lưu ý cài đặt trên macOS

  • Bản build cho macOS hiện vẫn chưa được ký
  • Nếu mở trực tiếp Citadel.app, sẽ hiện cảnh báo tệp bị “damaged”
  • Có thể khắc phục bằng cách xóa thuộc tính Quarantine của tệp

Phát triển và build

  • Điều kiện tiên quyết để phát triển là cài BunRust
  • Cài package:
    bun install
    
  • Chạy môi trường phát triển:
    bun run dev
    
    # or just bun dev
    
  • Các lệnh lint và format như sau
    • Format toàn bộ mã: bun format
    • Kiểm tra format toàn bộ mã: bun format:check
    • Lint toàn bộ mã: bun lint
    • Format backend: bun format:backend
    • Lint backend: bun lint:backend
    • Format frontend: bun format:web
    • Lint frontend: bun lint:web
  • Có thể chạy bản xem trước của ứng dụng mà không cần backend
    • Vì giả định backend Rust tồn tại dù thực tế không có, nên sẽ hiện lỗi
    bun dev:app
    
  • Có thể tạo bản build production bằng các lệnh sau sau khi đã chuẩn bị đủ điều kiện phát triển
    bun install
    bun run build
    

Cập nhật và các dự án liên quan

  • Citadel có thể kiểm tra cập nhật ứng dụng và cài đặt khi được yêu cầu
  • Có thể tắt việc tự động kiểm tra cập nhật trong Settings tại Auto updates: On/Off
  • Việc cài đặt luôn được thực hiện một cách tường minh, và câu chữ trên UI là Install and restart
  • Chi tiết về cấu hình cho maintainer và quy trình phát hành có tại docs/updater-and-releases.md
  • Citadel lấy Calibre làm điểm tham chiếu và được truyền cảm hứng từ Calibre redesign Figma prototype

1 bình luận

 
GN⁺ 2024-01-15
Ý kiến trên Hacker News
  • Có thể sẽ có người hỏi: "Tại sao không đóng góp cho các dự án hiện có như Calibre Web mà lại làm ứng dụng mới?" Câu trả lời là chỉ đơn giản vì muốn làm
    Hiện tại đây là một dự án sở thích, nên thay vì mở rộng các dự án có sẵn, tôi hứng thú hơn với việc tự tay làm phần mềm một cách vui vẻ, dù có hơi thô ráp. Citadel được thiết kế để tương thích ngược với Calibre, nên vẫn có thể tiếp tục dùng Calibre Web
    Phần backend kết nối với Calibre cũng đã được tách ra thành một thư viện riêng, và sau này tôi muốn để các dự án khác cũng có thể dùng. Có lẽ cũng có thể làm một CLI cho thư viện Calibre

    • Hơi tiếc là ngay cả trên diễn đàn hacker mà cũng phải đưa ra kiểu giải thích này. Điều đó làm tôi nhớ đến một câu tôi rất thích trong bài phát biểu tốt nghiệp của John Carmack:
      "Trong nhiều lĩnh vực, lời khuyên đừng tái phát minh cái bánh xe gần như đã trở thành lẽ thường. Nhưng đôi khi tôi vẫn muốn khuyên bạn cứ thử làm đi. Chỉ riêng quá trình đó cũng khiến bạn tiến bộ hơn, và rồi những cái bánh xe tốt hơn cũng xuất hiện theo cách đó. Bởi vì có người cứ đơn giản là thử."
      https://www.youtube.com/watch?v=YOZnqjHkULc
    • Có vẻ như việc dẫn dắt một cuộc viết lại UI từ đầu còn là một công việc lớn hơn nhiều
      Calibre khá đau khổ để sử dụng ngay cả khi bạn biết nó có những tính năng gì, nên rất khó để giới thiệu cho cả ông bà lẫn người rành công nghệ
    • Câu "hiện tại là một dự án sở thích" có hơi hướng thời kỳ đầu của Linus Torvalds: "chỉ là một sở thích thôi, sẽ không to lớn và chuyên nghiệp như gnu đâu" [0]
      Dù vậy vẫn hy vọng dự án sẽ thành công
      [0] https://www.cs.cmu.edu/~awb/linux.history.html
    • Calibre là một thế lực mạnh về mặt quản lý ebook, nhưng về trải nghiệm sử dụng và góc độ nhà phát triển thì tôi chưa bao giờ thấy thỏa mãn. Nó chưa từng được thiết kế như một thư viện lưu trữ có thể truy cập qua web, và cá nhân tôi có trải nghiệm rất tệ với nó
      Nếu có một đối thủ đủ vững chắc, cởi mở và hiện đại hơn, được xây dựng với thư viện lưu trữ được host trong đầu, tôi có lẽ sẽ chuyển sang dùng ngay
    • Có lẽ chỉ cần nói rằng "nó không phù hợp với nhu cầu của tôi và tôi phải viết lại backend hoàn toàn". Khi hướng đi của ứng dụng bạn muốn khác xa những gì đang có như vậy, tôi không nghĩ cần phải biện minh cho lựa chọn đó
  • Đôi khi tôi nghĩ nếu Calibre trông đẹp hơn một chút thì mọi người đã nhận ra nó tuyệt đến mức nào. Thành thật mà nói thì nó không tệ đến vậy, và cá nhân tôi còn thích nó, nhưng có vẻ nhiều người không vượt qua được phần hình thức

    • Calibre cực kỳ chậm và thiếu ổn định. Để nhập một thư viện lớn, ví dụ cỡ 100GB, tôi phải mất đúng nghĩa là vài tuần, và còn phải thêm dần từng ít một
      Nó liên tục bị crash, quá trình thì chậm đến mức tôi phải chuyển sang một máy riêng. Tìm kiếm qua giao diện web cũng thấy rất chậm
      Chưa kể UI thiếu trực quan. Với thứ đóng vai trò như thư viện, nó còn kém xa cả danh sách tác giả theo thứ tự bảng chữ cái/abc kiểu thư viện truyền thống
    • Vấn đề tôi gặp là Calibre sụp đổ hoàn toàn khi vượt quá 20.000 ebook
      Tôi hiểu đa số mọi người có lẽ chỉ có khoảng 10 đến 300 cuốn, nhưng tôi đã thử dùng Calibre cho vài thư viện lớn và nó thực sự không chịu nổi
      Quyết định cứ khăng khăng dùng SQLite cũng không giúp ích gì. Khoảng năm 2016 tôi đã mở một PR, nhưng người bảo trì khá phản đối việc thay đổi tầng cơ sở dữ liệu hoặc làm nó có thể thay thế được
    • Nếu ý bạn không chỉ là mặt thẩm mỹ mà là toàn bộ UI/UX thì tôi đồng ý. Calibre là một ứng dụng rất mạnh và nhiều tính năng, nhưng UI thô và thiếu trực quan đã kéo nó xuống
    • Không phải là không tệ, mà thực sự là tệ. Nếu bạn đang quản lý kiểu như thư viện công cộng và muốn kiểm soát mọi chi tiết thì có thể ổn, nhưng nếu chỉ muốn lưu thư viện cá nhân thì lúc nào cũng có quá nhiều câu hỏi kiểu "làm X thế nào?"
      Hơn nữa, chỉ mất vài giây để dựng một container calibre-web và có ngay UI gọn gàng cùng OPDS, nên tôi không hiểu tại sao lại phải chịu đựng cái "thẩm mỹ" đó
    • Với tư cách một người đọc ebook thông thường, tôi rất đồng ý. Nếu Calibre có một đội ngũ thiết kế, có lẽ nó đã phổ biến và được dùng rộng rãi hơn nhiều
      Nó không trực quan và UI/UX khá tệ. Nó đúng kiểu lời nguyền mà các ứng dụng mạnh mẽ thường gặp phải
      Dù vậy hôm nay tôi vẫn sẽ thử dùng lại xem có thể làm quen được không. Đặc biệt với người dùng nâng cao thì đây thực sự là một sản phẩm miễn phí rất tuyệt vời
  • Dự án hay đấy. Tôi thích các tính năng của Calibre, nhưng cũng thấy UI của nó khá bí bách, nên đã bắt đầu thiết kế một giao diện giống như sự pha trộn giữa iTunes thời trước Apple Music và iBooks.
    Hiện tôi mới làm được một màn hình, có thể xem ở đây: https://www.figma.com/file/m8qaYbPSnxiFPDPbuYtz2w/Calibre-re...
    Câu hỏi cốt lõi là làm sao thể hiện các tính năng chính của Calibre trong một UI có cảm giác như ứng dụng native trên macOS
    Nếu không nhắm tới đa nền tảng, có lẽ khi rảnh tôi sẽ thử biến nó thành một ứng dụng SwiftUI với backend Rust
    Việc bám theo quá trình phát triển của Calibre để bảo trì có thể sẽ khó, nhưng trông như một dự án sở thích khá thú vị

  • Hôm qua tôi mới nhận ra là trên Ubuntu 22.04, sau khi kết nối máy đọc Kobo thì chỉ cần chép file epub vào thư mục root/ tại điểm mount /media/oakhaven/koboreader là được. Khi đó nó sẽ xuất hiện trong danh sách sách trên thiết bị
    Không hiểu sao tôi cứ nghĩ việc đưa sách lên Kobo là một việc phức tạp, nên từ trước đến giờ mỗi khi chuyển sách từ laptop sang Kobo tôi chỉ dùng Calibre
    Tôi biết Calibre còn có nhiều chức năng khác, nhưng tôi không thích giao diện của nó, nên thật vui vì giờ không còn phải dùng Calibre hay ứng dụng tương tự nữa

    • Đây chính là một trong những lý do tôi mua Kobo thay vì Kindle vài năm trước. Cắm vào là nó được mount như một thiết bị lưu trữ USB đại trà thông thường, rồi chỉ cần chép file vào
      Không cần định dạng đặc biệt nào cả, và các định dạng chuẩn như ePub hoạt động rất tốt
      Vì thế tôi luôn thắc mắc tại sao Kindle vẫn có thể nổi tiếng đến vậy. Có thể là lợi thế người đi trước, nhưng một máy đọc sách điện tử không đọc được ePub và PDF thì giống như một máy nghe nhạc không phát được MP3 và AAC vậy
    • Tôi khuyên nên cho file epub chạy qua kepubify [1] trước khi chuyển sang máy đọc sách điện tử
      [1]: https://pgaskin.net/kepubify/
    • Tôi thiết lập từ lâu rồi, nhưng còn có thể đồng bộ qua ssh nữa, nên có thể đồng bộ đệ quy thư mục bằng kết nối không dây
      Hình như tôi cho sách vào bằng USB trước, rồi đồng bộ tin tức hằng ngày và sách bổ sung bằng rsync. Một số nội dung được tạo tự động, như thu thập tự động hoặc đăng ký qua email, rồi được đưa vào thư mục; còn một số khác thì tôi thêm thủ công, giống như chép sách mới sau khi mua
      Thật ra đây không phải vấn đề quá phức tạp, nhưng Calibre làm được nhiều việc hơn rất nhiều ngoài chuyện sao chép sách vào một cấu trúc thư mục nhất định
    • Tôi đã khá bất ngờ khi biết chuyện đó làm được. Tôi cứ tưởng Calibre đang làm điều gì đặc biệt. Vì vậy Citadel có tính năng "sao chép vào thư mục". Bạn có thể chép sách điện tử sang ổ đĩa ngoài
      Tôi không chắc nó có thực sự dễ hơn việc chỉ mở thư mục rồi copy/paste hay không, nhưng Citadel sẽ cập nhật tệp metadata mà Calibre dùng khi phát hiện những cuốn sách có trên thiết bị, để không cần đọc mọi file trong thư mục
    • Dùng Kobo có cần tài khoản không? Hay là chỉ cần mua máy, chép epub vào thư mục đó rồi đọc luôn được?
  • Trông ổn đấy. Mới tuần trước tôi còn thử quay lại dùng Calibre, rồi lại bị hút vào cái hố đen UI đó. Tôi từng nghĩ đến chuyện đóng góp phần UI/UX, nhưng có vẻ sẽ thành một dự án kéo dài nhiều năm
    Thay vào đó, có khi tôi có thể giúp phần UI/UX cho dự án này

    • Qua nhiều năm theo dõi, tôi có cảm giác dự án Calibre nhìn chung không mấy chào đón các cải tiến. Kovid Goyal đã có sẵn thứ ông ấy muốn, và nếu bạn muốn một thứ khác thì có lẽ phải fork rồi tự duy trì lấy
      Ông ấy đã làm được một công việc đáng kinh ngạc, nhưng cũng là kiểu người có gu rất mạnh, nên dù người khác có đề nghị làm giúp thì với một số thứ ông ấy có thể nhanh chóng và khá tùy tiện trở nên kỳ lạ là thù địch
    • Tôi không dùng Calibre đủ lâu để thấy UI của nó khó chịu. Cứ vài tháng tôi mới dùng một lần, tối đa khoảng 10 phút. Nhập Epub, cập nhật metadata, rồi gửi sang thiết bị
      Sau đó đọc sách trong vài tháng rồi lặp lại quy trình nhập sách
    • Ở góc nhìn khác, tôi chưa từng gặp vấn đề gì với UI của Calibre và thường hoàn thành việc mình muốn khá nhanh và hiệu quả
      Thành thật mà nói tôi khá tò mò, có ví dụ nào về ứng dụng smartphone native vừa giàu tính năng như Calibre mà lại cung cấp chúng theo cách tốt hơn và dễ hơn đáng kể không?
  • Điểm hay là đây là một dự án sở thích đã được phát hành thật sự. Nhìn cũng rất gọn gàng. Và calibre CLI chắc chắn là thứ được hoan nghênh. Tôi ghét phải bấm qua năm lớp menu mới vào được chỗ cần tìm
    Nếu phần "trình đọc" và "trình chỉnh sửa" không phải là mục tiêu được nhắm tới một cách rõ ràng, thì tôi tò mò Citadel thực sự làm gì cho người dùng. Chủ yếu là một cổng để xem, sắp xếp và nhấp vào sách thôi sao? Có lộ trình nào với nhiều tính năng hơn không?

    • Cách tôi dùng Calibre chủ yếu là gom epub về một chỗ, rồi thỉnh thoảng đồng bộ với máy đọc sách điện tử. Khi thêm sách, cần lấy metadata như tiêu đề, ISBN
      Citadel hỗ trợ chỉnh sửa metadata như tên sách, tác giả, và sau này là thẻ cùng các cột tùy chỉnh; thực ra hiện đã hỗ trợ một phần rồi. Điều đó là chắc chắn. Đồng bộ thiết bị cũng sẽ được thêm vào theo thời gian, và tính năng tải metadata từ các nguồn trực tuyến cũng dự kiến sẽ được bổ sung
      Tuy vậy, không có kế hoạch chỉnh sửa nội dung sách hay tích hợp trình đọc sách điện tử. Đã có rất nhiều ứng dụng và thiết bị đọc ebook rất tốt rồi, và việc chỉnh sửa epub có lẽ không phổ biến bằng quản lý bộ sưu tập
      Không có lộ trình cụ thể, nhưng luôn sẵn sàng đón nhận phản hồi và ý tưởng
      Ngoài ra, các tính năng như chuyển đổi định dạng và gỡ DRM có lẽ cũng sẽ được thêm vào. Lý tưởng nhất là triển khai chúng bằng crate hoặc plugin để việc mở rộng trở nên dễ dàng hơn
    • Có vẻ calibre CLI ở đây mang nghĩa quản lý bộ sưu tập sách, nhưng nếu bạn chỉ muốn chuyển đổi sách thì Calibre đã có sẵn CLI tên là ebook-convert. Nó hỗ trợ nhiều định dạng tệp như epub, pdf, azw3, mobi
      Ví dụ:
      ebook-convert file.epub file.azw3
  • Trông thật sự rất tuyệt, tôi định sẽ xem thử. Trớ trêu là gần đây tôi cũng làm một ứng dụng desktop để quản lý audiobook bằng đúng stack này, tức Rust + Tauri + Svelte
    Nếu có ai quan tâm thì xin quảng bá luôn: https://gitlab.com/fonner/audiobook-locker#audiobook-locker

    • Tuyệt đấy. Tôi cũng từng nghịch Tauri một chút trong vài dự án trước đây
      Tôi tò mò vì sao bạn chọn Svelte và Tauri cho dự án này. Bạn đã quen với chúng từ trước rồi à?
    • Tôi định xem qua dự án này để tìm cảm hứng
  • Hơi lạc đề một chút, nhưng cách chạy này đã làm ngày của tôi vui hơn
    bun dev -- -- -- -- --server ...

    • Giờ tôi lại tò mò không biết chuyện gì đang xảy ra ở đây
  • Thú vị đấy. Tôi cũng đã bắt đầu làm một dự án tương tự với ý tưởng gần giống như vậy được một thời gian, nhưng thay vì ứng dụng native thì tôi chọn SvelteKit và trình duyệt
    https://github.com/project-kiosk/kiosk
    Tôi không giữ được động lực đủ lâu để hoàn thành nó

    • Trông ổn đấy. Mong là bạn sẽ tiếp tục làm, tôi muốn thử nó
  • Một bài viết ngắn về Citadel: https://denhoff.ca/posts/replacing-calibre