hoctrokha
Member
Làm web lâu rồi hôm nay tự nhiên phải đụng đến Semaphore, tự dưng nhớ lại chuyện hồi đại học nên muốn kể cho anh em nghe chơi.
Hồi đó làm đồ án năm 4, mình muốn làm 1 hệ thống có khả năng truyền thông báo từ một hệ thống xuống app di động của nhiều nền tảng khác nhau (Android, IOS, Windows UWP).
Có nghĩa là trong mô hình sẽ có 1 hệ thống backend của 1 tổ chức nào đó, mình gọi hệ thống đó là Already Exist System (AES), hệ thống của mình là Raw notification service (RNS).
Tổ chức đó sẽ tích hợp RNS vào hệ thống của họ. RNS chịu trách nhiệm quản lý danh sách device và gửi thông báo xuống cho app của người dùng. Ở phía client app mình cũng có viết 1 client SDK, nó chạy ngầm bên dưới giúp nhận thông báo + gọi lên server để get detail notification, sau đó lưu dữ liệu xuống thiết bị bằng sqlite.
AES chỉ việc gọi qua RNS và bảo: "Gửi thông báo có id là XYZ cho user ABC j đó", RNS sẽ take care các thứ còn lại.
Ý tưởng khá hay, nhưng chuyện là hồi đó mình ko hiểu về HTTP, mình tưởng HTTP chỉ dùng đc trên web, vậy thì làm sao để AES, RNS và Client App liên lạc với nhau được?
Thế là mình đọc nguyên 1 cuốn Network programming của richard blum gần 500 trang thì phải, tiếng anh thì ko biết, vừa đọc vừa dịch khổ vcl.
Mình tự tạo nên 1 binary protocol của mình rồi xử lý đa luồng trên API bằng lock, semaphore, multex ... , thành thử mình cũng hiểu luôn cả multi threading (Tất nhiên là sau bao đêm đớn đau thức trắng debug multi threading + network), và cũng hiểu async/await != thread (thứ mà hiện tại mình phỏng vấn ai cũng tạch, chưa 1 ai nói đc cho mình hiểu async/await khác gì thread).
Thậm chí mình còn đang tìm hiểu cách làm sao để mã hoá hai đầu thủ công giống như SSL nữa. (may mà chưa kịp làm)
Mình cắm mặt làm nguyên nửa năm thì ra đc 1 demo chạy được. AES được demo bằng cả Java lẫn C# (mục đích để chứng minh là RNS có thể tích hợp với bất kỳ một ngôn ngữ nào), app client thì mình chỉ có thể viết bằng C# được thôi nên chỉ có thể demo trên windows 8.1 + windows phone.
Khoảng 2 tháng trước ngày demo trên trường, mình đi thực tập ở 1 công ty ở công viên phần mềm quang trung dưới SG (mình học trên bình dương), vào một dự án banking, mình mới được biết một thứ tên là WCF (Windows communication foundation), lúc đó giống như mind blowing.
Mình tự hỏi: trời ơi, sao trước giờ mình không biết có thứ này tồn tại, WHYYYYY?
Thế là về nhà thay thế tất cả xương máu tâm huyết bằng WCF trong một nốt nhạc, Cay ........... WHYYYYYYYY.
Cái cảm giác vừa được giải thoát mà vừa tiếc nuối, cay đắng cho những đêm cày quốc.
Đến giờ thật lòng mình vẫn thấy WCF là đỉnh cao mọi ng ạ, nó tiện vcl.
Một thời gian sau thì mình biết là HTTP dùng đc cho cả mobile + backend, và lúc đó cũng khám phá ra 1 thứ tên là Web API - thứ cho phép build ra các HTTP API.
Hiện giờ thì làm đủ thứ công nghệ trên trời dưới biển, dự án to nhỏ, cloud này cloud nọ, nhưng nghĩ lại cái dự án tốt nghiệp đó vẫn là thứ mình tự hào và cũng buồn cười nhất.
Hôm nay đụng vào semaphore, tự hỏi nếu commit code này lên thì có ai muốn approve k nhỉ?
Hồi đó làm đồ án năm 4, mình muốn làm 1 hệ thống có khả năng truyền thông báo từ một hệ thống xuống app di động của nhiều nền tảng khác nhau (Android, IOS, Windows UWP).
Có nghĩa là trong mô hình sẽ có 1 hệ thống backend của 1 tổ chức nào đó, mình gọi hệ thống đó là Already Exist System (AES), hệ thống của mình là Raw notification service (RNS).
Tổ chức đó sẽ tích hợp RNS vào hệ thống của họ. RNS chịu trách nhiệm quản lý danh sách device và gửi thông báo xuống cho app của người dùng. Ở phía client app mình cũng có viết 1 client SDK, nó chạy ngầm bên dưới giúp nhận thông báo + gọi lên server để get detail notification, sau đó lưu dữ liệu xuống thiết bị bằng sqlite.
AES chỉ việc gọi qua RNS và bảo: "Gửi thông báo có id là XYZ cho user ABC j đó", RNS sẽ take care các thứ còn lại.
Ý tưởng khá hay, nhưng chuyện là hồi đó mình ko hiểu về HTTP, mình tưởng HTTP chỉ dùng đc trên web, vậy thì làm sao để AES, RNS và Client App liên lạc với nhau được?
Thế là mình đọc nguyên 1 cuốn Network programming của richard blum gần 500 trang thì phải, tiếng anh thì ko biết, vừa đọc vừa dịch khổ vcl.
Mình tự tạo nên 1 binary protocol của mình rồi xử lý đa luồng trên API bằng lock, semaphore, multex ... , thành thử mình cũng hiểu luôn cả multi threading (Tất nhiên là sau bao đêm đớn đau thức trắng debug multi threading + network), và cũng hiểu async/await != thread (thứ mà hiện tại mình phỏng vấn ai cũng tạch, chưa 1 ai nói đc cho mình hiểu async/await khác gì thread).
Thậm chí mình còn đang tìm hiểu cách làm sao để mã hoá hai đầu thủ công giống như SSL nữa. (may mà chưa kịp làm)
Mình cắm mặt làm nguyên nửa năm thì ra đc 1 demo chạy được. AES được demo bằng cả Java lẫn C# (mục đích để chứng minh là RNS có thể tích hợp với bất kỳ một ngôn ngữ nào), app client thì mình chỉ có thể viết bằng C# được thôi nên chỉ có thể demo trên windows 8.1 + windows phone.
Khoảng 2 tháng trước ngày demo trên trường, mình đi thực tập ở 1 công ty ở công viên phần mềm quang trung dưới SG (mình học trên bình dương), vào một dự án banking, mình mới được biết một thứ tên là WCF (Windows communication foundation), lúc đó giống như mind blowing.
Mình tự hỏi: trời ơi, sao trước giờ mình không biết có thứ này tồn tại, WHYYYYY?
Thế là về nhà thay thế tất cả xương máu tâm huyết bằng WCF trong một nốt nhạc, Cay ........... WHYYYYYYYY.
Cái cảm giác vừa được giải thoát mà vừa tiếc nuối, cay đắng cho những đêm cày quốc.
Đến giờ thật lòng mình vẫn thấy WCF là đỉnh cao mọi ng ạ, nó tiện vcl.
Một thời gian sau thì mình biết là HTTP dùng đc cho cả mobile + backend, và lúc đó cũng khám phá ra 1 thứ tên là Web API - thứ cho phép build ra các HTTP API.
Hiện giờ thì làm đủ thứ công nghệ trên trời dưới biển, dự án to nhỏ, cloud này cloud nọ, nhưng nghĩ lại cái dự án tốt nghiệp đó vẫn là thứ mình tự hào và cũng buồn cười nhất.
Hôm nay đụng vào semaphore, tự hỏi nếu commit code này lên thì có ai muốn approve k nhỉ?