#122 - Ứng dụng gọi xe theo dõi vị trí như thế nào?
Vào đầu năm 2020, Grokking đã thực hiện một khảo sát về chủ đề “Chuyển việc” và nhận được gần 300 lượt làm khảo sát tới từ các bạn Software Engineer (SE).
Tuy kết quả khảo sát này không đại diện cho tất cả mọi người trong cộng đồng phát triển phần mềm tại Việt Nam. Mặc dù vậy, một số thông tin từ kết quả khảo sát phản ánh một phần nào những nhu cầu của SE khi tìm kiếm một cơ hội việc làm mới.
Mời các bạn cùng đọc chi tiết kết quả khảo sát tại đây.
https://online.grokking.org/articles/44/grokking-survey-1-chuyen-viec
Những bài viết hay
Messaging Patterns Overview — www.enterpriseintegrationpatterns.com
Trong hệ thống microservice, bài toán truyền tải message đến những component khác nhau là một bài toán không đơn giản, đa dạng về mặt giải pháp và phụ thuộc vào sự phức tạp của yêu cầu đặt ra. Trong trang web này tác giả tổng hợp hơn 65 mẫu design pattern liên quan đến việc giải quyết bài toán truyền tải message trong các ứng dụng dùng trong doanh nghiệp.
Tips for Building Smooth Live Tracking — blog.gojekengineering.com
Cùng tìm hiểu việc theo dõi vị trí bên trong ứng dụng gọi xe Gojek.
Bài toán ở đây là việc theo dõi tuyến đường của các lái xe, với đầu vào là điểm đầu - cuối & vị trí của xe, yêu cầu phải đảm bảo:
- Thiết bị chạy trên tuyến đường thực tế phải sát với được vẽ trên ứng dụng
- Tuyến đường tự động cập nhật khi xe chạy
- Animation trên ứng dụng cũng phải được chạy mượt & khớp so với thực tế
Để giải quyết được điều này, tác giả đã đưa ra cách giải quyết là chia nhỏ tuyến đường thành các đoạn thẳng. Vị trí từ sensor của xe cũng sẽ được kiểm tra & tính toán lại sao cho khớp với tuyến đường (sử dụng phép chiếu Mercator). Cuối cùng khi thiết bị nhận được vị trí điểm đầu & cuối, animation sẽ chuyển động kèm theo dựa vào vận tốc trung bình trên quãng đường di chuyển.
Alan Kay's answer to What thought process would lead one to invent object-oriented programming?
Nếu bạn từng thắc mắc, điều gì đã dẫn tới việc phát minh ra lập trình hướng đối tượng, thì trong bài viết này, Alan Kay sẽ trả lời cho bạn.
Ông là nhà khoa học máy tính người Mỹ, từng làm lập trình viên trong Không Quân Hoa Kỳ. Ông có bằng cử nhân toán và sinh học phân tử. Sau đó ông lấy bằng thạc sĩ về kỹ thuật điện, trước khi có bằng tiến sĩ về khoa học máy tính. Kay là một trong những người cha của ý tưởng lập trình hướng đối tượng.
Năm 2003, ông nhận giải thưởng Turing cho những đóng góp tiên phong trong việc phát triển ngôn ngữ lập trình hướng đối tượng.
15 testing methods all developers should know — circleci.com
Testing là một công việc quan trọng không kém gì coding. Nó đảm bảo việc sản phẩm sẽ hoạt động đúng như yêu cầu. Công việc này có thể chiếm từ 20% - 50% toàn bộ thời gian phát triển. Việc am hiểu testing cũng như test hiệu quả không chỉ giúp ích cho tester mà ngay cả developer khi có thể tự kiểm tra các test case để tránh được rủi ro trong quá trình phát triển.
Tham khảo các cách sau đây để biết thêm được các phương pháp đảm bảo chất lượng phần mềm.
Code & Tools
Windows Package Manager Preview: Công cụ quản lý phần mềm bằng cmd cho Windows
Htmhell: Tập hợp những bad-practice HTML & cách khắc phục
OpenAI generates Python Code: Mã nguồn được viết bởi AI!!!
Security
Chrome: 70% of all security bugs are memory safety issues — www.zdnet.com
Mới đây, các kỹ sư tại Google cho biết, khoảng 70% các lỗi bảo mật nghiêm trọng trong mã nguồn của Chrome là các lỗi liên quan tới quản lý bộ nhớ. Một nửa trong số đó là các lỗ hổng có dạng use-after-free. Đây là một loại vấn đề bảo mật, phát sinh từ việc quản lý các con trỏ trong C/C++ không chính xác, khiến cho kẻ tấn công lợi dụng và có thể mở ra các cánh cửa tấn công vào các bộ phận bên trong của Chrome.
Tương tự vậy, vào một hội nghị tháng 2 năm 2019, các kỹ sư của Microsoft cũng công bố khoảng 70% các bản cập nhật bảo mật của Microsoft là để giải quyết cho các lỗ hổng liên quan tới an toàn bộ nhớ (safe memory).
Rõ ràng, cả 2 công ty đều gặp chung một vấn đề, đó là C và C++ là hai ngôn ngữ lập trình chiếm tỷ trọng lớn trong codebase của họ, là các ngôn ngữ "unsafe".
C/C++ được tạo ra từ nhiều thập kỷ trước, khi các vấn đề liên quan tới khai thác bảo mật, và tấn công mạng không phải là mối đe dọa lớn, và không phải vấn đề được ưu tiên của các nhà phát triển phần mềm những thời kỳ đầu.
Do đó, cả C/C++ đều cho phép lập trình viên có toàn quyền kiểm soát cách họ quản lý các con trỏ vùng nhớ và không đi kèm với các hạn chế, hoặc cảnh báo khi các lập trình viên mắc những lỗi cơ bản liên quan tới quản lý vùng nhớ.
Điều đó dẫn đến các lỗ hổng quản lý bộ nhớ xuất hiện trong rất nhiều ứng dụng, ví dụ như use-after-free, buffer overflow (tràn bộ nhớ đệm), race conditions, double free, wild pointer.
Database
Đối với các hệ thống database đi theo mô hình master-slave, phần lớn tác vụ ghi sẽ tập trung vào master và dữ liệu sẽ được đọc nhiều ở slave, từ đó sự tradeoff giữa consistency và availability nếu có cũng sẽ ít rõ ràng hơn so với các hệ thống nơi việc ghi có thể diễn ra ở nhiều node cùng lúc như Cassandra, ScyllaDB, MongoDB.
Đối với những hệ thống như Cassandra và MongoDB, sự tradeoff diễn ra rõ ràng hơn trong việc bạn sẽ lựa chọn những cấu hình khi đọc/ghi tương ứng để đạt được mục đích của mình.
Trong bài viết dưới đây, tác giả tập trung vào phân tích MongoDB phiên bản 4.2.6, vốn được quảng cáo là “among the strongest data consistency, correctness, and safety guarantees of any database available today” và “full ACID transactions”. Tuy nhiên, dưới sự phân tích của tác giả thì bản thân thiết kế của MongoDB có vài điểm chưa hợp lý để, đặc biệt là cách các cấu hình read/write concern được thiết lập mặc định sẽ khiến cho tính consistent không được đảm bảo trong nhiều tình huống.
Mời các bạn cùng đọc chi tiết quá trình phân tích, thử nghiệm của tác giả để hiểu tại sao tác giả lại có nhận định như vậy nhé.
http://jepsen.io/analyses/mongodb-4.2.6
Tin tức khác
- Một trang thực hành SQL khá thú vị dành cho các bạn giữa có máu thám tử vừa muốn trau dồi thêm kỹ năng viết SQL https://sqlpd.com/
- Dành cho các bạn đang tìm kiếm một framework giúp đánh giá các hệ thống distributed thì Jepsen là một trong các lựa chọn bạn có thể cân nhắc. Tác giả Jensen cũng là một kỹ sư có tiếng thường hay cung cấp bài phân tích, nhận định về các loại database trên blog của mình https://github.com/jepsen-io/jepsen
Quote
I'm sorry that I long ago coined the term "objects" for this topic because it gets many people to focus on the lesser idea. The big idea is "messaging" - Alan Kay, father of OOP.