Bài đăng

UPnP (Universal Plug and Play) trong lập trình Android

UPnP (Universal Plug and Play) trong lập trình Android UPnP (Universal Plug and Play) là một tập hợp các giao thức mạng cho phép các thiết bị kết nối và giao tiếp với nhau dễ dàng trong cùng một mạng nội bộ. Trong ngữ cảnh lập trình Android, đặc biệt là khi phát triển ứng dụng remote (điều khiển từ xa), UPnP thường được sử dụng để tìm kiếm, giao tiếp và điều khiển các thiết bị như: TV thông minh, Hệ thống âm thanh, Máy in, Router, Các thiết bị IoT. Cách hoạt động của UPnP UPnP hoạt động dựa trên giao thức HTTP và SSDP (Simple Service Discovery Protocol) để tìm kiếm và khám phá các thiết bị trong mạng. Quá trình hoạt động bao gồm: Khám phá thiết bị (Discovery): Ứng dụng Android gửi một gói tin đa hướng (multicast) SSDP để tìm kiếm các thiết bị hỗ trợ UPnP trong mạng. Các thiết bị phản hồi với thông tin về chúng, bao gồm tên, loại thiết bị, và URL chứa thông tin chi tiết hơn. Mô tả thiết bị (Description): Sau khi phát hiện, ứng dụng sẽ truy cập URL mà thiết bị cung cấp...

Phân biệt effect, intent và state trong mô hình MVI

 Trong mô hình MVI (Model-View-Intent) , khi kết hợp với Jetpack Compose , các thành phần Effect , Intent , và State đóng vai trò quan trọng để quản lý luồng dữ liệu và tương tác giữa UI và logic. Dưới đây là sự phân biệt giữa chúng qua định nghĩa và ví dụ. 1. Intent (Ý định của người dùng) Intent đại diện cho ý định của người dùng hoặc sự kiện từ UI gửi đến ViewModel. Nó cho biết người dùng muốn làm gì . Nguồn : Phát sinh từ UI (thường là hành động của người dùng như bấm nút, cuộn danh sách, nhập văn bản...). Mục tiêu : Thông báo cho ViewModel để xử lý và đưa ra thay đổi (cập nhật State hoặc phát ra Effect ). Ví dụ : Bấm nút tải dữ liệu, kéo để làm mới, hoặc chọn một mục. Ví dụ mã: sealed class UserIntent { object LoadData : UserIntent() data class SelectItem(val id: Int) : UserIntent() object Refresh : UserIntent() } Trong Jetpack Compose : Button(onClick = { onIntent(UserIntent.LoadData) }) { Text("Load Data") } 2. State (Trạng thái của U...

Phân biệt Flow và StateFlow trong lập trình Android

  Câu chuyện về Flow và StateFlow Hãy tưởng tượng bạn đang ở một quán cà phê để tham gia một cuộc họp. Có hai kiểu nhân viên phục vụ, tương ứng với Flow và StateFlow : Flow: Người phục vụ chỉ chuyển tiếp từng thông điệp một Bạn gọi một ly cà phê và ngồi chờ. Người phục vụ (Flow) chỉ mang đến từng thông tin một khi có, ví dụ: "Ly cà phê của bạn đang được pha chế." "Ly cà phê của bạn đang được bưng ra." "Đây là cà phê của bạn, mời bạn dùng." Nếu bạn đến muộn, bạn sẽ không nhận được các thông tin đã xảy ra trước đó , bởi vì người phục vụ chỉ cung cấp thông tin hiện tại. Đặc điểm Flow trong câu chuyện: Flow phát ra luồng dữ liệu từng cái một, theo thứ tự thời gian. Flow không giữ lại thông tin nào nếu bạn đến muộn. StateFlow: Người phục vụ luôn cập nhật trạng thái hiện tại Bây giờ, giả sử bạn đang tham gia một cuộc họp trong phòng riêng, và nhân viên phục vụ (StateFlow) sẽ luôn đảm bảo bạn biết trạng thái hiện tại của quán cà phê . Ví dụ: Lúc bạn bước vào, nh...

Phân biệt Factory Method và Abstract Factory trong Design Pattern

Câu chuyện minh họa để phân biệt Factory Method và Abstract Factory Tình huống câu chuyện: Cửa hàng bán đồ nội thất Giả sử bạn là chủ một cửa hàng bán đồ nội thất, nơi bạn cung cấp hai dòng sản phẩm: Nội thất cổ điển và Nội thất hiện đại . Mỗi dòng sản phẩm bao gồm ghế , bàn , và tủ . Bạn muốn quản lý việc sản xuất những món đồ này sao cho: Cách sản xuất từng loại sản phẩm cụ thể (như ghế cổ điển hoặc ghế hiện đại) có thể tùy chỉnh. Đảm bảo mỗi bộ nội thất (ghế, bàn, tủ) thuộc cùng một phong cách (cổ điển hoặc hiện đại). 1. Sử dụng Factory Method Mô tả: Bạn muốn tập trung vào việc sản xuất một sản phẩm cụ thể , ví dụ: ghế. Cách hoạt động: Bạn tạo một lớp cơ sở (abstract class hoặc interface) cho các loại ghế ( Chair ), và các lớp con sẽ quyết định cách sản xuất ClassicChair hoặc ModernChair . Mỗi phong cách ghế sẽ có một nhà máy (factory) riêng. Cách triển khai trong câu chuyện: Bạn có lớp cơ sở ChairFactory : abstract class ChairFactory { abstract fun cre...

Code mẫu tự động phát hiện và lock window screen

Hình ảnh
*Giải thích flow: Khi chạy clickermann thì sẽ tự động tìm cửa sổ có tên "Windows PowerShell" mỗi 1s (0,5s cho lần đầu), khi tìm được thì sẽ lock lại và scale. Nếu screen đó bị tắt thì sẽ kích hoạt lắng nghe để lock và scale lại nếu phát hiện đồng thời sẽ kill 1 tiến trình khác tên là "Untitled - Paint"

Tài liệu Clickermann - by Mai Bao Long

Tìm keycode cho lệnh keypress: $i=0 waitms(3000) for ($i, $i<500)   print("Iteration ", $i)   keyPress($i)   waitms(1000) end_cyc Tìm keycode cho lệnh keydown-keyup: $i=0 waitms(5000) for ($i, $i<500)   print("Iteration ", $i)   keydown($i)   waitms(1000)   keyup($i)   waitms(1000) end_cyc Bảng mã : Phím Mã 1 (keypress) Mã 2 (keypress) Mã 3 (keydown-keyup) Mã 4 (keydown-keyup) A 65 118 B 66 119 C 67 120 D 68 121 E 69 144 F 70 3 145 G 71 36 103 H 72 38 104 I 73 33 105 J 74 109 K 75 37 100 L 76 12 101 M 77 39 102 N 78 107 O 79 35 97 P 80 40 98 Q 81 34 99 R 82 45 96 S 83 46 110 T 84 44 U 85 V 86 226 W 87 122 X 88 123 Y 89 Z 90 238 1 49 78 2 50 77 172 3 51 188 4 52 190 5 53 111 191 6 54 161 7 55 106 8 56 18 164 9 57 32 0 48 66 175 Tab 9 56 Shift 16 Ctrl 17 Alt 18 Space 32 68 173 Enter 13 187 Backspace 8 55 Caps Lock 20 84 Escape 27 221 F1 112 F2 113 233 F3 114 F4 115 193 F5 116 F6 117 F7 118 135 F8 119 ...