Từ coder đến developer – Tôi đi code dạo

Độ vài tuần trước, mình vừa ra mắt Extension Học English với gái xinh trên Chrome Web Store. Nguyên nhân là sau vụ add-on ngắm bười, lộn, ngắm vếu (Em thèm vếu) hôm trước, mình chợt nhận ra rằng đa phần dân FA và dân dev rất máu gái….

Câu hỏi đặt ra là: Thay vì giải trí, liệu có thể dùng gái để dụ dỗ các thanh niên chăm chỉ học hành hay không?? Đáp áp là có! Add-on “Học English với gái xinh” ra đời từ đây.

Với add-on này, mỗi lần trả lời đúng từ vựng, bạn sẽ được ngắm hình gái (hàng xinh hàng tuyển nhé). Trả lời đúng nhiều câu liên tục, điểm càng cao thì độ nóng bỏng cũng sẽ tăng dần ahihi.

Trong bài này, chúng ta cùng mổ xẻ kiến trúc và code của ứng dụng trên, các bạn có thể dựa theo đó để viết ứng dụng tương tự nhé.

Ảnh demo ứng dụng

Kiến trúc tổng quát

Hệ thống có thiết kế khá đơn giản. Phần back-end là 1 RESTful API, trả về một danh sách các link ảnh dưới dạng JSON. Phần front-end là một Chrome Extension. Do extension của Chrome được build bằng HTML/CSS/JS nên mình viết extension cũng như viết web bình thường thôi.

Front-end sẽ request ảnh từ back-end, sau đó lưu ảnh ở phía client và load sẵn, do đó các bạn sẽ thấy ứng dụng load ảnh khá nhanh như ảnh local vậy.

Kiến trúc tổng quát của ứng dụng

Back-end: AWS Lambda

Muốn làm ứng dụng ngắm ảnh gái thì đầu tiên là phải có… hình gái. Kiếm hình gái ở đâu bây giờ?? Ban đầu mình định lấy ảnh trên xiuren, nhưng do trang này hơi bị… hở hang quá, lại không có gái hình Việt Nam. Thế là mình bắt đầu lên các fanpage ngắm gái trên Facebook để tìm hình.

Tiếc thay, hình ảnh ở các trang này cũng không nhiều! Không sao, chỉ cần lấy hình từ nhiều trang, sau đó chọn random một trang trong đó là xong. Vì Facebook đã có sẵn RestAPI nên mình lấy ảnh cũng khá dễ dàng, code back-end rất ngắn gọn như sau.

Back end có thể viết bằng file PHP đơn giản, sau đó deploy lên host hoặc VPS. Do mình thích Nodejs nên dùng luôn Lambda của Amazon. Với kiến trúc serverless, dù cho có hàng triệu người dùng cũng không lo sập server.

Ngoài ra, do mình đã có sẵn RestAPI nên trong tương lai mình có thể tái sử dụng back-end này để làm app Window hoặc app di động. Tiện quá phải không nào?

Front-end: HTML, AngularJS, Semantic UI

Về cơ bản, Chrome Extension chỉ là HTML/CSS/JS nên các bạn đã quen làm web chỉ cần mất chút thởi gian là có thể làm quen được. Mình sử dụng Angular 1 và Semantic UI để code và làm giao diện nhằm tiết kiệm thời gian.

Điều mình không ngờ là viết front-end lại có khá nhiều vấn đề cần giải quyết hơn back-end. Các vấn đề này đều khá thú vị:

Bài học rút ra

Các bạn thấy đấy, tuy chỉ là một ứng dụng nho nhỏ, nhưng chúng ta phải đưa ra nhiều lựa chọn khi design decision, không hề đơn giản. Là một engineer, không phải ta chỉ code sao cho chạy được mà code còn phải tối ưu, đưa ra UI/UX tốt nhất cho người dùng.

Tất nhiên, sau khi viết xong thì mình cũng release ứng dụng để lấy feedback từ người dùng, đồng thời cập nhật cải tiến thêm một số chức năng mới nữa.

Lượng share và like trên fanpage và J2Team group

Toàn bộ source code của ứng dụng nằm tại đây: https://github.com/conanak99/learn-english-extension. Mình đã cố gắng viết code clean nhất có thể, module tách bạch rõ ràng, tên biến tên hàm dễ hiểu. Các bạm có thể đọc và tham khảo nhé!

Kết

Trước đây, mình đã từng khuyên các bạn nên viết pet project vào lúc rãnh rỗi. Nếu có ý tưởng hay, thú vị, các bạn cứ thoải mái bắt tay vào làm thôi, đừng ngại ngần gì hết!

Như các bạn thấy đấy, việc viết một ứng dụng thế này không quá phức tạp, chỉ mất của mình chút thời gian (khoảng vài tiếng) thôi. Vừa vui, vừa học được nhiều thứ, lại còn giúp được người khác nữa. Nếu bỏ source code lên github, bạn còn có cái để khoe lúc đi xin việc nữa đấy ;).

Mặc dù chỉ mới ra mắt được vài hôm nhưng ứng dụng đã có kha khá người dùng, rating rất cao nhé ?

Link nội dung: https://www.sachhayonline.com/tai-anh-gai-xinh-a70273.html