Một sự cố do mình, dù hy hữu nhưng đã xảy ra, mà mình nghĩ nên ghi lại để
sau này không ngu người mà mắc phải nữa.
Thầy CS102 giao cho bọn mình bài tập về nhà là viết một chương trình hỗ trợ
copy file, dùng đọc/ghi file tập tin nhị phân để xử lý và
người dùng tương tác với chương trình qua các command-line argument. Chính vì phần in đậm mà mình quyết định viết code trên máy ảo Linux vì mình
viết shell để test khá ổn, sau đó sync file về Windows qua shared
folder.
Bước ngoặt là đây: sau 4 tiếng đồng hồ code đến mụ mị đầu óc, mình cảm thấy
code của mình đã khá ổn và chỉ cần test trên Windows nữa là xong. Sync file
xong, mình lên Windows, bật PowerShell lên, gõ như một vị thần
gcc -o copy.c c và bùm, file mã nguồn của mình biến
mất khỏi file explorer.
(Câu lệnh trên đáng lẽ phải là "gcc -o c copy.c" để kích hoạt trình biên
dịch gcc dịch file copy.c thành file c.exe. Khi cần gọi chương trình, mở
terminal trong thư mục cùng cấp và gõ ./c là chạy được, không cần phải mở
trên IDE chi cho mệt.)
Chưa đủ tệ hả? Tiếp nhé? Mình move file nguồn từ Linux vào shared folder,
nghĩa là chỉ có 1 file nguồn duy nhất, và nó đã bay màu. Hoang mang
không? Có chứ! Mình đã Google, lên StackOverflow, và câu trả lời mình nhận
được là đây:
Answer này gieo cho mình 1 hy vọng nhỏ nhoi: dùng các chương trình khôi
phục dữ liệu có thể cứu được file mã nguồn copy.c!
Và bạn biết câu trả lời mà? Trường hợp "out of luck" xảy ra nhiều hơn và
mình nằm trong số đó. Không có file mã nguồn copy.c nào được
tìm thấy cả. Chương trình khôi phục dữ liệu đào tung máy mình lên, tìm
được các file DotA từ thuở mình còn chơi và còn thích chơi DotA. Cái cần
tìm lại không thấy, ký ức đau buồn lại được đào lên, mình đang đau lòng
lại làm lòng mình quặn đau thêm gấp bội.
Đến đây mình bỗng chú ý là, file c.exe vừa compile vẫn còn ở
đó và nó vẫn chạy tốt! Vậy mình có thể dịch ngược file để tìm mã nguồn, giống như dịch ngược
mã nguồn AutoIt hay không?
Ý tưởng là có thể, nhưng không và không. Để mình phân tích
cho nhé:
- Thứ nhất: lúc đó là 1 giờ 30 phút đêm. Sáng ngày hôm sau mình có tiết
Đại số Tuyến tính lúc 7h30, sau đó học Mác đến 5 giờ chiều. Nếu như mình
làm reverse engineer dịch ngược source là xác định ngày mai mình không còn
sức để học.
- Thứ hai: có điên mình cũng không dịch ngược, vì đơn giản là
mình không đủ trình.
- Thứ ba: Dù là mất mã nguồn nhưng mã nguồn đó mình viết từ đầu đến cuối
nên ít nhiều mình vẫn nhớ được thiết kế code. Vậy, thay vì tìm cách cứu
trong vô vọng, nếu ngồi code lại từ đầu thì sẽ hợp lý và ít tốn thời gian
hơn nhiều.
Vậy là mình ngồi code lại, đến 3 giờ sáng thì file copy.c mới
hiện diện lại trên máy tính của mình. Nhưng, theo thầy Mác dạy mình, cái
sự vật trải qua sự biến đổi, nếu nó quay trở lại trạng thái ban đầu thì nó
không giống với sự vật ban đầu nữa, mà nó đã mang một chất mới (hoặc đại loại thế, mình mệt quá nên giờ Mác cũng nghe qua loa thôi). File code bây giờ không chỉ là chương trình hỗ trợ copy, nó là bài học
xương máu, rằng "phải lắc não trước khi dùng, không được type trước khi
suy nghĩ".
No comments:
Post a Comment