
... Hôm nay, hên làm sao, lục trong máy thấy có một vài đống chữ, tiện tay hốt lên đây cho blog đỡ hiu quạnh
...Những đoạn code "cân não"...
Trong series "Những đoạn code cân não", Invisible sẽ lần lượt giới thiệu với các bạn làm quen những lập trình viên kỳ cựu trong làng coder của thế giới... Hôm nay chúng ta hân hoan chào đón LTV: "Lông Vịt"
!!!...1. Randomized...
Lông Vịt là một LTV kỳ cựu, anh đã thử qua kô biết bao nhiêu công ty trong một khoảng thời gian đủ ngắn mà vẫn chưa muốn dừng chân. Hôm nay đã là tuần thứ 2 anh làm việc tại công ty Ep-I-T kể từ khi anh được sếp giao cho module *chọn nhân viên tư vấn cho khách hàng*. Đại ý là khi nhận được một request từ khách hàng trong giờ hành chánh, nếu 2 nhân viên tư vấn đang available thì sẽ chọn random một nhân viên để tư vấn cho khách hàng. Module của anh Lông Vịt chạy cực kỳ tốt, nhưng có cái gì đó sai sai... Sau khi dò qua hàng ngàn dòng code, sếp của anh đã phát hiện:
ids = SelectIdleUsers(2);
if (hour >= 7 && hour < 18) {
if (rand() > 0.5) {
Owner->LoadById(ids[0]);
}
if (rand() < 0.5) {
Owner->LoadById(ids[1]);
}
} "Cân não" ở chỗ nào chưa ai biết trừ lão sếp, cũng kô biết Lông Vịt sẽ ở lại công ty Ep-I-T bao lâu, nhưng chắc chắn anh sẽ trở lại vào một ngày gần đây với "Những đoạn code cân não" mới
...2. SQL - A "sequential" query language??...
Lông Vịt ra trường đã lâu, nhưng hiếm ai biết một quá khứ hào hùng của anh lúc còn là SV. Thời đó, khi mọi người đang say sưa lưu trữ và đọc dữ liệu một cách thủ công dùng flat file: text có, binary có, linh tinh có... thì Lông Vịt đã tiếp cận với "công nghệ" mà anh ấy gọi là "truy vấn tuần tự". Mọi DBMS như Oracle, DB2, MSSQL, PostgreSQL, MySQL... anh đều ít nhất một lần... chạy thành công vài câu truy vấn
. Biêt được khả năng bẩm sinh của anh, lần này sếp giao anh viết một đoạn code để cập nhật một logging table... Lông Vịt sớm nhận ra ngay những bảng "liên quan" khi sử dụng bộ quản lý đi kèm *Oracle Enterprise Manager*:tbl_monthly_log: [time], [user_id], [action_id], [log_data]
tbl_action: [action_id], [action_name], [action_level]
tbl_global_log: [time], [user_id], [action_id], [log_data]
Đại ý là hệ thống này cần theo mọi hành động của từng user trên mỗi tháng. Đến cuối tháng sẽ chọn lựa những hành động "đáng lưu ý" để lưu trữ lại và xóa đi những dữ liệu logging trong tháng (xóa nội dung table tbl_monthly_log). Hiểu vấn đề, Lông Vịt bắt tay vào coding... Dưới đôi tay thon dài như trái chuối, cộng với kỹ năng *gõ phím kô thèm nhìn màn hình* của Lông Vịt, hàng ngàn dòng code tuôn ra trên màn hình... Qủa là *phản xạ kô điều kiện* của Lông Vịt (mà *Sinh Học* gọi nó là "bản năng" còn giới *Coder* gọi nó là "trâu bò"
): ResultSet rs = dbRequest.ExecuteQuery("select ml.*, a.action_level from tbl_monthly_log as ml, tbl_action as a where ml.action_id = a.action_id");
// Populate result-set to a list of LogRecord
LogRecords records = GetLogRecords(rs);
while (records.HasMoreRecord()) {
LogRecord record = records.NextRecord();
if (record.GetActionLevel() >= LOGGING_LEVEL) {
LPSTR lpzSQL = CreateSQL(
"insert into tbl_global_log (time, user_id, action_id, log_data) values (%u, %d, %d, %s)", record.GetTime(), record.GetUserId(), record.GetActionId(), record.GetLogData());
dbRequest.ExecuteUpdate(lpzSQL);
FreeSQL(lpzSQL);
}
}
// Clean up...
...
Kô tốn nhiều thời gian để coding và kiểm lỗi, đoạn code anh một lần nữa được đánh giá là "perfect"... Nhưng than ôi, khi chạy trên dữ liệu thật (cỡ vài chục/trăm ngàn records) thì anh mất gần hàng chục phút ngóc mỏ ngồi đợi... Lần này sếp kô tự thân đến xem nữa mà lại sai một thằng SV mới ra trường, kinh nghiệm của nó mà theo anh, chỉ mới bằng ngón út của mình, đến làm công việc gọi là "xem code thử"... Sự tự ái, khinh thường, bối rồi, xấu hổ, ngưỡng mộ dần dần chuyển hóa trên khuôn mặt của anh... Trời, kô biêt thằng quỉ nó làm cái quái gì mà thời gian chạy giảm đi 10 lần là ít... Lông Vịt chỉ còn biêt câm nín, nhìn như trời trồng vào cái màn hình LCD 24 inches... Hix, anh thầm nghĩ *tuổi đời có phải là thước đo cho kinh nghiệm kô*
??...
.. hehehe...
, ý nói là câu đó nó "Toán" quá... Ừh, đã Toán thì cho Toán luôn 

...

