Chương 8 — 72 giờ và hai triệu
Về đến nhà lúc gần chín rưỡi tối, Hoàng đặt card visit của anh Tuấn lên mặt bàn, cạnh notebook Lenovo, rồi nhìn nó một lúc.
Nguyễn Hữu Tuấn — Founder & CEO. VietPath Technologies.
Giấy trắng, in offset thường, viền mỏng màu xanh navy. Không có gì đặc biệt — nhưng trong hai mươi người tối nay, chỉ có một người đưa card visit cho anh.
Anh tắt đèn đi ngủ lúc mười giờ. Sáng mai bắt đầu sớm.
Thứ Bảy, 7 giờ sáng.
Hoàng ngồi xuống bàn trước khi ba dậy pha cà phê, mở Python IDLE và ba tab trình duyệt: Lazada, Sendo, Tiki. Anh bắt đầu từ Sendo — dễ nhất.
Sendo năm 2014 còn đơn giản, catalog hiển thị thẳng trên HTML, pagination chỉ là ?page=1, ?page=2. Hoàng nhìn View Source khoảng bốn mươi giây rồi gõ: requests, BeautifulSoup, vòng lặp qua mười trang, sleep 2.5 giây mỗi request. Mười lăm phút sau, 197 sản phẩm danh mục điện thoại nằm trong file CSV tạm.
Lazada khó hơn. Trang dùng JavaScript lazy load — cuộn xuống mới hiện sản phẩm, không có pagination URL đơn giản. Hoàng mở Network tab trong Firefox 32, reload trang, quan sát các request. Có một XHR gửi đến api.lazada.vn/v1/products/list.
Đó rồi.
Anh gọi trực tiếp vào endpoint, parse JSON thay vì parse HTML. Nhanh hơn nhiều, không cần xử lý rendering. Nhưng request đầu tiên trả về 403.
Nhìn response header: Referer rỗng, X-Requested-With rỗng. Endpoint đang check hai thứ này. Anh thêm vào, gọi lại — lần này 200. JSON trả về đầy đủ: tên, giá, danh mục, review count.
Ba gõ cửa phòng một lần hỏi ăn cơm chưa. Hoàng trả lời ăn rồi — thực ra chỉ mới uống một ly nước từ sáng, nhưng đang giữa mạch và việc đứng dậy lấy cơm sẽ phá mất trạng thái đó.
Tiếng chén đũa lách cách vọng vào từ bếp.
Tiki xong trong bốn mươi phút — pagination URL dạng ?page=N, HTML tĩnh, không có anti-scraping đáng kể. Đến 14 giờ, ba file CSV tạm đầy đủ: 2.847 dòng sản phẩm, năm danh mục mỗi sàn.
Phần mất thời gian nhất là làm sạch data. Giá sản phẩm có khi là “1,290,000đ”, có khi là “1.290.000 đồng”, có khi là số nguyên thuần, tùy trang. Anh viết thêm mấy hàm chuẩn hóa nhỏ, gộp ba file thành một Excel duy nhất — năm sheet, mỗi sheet một danh mục, dữ liệu từ cả ba sàn theo cột rõ ràng.
Rồi anh thêm một sheet nữa: Tóm tắt phân tích.
Không phải vì muốn gây ấn tượng. Anh thêm vào vì anh Tuấn cần dữ liệu này để trình nhà đầu tư — mà nhà đầu tư không đọc 2.847 dòng CSV, họ đọc chart. Ba cái pivot table và một bar chart đơn giản Excel tự sinh. Đủ để người đọc hiểu trong ba mươi giây.
Hoàng nhìn file lần cuối. Đây là thứ anh Tuấn cần. Không phải cái gì hơn.
Tối thứ Bảy, anh gửi email lúc 21 giờ 14 phút.
Subject: Scraper data — Lazada/Sendo/Tiki — [Nguyễn Minh Hoàng]
Anh Tuấn,
File đính kèm gồm 2.847 sản phẩm từ Lazada, Sendo, Tiki — 5 danh mục theo yêu cầu. Định dạng Excel, có sheet tóm tắt phân tích để tiện đọc nhanh.
Một số ghi chú kỹ thuật: Lazada dùng API endpoint nên cần kèm Referer header; giá đã chuẩn hóa về đồng Việt Nam dạng số nguyên; review count sản phẩm chưa có đánh giá điền 0.
Em giao sớm hơn deadline một ngày.
Không ký “Em Hoàng” hay “Hoàng học sinh lớp 9”. Chỉ ký Nguyễn Minh Hoàng như người lớn ký.
Gửi xong, đóng laptop.
Anh Tuấn reply lúc 8 giờ sáng Chủ Nhật.
Dữ liệu tốt. Anh muốn gặp trực tiếp, 3 giờ chiều nay tại quán Trung Nguyên trên đường Phan Đăng Lưu.
Quán đông hơn Hoàng nghĩ — Chủ Nhật chiều, người ngồi làm việc laptop chiếm gần hết bàn sát vách. Anh Tuấn đã ngồi trước ở bàn góc, file Excel của Hoàng mở trên màn hình.
Nhìn thấy Hoàng bước vào, anh ra hiệu ngồi xuống. Không đứng dậy bắt tay, không xã giao mào đầu — người đang bận đọc số liệu không bỏ năng lượng cho nghi lễ.
“Em scrape Lazada bằng cách nào? Họ có rate limit.”
“Em call trực tiếp vào API endpoint thay vì parse HTML. Kèm Referer header và X-Requested-With để pass qua check.” Hoàng đặt tay lên mặt bàn, không nhìn lảng sang chỗ khác. “Thêm sleep 3 giây giữa các request.”
“Endpoint đó em tìm ra thế nào?”
“Network tab trong Developer Tools. Lazada load sản phẩm qua AJAX, watch request thì thấy rõ.”
Anh Tuấn gật, click qua vài sheet. “Sheet tóm tắt — em làm thêm hay anh yêu cầu rồi em quên?”
“Em làm thêm. Anh cần dữ liệu để trình nhà đầu tư nên em đoán cần thêm phần có thể đọc nhanh.”
Anh Tuấn nhìn anh một lúc — kiểu nhìn của người đang điều chỉnh kỳ vọng về phía trên. Rồi đóng laptop lại.
“Anh trả em hai triệu.”
Tiền mặt.
Anh Tuấn rút phong bì trắng từ túi áo, đặt lên mặt bàn. Hoàng mở ra — hai tờ một triệu, mới, nếp gấp còn phẳng như vừa lấy từ ATM.
Trong góc tầm nhìn:
⚙ HỆ THỐNG KIẾN QUỐC
─────────────────────
THÁCH THỨC PHỦ ĐẦU ✓ NGUỒN LỰC +10
NHIỆM VỤ CHUỖI: KHAI KHOA BẢNG
TRẠNG THÁI: HOÀN THÀNH
Phần thưởng: MẢNH THÔNG TIN TƯƠNG LAI #001
[Nhấn để mở]
─────────────────────
Bàn tay mười lăm tuổi cầm tiền của người ba mươi tuổi trả cho công việc của người hai mươi bảy tuổi. Có gì đó không thẳng trong cái phương trình đó — nhưng tiền là tiền, và hai triệu này là thật.
“Anh có cần thêm gì không?” anh hỏi.
“Tạm thời chưa.” Anh Tuấn nhấp cà phê. “Nhưng anh sẽ nhớ đến em khi có việc tiếp theo. Em nhận thêm dự án được không hay bận học?”
Câu hỏi nghe như quan tâm nhưng thực ra là câu hỏi về tính khả dụng.
“Em có thể nhận thêm. Tùy loại việc và thời hạn.”
“Anh sẽ liên hệ qua email.” Anh Tuấn chuẩn bị đứng dậy, rồi dừng lại. Giọng hạ xuống một chút so với trước: “Em làm tốt hơn anh kỳ vọng. Anh muốn em biết điều đó.”
Không phải lời khen sáo — câu đó nói với giọng cân nhắc của người không hay khen. Hoàng nhận ra sự khác biệt.
“Cảm ơn anh.” Anh không thêm gì.
Ra ngoài đường Phan Đăng Lưu, nắng chiều tháng Mười còn đủ nóng để áo dính lưng sau hai phút.
Mấy cái xe ôm đậu gần đó, người tài xế già đang ngủ gật trên yên, mũ kéo xuống che mắt.
Gọi xe về? Hai mươi ngàn.
Anh quyết định đi bộ. Không phải vì tiếc hai mươi ngàn — hai triệu trong túi, hai mươi ngàn không còn là vấn đề. Đi bộ vì đầu cần thời gian xử lý, và thời gian này không xin được từ đâu khác.
Qua đoạn Bạch Đằng, mùi sông thoảng vào từ phía tay phải. Tiệm bánh mì góc đường đang hấp hơi, chủ tiệm đứng quạt lò bằng quạt giấy. Một đứa con nít đứng cạnh chờ bánh, tay túm áo mẹ.
Trong góc tầm nhìn, thông báo MẢNH THÔNG TIN TƯƠNG LAI #001 vẫn nhấp nháy.
Anh chưa nhấn.
Biết tại sao chưa nhấn không?
Không phải vì sợ nội dung. Mà vì lần đầu tiên kể từ khi xuyên về, anh đứng ở chỗ tự đủ — không cần Hệ thống chỉ bước tiếp theo, không cần mảnh thông tin để quyết định phải làm gì. Anh đã làm được cái này bằng tay mình. Kỹ năng của mình, tư duy của mình, ba ngày không có cẩm nang.
Cái mảnh thông tin đó — mở lúc nào cũng được. Khoảnh khắc tự mình đủ, một khi qua rồi thì không lấy lại được.
Anh để thông báo nhấp nháy, tiếp tục đi.
Về đến nhà lúc gần năm giờ chiều.
Mẹ ngồi ở phòng khách vá cái áo của ba — đường chỉ thẳng đều, kim chạy quen tay. Mẹ làm việc này mỗi cuối tuần, không phải vì không có tiền mua áo mới mà vì không bỏ cái áo còn mặc được.
“Con về rồi,” mẹ nói, không nhìn lên. “Cơm chưa nấu, tí mẹ nấu.”
Hoàng vào phòng, lấy tờ 500 ngàn từ phong bì. 1 triệu rưỡi còn lại cất vào ngăn kéo bàn học dưới cùng, sau quyển toán lớp 9.
Ra phòng khách.
“Mẹ.”
Mẹ nhìn lên.
Anh đặt tờ 500 ngàn lên mặt bàn trà, cạnh cái thau kim chỉ. “Tiền thưởng học tập. Tháng này con được cô giáo thưởng vì đạt điểm tốt môn Tin.”
Mẹ nhìn tờ tiền. Nhìn lên mặt Hoàng. Rồi nhìn xuống lần nữa.
Cầm lên, vuốt phẳng.
“Điểm Tin con cao à?” Giọng bình thường, không mừng quá, không nghi ngờ quá.
“Dạ.”
Mẹ nhìn tờ tiền trong tay thêm một lúc, rồi hỏi — không phải hỏi về điểm số, không phải hỏi về cô giáo:
“Cái này con tự làm hả?”
Câu hỏi theo nghĩa của người không hiểu kỹ thuật khi nhìn vào thứ con mình làm ra: bằng tay mình không, hay ai làm giúp?
“Dạ. Con tự làm.”
Mẹ đứng dậy, đi vào phòng trong. Tiếng hộc tủ kéo ra, tiếng cất vào, tiếng đóng lại.
Rồi tiếng mẹ vọng ra từ bếp, giọng bình thường như nói về cơm nước: “Con ăn cơm hay ăn mì chiều nay?”
“Cơm.”
“Vậy ra vo gạo đi.”
Hoàng vo gạo ở bồn rửa bếp.
Nước chảy qua gạo trắng đục rồi trong dần. Tay anh xoay trong thau nhỏ, gạo lạo xạo giữa ngón tay.
Trong góc tầm nhìn:
⚙ HỆ THỐNG KIẾN QUỐC
─────────────────────
GIA ĐÌNH +5 TÍN NHIỆM
Mảnh thông tin tương lai #001
[Đang chờ — nhấn bất kỳ lúc nào]
─────────────────────
GIA ĐÌNH +5.
Lần đầu tiên thanh đó tăng không phải vì anh lên kế hoạch hay tính toán. Mẹ hỏi một câu. Anh gật đầu. Vậy thôi. Không có nhiệm vụ nào, không có phần thưởng nào được báo trước — Hệ thống chỉ ghi nhận, kiểu ghi nhận của người quan sát chứ không phải người tổ chức.
Anh đặt thau gạo xuống, đổ nước vừa đủ, mang lên nồi cơm điện.
Mẹ đang thái rau ở góc bếp, tiếng dao lên thớt đều. Mùi hành phi dậy lên từ cái chảo nhỏ.
Bữa cơm tối không có gì đặc biệt — canh chua cá lóc mẹ nấu kiểu miền Tây, ba rót nước mắm ra chén, không ai nói gì nhiều. Nhịp quen của bàn ăn này, không cần lời.
Hoàng ăn hết tô cơm.
Lần đầu tiên từ khi xuyên về — anh không vội.