Wednesday, 13 May 2020

Mất file mã nguồn!

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ĩ".

- "Do you keep backups?" - "No" - "Then you're fucked up."

No comments:

Post a Comment

Popular posts