nói dối e blog

Unicode Và Multibyte: Hành Trình Tối Ưu Hóa Hệ Thống

Thiết kế ban đầu của động cơ chúng tôi hoàn toàn dựa trên nền tảng Unicode. Tuy nhiên, sau quá trình phân tích yêu cầu thực tế, chúng tôi quyết định mở rộng hỗ trợ đồng thời cả hai định dạng Unicode và Multibyte. Để thực hiện điều này, tôi đã thêm một “đặc tính” (feature) có tên “unicode” trong tập tin cấu hình Jamfile, cho phép người dùng bật/tắt tùy chọn này linh hoạt. Nhờ đó, hệ thống có thể tự động sinh ra hai phiên bản tương ứng với từng định dạng.

无标题

Quản lý và Mở/Khóa Tài Nguyên

Quản lý và Mở/Khóa tài nguyên

Quản lý và Mở/Khóa tài nguyên

Quản lý và kiểm soát tài nguyên Vào cuối tuần, chúng tôi gặp phải một vấn đề đặc biệt. Các tài nguyên đang chạy cần được quản lý tập trung, và bản thân tài nguyên được quản lý thông qua cơ chế thu gom rác (GC). Tuy nhiên, trong một số trường hợp, tài nguyên cần được khóa (lock) để đảm bảo không bị dọn dẹp khi xảy ra GC. Ban đầu, chúng tôi dự định sẽ treo các tài nguyên đang được khóa vào một chuỗi liên kết đặc biệt khi thực hiện lock, và gỡ chúng ra khi unlock.

Căn Hộ Trên Đã Được Trang Trí Từ Một Thời Gian.

Tòa nhà văn phòng vốn yên tĩnh bỗng chốc trở nên ồn ào náo nhiệt kể từ khi công trình cải tạo tầng trên bắt đầu. Tiếng búa đục, máy khoan vang lên không dứt khiến tôi không thể tập trung làm việc. Đã hai lần tôi tìm đến ban quản lý tòa nhà để khiếu nại, lần đầu họ hứa hẹn sẽ nhắc nhở thợ thi công, lần sau thì chỉ nhận được một cuộc điện thoại xã giao “đã trao đổi rồi”. Thế nhưng điều đáng sợ nhất vẫn chưa đến - từ vài hôm nay, đúng 6 giờ chiều mỗi ngày, những cơn rung lắc dữ dội từ hệ thống dầm trần nhà bất ngờ ập đến như tiếng sấm rền. Bụi vữa rơi lả tả, đồng nghiệp phải đeo khẩu trang ngay trong văn phòng, cả phòng làm việc biến thành trường quay phim chiến tranh với cảnh ai cũng phải hét toáng lên để giao tiếp. Có lẽ vì thế mà tôi càng thấm thía giá trị của những giờ phút yên tĩnh, thứ quý giá hơn cả vàng bạc.

Con Số Kỳ Diệu Để Chuyển Đổi Từ Double Sang Int

Cách đây không lâu tôi đã viết một bài blog về tối ưu hóa hàm _ftol. Hôm nay, khi đang nghiên cứu mã nguồn Lua 5.1, tôi tình cờ phát hiện một mẹo cực kỳ thông minh và thú vị. Hóa ra việc chuyển đổi từ kiểu double sang kiểu int có thể đơn giản đến không ngờ qua đoạn mã sau:

1
2
3
union luai_Cast { double l_d; long l_l; };
#define lua_number2int(i,d) { volatile union luai_Cast u; \
  u.l_d = (d) + 6755399441055744.0; (i) = u.l_l; }

Điều kỳ diệu của macro này nằm ở chỗ nó hoạt động chính xác cho cả số dương và số âm dưới dạng số double, thực hiện phép chuyển đổi sang số nguyên 32-bit theo cơ chế làm tròn tự nhiên. Con số 6755399441055744.0 thực chất là 1.5 × 2⁵². Khi cộng một số nguyên có giá trị tuyệt đối nhỏ hơn 2³¹ với con số “thần kỳ” này, theo quy tắc cộng số dấu phẩy động (theo dạng biểu diễn khoa học), phần mũ lớn hơn sẽ được ưu tiên căn chỉnh.

EPSILON KHÔNG PHẢI LÀ 0.00001!

Hôm nay đọc được một bài blog rất thú vị về số học dấu phẩy động (floating-point) và hằng số EPSILON. Vấn đề này mình đã từng nghiên cứu kỹ nhiều lần trước đây. Lần đầu tiên là khi làm dự án mô phỏng bi-da trong công ty, mình đã viết một bài phân tích chi tiết trên wiki nội bộ. Sau đó cũng từng đăng tải suy nghĩ về chủ đề này trên diễn đàn cá nhân. Bạn đọc quan tâm có thể xem tại đây:

Freebsd Bị Gfw Chặn

Hiện tại trang web chính thức của FreeBSD () đã bị chặn bởi GFW, khiến nhiều người dùng không thể truy cập được. Đồng nghiệp của tôi đang phàn nàn về việc không thể thực hiện cvs update và commit code như thường lệ.

Cá nhân tôi vẫn luôn đánh giá cao hệ thống quản lý source code của FreeBSD. Dự án được tổ chức rất khoa học, kho mã nguồn rõ ràng, dễ tìm kiếm tài nguyên cần thiết. Tuy nhiên hiện chưa rõ phải liên hệ cơ quan nào để khiếu nại về việc chặn truy cập này.

0%