Các nhà phát triển đứng sau Immich , một nền tảng quản lý ảnh mã nguồn mở, đã tạo ra thứ gì đó độc đáo trong thế giới phần mềm: một nhật ký công khai về kiến thức nguyền rủa - những khám phá kỹ thuật đau đớn khiến các lập trình viên đặt câu hỏi về lựa chọn cuộc sống của họ. Bộ sưu tập này gồm các lỗi khó chịu, hành vi kỳ quặc và những hạn chế kỹ thuật kỳ lạ đã chạm đến trái tim của cộng đồng lập trình, những người coi nó vừa như liệu pháp tâm lý vừa như tài liệu giáo dục.
Khái niệm này vượt xa việc theo dõi lỗi đơn thuần. Mỗi mục trong cơ sở dữ liệu kiến thức nguyền rủa của họ được commit cùng với bản sửa lỗi thực tế, tạo ra một bản ghi vĩnh viễn về cả vấn đề và giải pháp của nó. Cách tiếp cận này biến những trở ngại kỹ thuật khó chịu thành những trải nghiệm học tập có giá trị mà các nhà phát triển khác có thể hưởng lợi.
Sự hỗn loạn của hệ sinh thái JavaScript
Thế giới JavaScript xuất hiện nổi bật trong bộ sưu tập kiến thức nguyền rủa của Immich , và có lý do chính đáng cho điều này. Một vấn đề đặc biệt khét tiếng liên quan đến một thành viên cộng đồng người mà có hệ thống thêm khả năng tương thích ngược vào các dự án JavaScript phổ biến bằng cách giới thiệu hàng chục phụ thuộc gói bổ sung. Thực hành này đã tạo ra tranh cãi đáng kể, với một số nhà phát triển dành cả buổi tối để cố gắng loại bỏ những phụ thuộc không cần thiết này khỏi dự án của họ.
Cuộc thảo luận cộng đồng tiết lộ những lo ngại sâu sắc hơn về mô hình này. Một số người nghi ngờ động cơ có thể liên quan đến việc xây dựng uy tín hoặc thậm chí là rủi ro bảo mật chuỗi cung ứng tiềm tàng. Các gói được đề cập bao gồm những tiện ích đơn giản một cách phi lý, làm nổi bật cách hệ sinh thái JavaScript có thể trở nên cồng kềnh với những phụ thuộc tầm thường ít có mục đích thực tế.
Các vấn đề JavaScript/Node.js:
- bcrypt chỉ sử dụng 72 byte đầu tiên của chuỗi mật khẩu
- Đối tượng Date trong JavaScript: chỉ mục bắt đầu từ 1 cho năm/ngày, chỉ mục bắt đầu từ 0 cho tháng
- Các script npm thực hiện lời gọi HTTP đến registry trên mỗi lần thực thi
- Node.js phiên bản dưới v20.8: việc trộn lẫn ESM/CommonJS có thể gây ra lỗi segfault với --experimental-vm-modules
Những đặc điểm kỳ quặc của cơ sở dữ liệu và hệ thống
PostgreSQL đưa ra bộ thách thức riêng khiến nhóm Immich bất ngờ. Giới hạn 65.535 tham số của cơ sở dữ liệu có nghĩa là các thao tác chèn hàng loạt có thể thất bại thảm hại với các tập dữ liệu lớn. Mặc dù điều này có vẻ như một hạn chế hiển nhiên đối với các chuyên gia cơ sở dữ liệu, nhưng đây là loại chi tiết chỉ nổi lên khi bạn thực sự cố gắng chèn hàng nghìn bản ghi cùng lúc.
Một bất ngờ khác của PostgreSQL liên quan đến tính năng NOTIFY , hoạt động trong các giao dịch và có thể gây ra hoạt động write-ahead log bất ngờ. Những khám phá này làm nổi bật cách thức ngay cả các hệ thống cơ sở dữ liệu được thiết lập tốt cũng có những hành vi có thể làm bất ngờ các nhà phát triển làm việc ở quy mô lớn.
Hạn chế của PostgreSQL:
- Số lượng tham số tối đa mỗi truy vấn: 65,535
- Các thao tác NOTIFY ghi vào WAL mỗi 5 giây khi sử dụng với socket.io postgres-adapter
- Tất cả các thao tác bao gồm NOTIFY đều chạy trong các giao dịch
Cơn ác mông hệ thống tập tin đa nền tảng
Hệ thống tập tin trên các hệ điều hành khác nhau cung cấp một nguồn phong phú của kiến thức nguyền rủa. Các tập tin ẩn Windows không thể được mở với quyền ghi, một hạn chế trở nên đặc biệt có vấn đề khi kết hợp với tùy chọn hide dot files của SMB . Trong khi đó, macOS lặng lẽ thêm metadata và các tập tin lập chỉ mục vào các ổ đĩa di động, làm lộn xộn những gì lẽ ra là chuyển tập tin sạch sẽ.
Thế giới di động thêm một lớp phức tạp khác, với một số điện thoại lặng lẽ loại bỏ dữ liệu GPS khỏi hình ảnh khi các ứng dụng thiếu quyền vị trí. Mặc dù hành vi này thực sự là một tính năng bảo mật hoạt động như dự định, nó có thể gây bối rối cho các nhà phát triển không hiểu tại sao xử lý hình ảnh của họ đột nhiên mất thông tin vị trí.
Những Đặc Điểm Kỳ Quặc Của Hệ Thống Tệp:
- Windows : Các tệp ẩn không thể được mở bằng cờ "w"
- macOS : Tên tệp không phân biệt chữ hoa chữ thường theo mặc định, chuyển đổi NFC→NFD
- Mobile : Dữ liệu GPS bị loại bỏ khỏi hình ảnh đối với các ứng dụng không có quyền truy cập vị trí
- Kích thước EXIF có thể khác với kích thước hình ảnh thực tế
Tác động rộng lớn hơn
Mục kiến thức nguyền rủa được commit cùng với bản sửa lỗi cần thiết để giải quyết nó. Nhật ký này không chỉ mang tính giải tỏa mà còn biến mỗi trở ngại khó chịu thành một trải nghiệm học tập tích cực.
Cách tiếp cận này trong việc ghi lại các điểm đau kỹ thuật đã truyền cảm hứng cho các nhà phát triển khác xem xét các thực hành tương tự trong dự án của riêng họ. Sự minh bạch giúp xây dựng kiến thức cộng đồng đồng thời cung cấp một hình thức trị liệu kỹ thuật cho các nhà phát triển gặp phải những vấn đề này.
Bộ sưu tập kiến thức nguyền rủa của nhóm Immich đóng vai trò như một lời nhắc nhở rằng phát triển phần mềm đầy những gotcha bất ngờ, bất kể mức độ kinh nghiệm. Bằng cách chia sẻ những khám phá này công khai, họ đã tạo ra một tài nguyên có giá trị giúp các nhà phát triển khác tránh những cạm bẫy tương tự đồng thời xây dựng sự đồng cảm cho những thách thức phức tạp vốn có trong phát triển phần mềm hiện đại.
Tham khảo: Cursed Knowledge