Tất cả dự án

Dự án cá nhân11/2026 – hiện tại

EasyDock

Tiện ích hằng ngày cho Mac trong một ứng dụng thanh menu: bấm Dock để thu nhỏ, ⌘Tab giữa các cửa sổ, clipboard mã hoá, theo dõi và dọn dẹp máy. Phiên bản 1.3.1.

Loại
Dự án cá nhân
Thời gian
11/2026 – hiện tại
Công nghệ
Swift 6SwiftUIAppKitAccessibilityScreenCaptureKitCryptoKitGRDBSparklemacOS

Tính năng

  • Bấm icon trên Dock của ứng dụng đang dùng để thu nhỏ các cửa sổ của nó và đưa ứng dụng dùng trước đó lên; bấm lần nữa, tất cả trở lại, giống taskbar của Windows.
  • ⌘Tab chuyển giữa các cửa sổ chứ không chỉ ứng dụng: mỗi cửa sổ kèm hình và tiêu đề, dùng gần nhất đứng đầu, kể cả cửa sổ đã thu nhỏ và ở Space khác, của mọi desktop hoặc chỉ desktop hiện tại.
  • Lịch sử clipboard gồm văn bản, văn bản định dạng, hình ảnh và file, tìm kiếm và ghim được, mở cạnh con trỏ bằng ⌘⇧V và dán thẳng vào ứng dụng đang dùng.
  • Hệ thống: CPU từng nhân, GPU, bộ nhớ, ổ đĩa, sức khoẻ pin, nhiệt độ và mạng, biểu đồ một giờ hoặc một ngày qua, Thoát hoặc Buộc thoát mọi ứng dụng và tiến trình.
  • Dọn dẹp: cache và phần thừa sau khi build, file lớn, mục cũ trong Downloads và trình gỡ ứng dụng liệt kê mọi ứng dụng kèm dung lượng và lần dùng gần nhất, gỡ nhiều ứng dụng một lượt cùng những gì chúng để lại trong Library và nhận ra ứng dụng bị kéo vào Thùng rác; mọi thứ được xem trước và chuyển vào Thùng rác.
  • Mục chạy nền: các launch agent và daemon mà ứng dụng đã cài, kèm ứng dụng chủ, đang chạy hay không và bộ nhớ dùng.
  • Vùng thả: một chiếc kệ nằm trên mọi cửa sổ cho tệp, hình ảnh, liên kết và chữ, mở bằng cách lắc tệp đang kéo, kéo lên tai thỏ hoặc bấm ⌃⌥Z.
  • Chuyển đổi nhanh: từ menu chuột phải của Finder hoặc Vùng thả, đổi ảnh sang WebP, AVIF, HEIC, JPEG hoặc PNG và video sang MP4, H.264 hoặc HEVC, mỗi kết quả là một tệp mới cạnh tệp gốc.
  • Giải nén: tệp RAR, 7z, ZIP, TAR, GZ, XZ, ZST, CAB và ISO, có mật khẩu hay chia nhiều phần, bằng cách bấm đúp, từ menu chuột phải của Finder hoặc Vùng thả; các tệp được giải ra cạnh tệp nén và không tệp nào bị ghi đè.
  • Công cụ: Luôn ở trên giữ bản phản chiếu trực tiếp của cửa sổ đã ghim nằm trên các cửa sổ khác, công cụ lấy màu copy màu bất kỳ trên màn hình theo sRGB, và Giữ máy thức giữ máy không ngủ trong một khoảng thời gian hoặc khi các ứng dụng chọn sẵn đang mở.
  • Bảng trên thanh menu có công tắc cho từng tính năng, tiếng Anh và tiếng Việt, giao diện sáng và tối.

Điểm kỹ thuật

  • ⌘Tab của hệ thống là cài đặt chung của cả máy và tồn tại lâu hơn app: một tiến trình canh, chính file thực thi chạy lần thứ hai, bật lại nó kể cả khi EasyDock bị kill, và một nhịp kiểm tra mỗi nửa giây trả nó cho macOS khi quyền Accessibility bị thu hồi hoặc ô mật khẩu bật secure input.
  • Cửa sổ thật được nhận ra qua các Space của window server, nhờ đó tìm được cả cửa sổ ở desktop khác và trong dải của Stage Manager; mọi lệnh không công khai được tra theo tên lúc chạy, nằm trong một file, nên thiếu lệnh nào thì tính năng đó tự tắt thay vì crash.
  • Event tap bàn phím chỉ quyết định; việc đưa cửa sổ lên chạy sau khi nó trả về, nên một ứng dụng bị treo không bao giờ giữ được bàn phím.
  • Mục clipboard được niêm phong bằng AES-GCM với khoá trong Keychain đăng nhập, bản xem trước niêm phong riêng để danh sách không bao giờ giải mã cả hình; dòng đã xoá bị ghi đè, nội dung từ trình quản lý mật khẩu hay ứng dụng bị loại trừ bị từ chối trước khi đọc.
  • macOS không cho ứng dụng nào đặt cửa sổ của ứng dụng khác lên trên cửa sổ đang dùng, nên Luôn ở trên dùng ScreenCaptureKit phát cửa sổ đã ghim vào một panel nổi của riêng nó, chỉ khi cửa sổ đó bị che.
  • Image I/O đọc được WebP nhưng không ghi được, nên Chuyển đổi nhanh dùng libwebp cho WebP, để AVIF, HEIC, JPEG và PNG cho Image I/O và video cho AVFoundation; không có gì rời khỏi máy.
  • Giải nén chạy 7-Zip 26.05, build từ mã nguồn gốc không sửa, như một chương trình riêng trong sandbox chỉ được đọc tệp nén và ghi vào cạnh nó; chỉ bộ đọc của định dạng mà các byte đầu tệp cho thấy được phép chạy, mọi thứ giải ra giữ dấu cách ly của tệp nén, và tên tệp ZIP từ các công cụ Windows cũ được đọc theo đúng bảng mã của chúng.
  • 258 test: 203 trong package lõi, chạy không cần giao diện, và 55 trong app.