chương 1 cũng đề cập đến đối tượng nghiên cứu, phạm vi đề tài, phương pháp nghiên cứu. Chương 2 – Kiến thức nền tảng: Trình bày các kiến thức nền tảng, các công nghệ và thuật toán được sử dụng để xây dựng ứng dụng. Chương 3 – Xây dựng hệ thống: Trình bày chi tiết quy trình xây dựng hệ thống, từ xác định và phân tích yêu cầu bài toán cho đến xây dựng CSDL, cuối cùng là xây dựng giao diện cho ứng dụng. Chương 4 – Áp dụng thuật toán: Tập trung trình bày thuật toán gợi ý bài viết.
Các kiến thức cần nắm, các loại gợi ý, các số đo, thực nghiệm và kết quả thực nghiệm, sau đó vào dụng vào ứng dụng. Chương 5 – Kết luận: Kết luận, rút ra được các ưu nhược điểm của ứng dụng và hướng phát triển trong tương lai. GIỚI THIỆU CHUNG 1. Lý do chọn đề tài Trong bối cảnh xã hội hiện đại, khi con người ngày càng bận rộn với công việc cũng như việc học bên ngoài và ít có thời gian hơn để xử lý các công việc trong gia đình.
Đặc biệt trong thời gian giãn cách xã hội do đại dịch Covid-19 khiến cho nhiều người công tác xa gia đình và không thể về. Nhu cầu nắm bắt tình hình các công việc, sự kiện trong gia đình và tương tác với các thành viên gia đình càng tăng cao. Đứng ở góc độ này, chúng em hình thành ý tưởng xây dựng một ứng dụng hỗ trợ tương tác từ xa giành cho các thành viên trong gia đình thông qua các hình thức như nhắn tin, video call. Bên cạnh đó, ứng dụng cũng giúp các thành viên trong gia đình đồng bộ kế hoạch xử lí các công việc trong nhà và phân công công việc cho các thành viên trong gia đình, đặt lịch để nhắc nhở các sự kiện quan trọng cho gia đình, giúp các thành viên trong gia đình cập nhật được tình hình thu chi hàng tháng và định vị được nhau trong những tình huống cần thiết.
Tính mới và tính thực tiễn 1. Tính mới So với những ứng dụng đã khảo sát: Nhóm em đã tiến hành khảo sát các ứng dụng liên quan hoặc có cụm tính năng tương tự đã được triển khai và đưa vào sử dụng trên thực tế: • Cozi, ChoresMonster, OurHome cho phép đồng bộ hóa lịch cho cả gia đình với khả năng lập danh sách và phân công các công việc cần làm. • Keepy cung cấp tính năng lưu trữ, tổ chức và quản lý những hình ảnh và video kỷ niệm của gia đình vào một nơi duy nhất và cho các thành viên đều có khả năng truy cập. 2 • Life360 hỗ trợ việc định vị người thân dựa vào tính năng GPS và cảnh báo trong trường hợp khẩn cấp.
• MoneyLover, Spendee, Mint, MoneyPocket hỗ trợ việc quản lý thu chi, giám sát hóa đơn, theo dõi mức chi so với ngân sách và trực quan hóa chi tiêu qua biểu đồ. • Facebook Messenger, Skype, Twitter có thể hỗ trợ người sử dụng tương tác qua hình thức nhắn tin, voice call và video call. Qua khảo sát có thể thấy các ứng dụng hiện có chỉ hỗ trợ một tác vụ nhất định, dẫn đến sự bất tiện cho người dùng khi phải sử dụng quá nhiều ứng dụng cùng lúc để giải quyết các tác vụ trong sinh hoạt gia đình. Bởi đó, nhóm em quyết định tích hợp các tính năng quản lý công việc, sự kiện, thu chi, album gia đình và tương tác từ xa qua các hình thức nhắn tin, voice call, video call vào một ứng dụng duy nhất.
Đồng thời ạo ra không gian tương tác từ xa dành riêng cho các thành viên trong gia đình nhằm tăng tính gắn kết giữa các thành viên trong gia đình với nhau. So với đề tài khoá trước: Bổ sung thêm khả năng tương tác giữa các thành viên trong gia đình qua hình thức nhắn tin, voice call và video call trực tiếp. Xây dựng mạng xã hội về ẩm thực để các gia đình có thể chia sẻ các bài viết về công thức và mẹo vặt trong việc làm bếp. Hỗ trợ 2 ngôn ngữ tiếng Anh và tiếng Việt.
Tích hợp đăng nhập bằng các tài khoản social networking bên thứ 3 như: Facebook, Google, Apple(với nền tảng iOS). Tính thực tiễn • Hỗ trợ các gia đình thực hiện các tác vụ hằng ngày dễ dàng và thuận tiện hơn. • Tăng tính gắn kết giữa các thành viên trong việc thực hiện công việc nhà. 3 • Tăng tính giao tiếp và chia sẻ giữa các thành viên qua việc nhắc nhở về sự kiện.
• Tăng tính thống nhất, tương tác và chia sẻ ý kiến giữa các thành viên. Phạm vi nghiên cứu Khảo sát thực trạng quản lý các công việc và sự kiện chung trong gia đình hiện nay. Nghiên cứu và khảo sát các ứng dụng liên quan. Các công nghệ hỗ trợ xây dựng ứng dụng trên nền tảng iOS, Android giao tiếp với API từ máy chủ để truy xuất cơ sở dữ liệu.
Các kỹ thuật và thuật toán gợi ý bài viết phù hợp. Đối tượng nghiên cứu Tập trung nghiên cứu các công nghệ hỗ trợ xây dựng ứng dụng như: React Native(Redux Saga), Java(Spring Boot), PostgreSQL. Bên cạnh đó, đề tài cũng hướng đến đối tượng là các thành viên trong gia đình có nhu cầu quản lý công việc, sự kiện chung trong gia đình hiệu quả hơn thông qua Mobile App và muốn tương tác từ xa với nhau. KIẾN THỨC NỀN TẢNG 2.
Javascript Javascript là được ra mắt ban đầu là một ngôn ngữ kịch bản đơn giản dành cho môi trường trình duyệt. Vào thời điểm được phát minh thì javascript được cho là sẽ được sử dụng cho các đoạn mã ngắn được nhúng trong một trang web. Dần về sau, khi javascript đã phát triển đã phát triển mạnh mẽ trên môi trường trình duyệt, các nhà sáng lập javascript bắt đầu mở rộng javascript để được sử dụng bên ngoài môi trường trình duyệt, chẳng hạn như triển khai các máy chủ JS bằng node. Bản chất “chạy mọi nơi” của javascript khiến nó trở thành một lựa chọn hấp dẫn để phát triển đa nền tảng như: Máy chủ, trình duyệt, desktop, di động.
Javascript ban đầu chỉ hoạt động đơn luồng, chỉ một nhiệm vụ được thực thi trong 1 lúc. Nó sẽ không là vấn đề gì cho đến khi thời gian chạy của 1 task lên đến hơn 10 giây, và khi có đến 100 task thì cứ phải chờ như vậy là một vấn đề cực lớn trong chương trình. Khi đó, mô hình event loop ra đời nhằm giúp các task được thực thi một cách concurrency(tức là task sau sẽ bắt đầu thực hiện ngay sau khi task trước vừa bắt đầu).1: Mô hình Event loop trong Javascript Thành phần chính trong event loop bao gồm: • Stack: Là một vùng nhớ đặc biệt trên con chip máy tính phục vụ cho quá trình thực thi các dòng lệnh mà cụ thể là các hàm theo một cách tuần tự, tức là lệnh này thực thi xong thì mới đến lệnh khác. Hàm chẳng qua là một nhóm các lệnh và chương trình thì gồm một nhóm các hàm phối hợp với nhau.
Mỗi khi một hàm được triệu gọi thì nó sẽ được đẩy vào Stack theo cơ chế LIFO (Last In First Out) nghĩa là vào đầu tiên thì ra sau cùng. Một hàm chỉ được lấy ra khỏi stack khi nó hoàn thành và return. 6 • Heap là vùng nhớ được dùng để chưa kết quả tạm phục vụ cho việc thực thi các hàm trong stack. Heap càng lớn thì khả năng tính toán càng cao.
Heap có thể được cấp phát tĩnh hoặc cấp phát động. Nhiệm vụ của Event Loop là đọc Stack, nếu nhận thấy Stack rỗng thì sẽ đọc Event đầu tiên trong Event Queue và nạp các handler (callback hoặc listener) đính kèm trong Event đó và đẩy vào Stack để thực hiện các handler đó. Các handler ở đây được thực thi ngay khi Event gắn liền với handler đó được kích hoạt. Event có thể bắt nguồn từ việc thao tác nhấn, vuốt, nhấn giữ vào một thành phần UI nào đó, hay API trả về kết quả.
Như ta có thể thấy thấy trên hình thì ngoài Stack ra, JS Runtime còn thao tác với một callback queue hay Event queue. Event queue này khác với stack ở chỗ nó là queue kiểu FIFO (First In First Out). Mỗi khi có một Event được tạo ra, ví dụ người dùng nhấn vào một Button thì một handler đính kèm trong Event đó sẽ được đẩy vào Event. Nếu một Event không có handler thì nó sẽ bị mất và cũng sẽ không đẩy handler vào Event queue.
React Native Hình 2.2: Logo React Native React Native là một thư viện JavaScript dùng để xây dựng giao diện người dùng. Nó được duy trì bởi Facebook và một cộng đồng gồm các nhà phát triển và công ty cá nhân. React Native có thể được sử dụng làm cơ sở trong 7 việc phát triển ứng dụng trên nền tảng di động như iOS và Android. React Native cho phép Developer viết ứng dụng trực tiếp trên JavaScript.
Không chỉ vậy, React Native còn sử dụng JSX – một tính năng giúp Javascrip và ngôn ngữ thuộc họ XML của riêng React Native gồm các thành phần giao diện cơ bản như: View, Text, TextInput, Animated, Modal, TouchableOpacity, TouchableWithouFeedback, … Mỗi thành phần giao diện trong React Native còn được gọi là component. Ngoài ra, React Native cho phép Developer phân chia một giao diện phức tạp thành các component nhỏ hơn giúp dễ bảo trì và nâng cấp giao diện hơn. Developer sẽ không phải lo lắng về tổng thể ứng dụng, bởi giờ đây họ đã có thể dễ dàng chia nhỏ các cấu trúc UI/UX phức tạp thành từng component đơn giản hơn. Tính năng State trong React Native giúp các component nắm giữ một lượng dữ liệu nhất định và sẽ hiển thị dữ liệu đó lên giao diện.
Thông qua Props, các component có thể chia sẻ state cho nhau.3: Logo Redux Redux là một thư viện Javascript giúp ứng dụng quản lý toàn bộ state trong hệ thống và trong một store duy nhất. Redux được xây dựng dựa trên kiến trúc Flux của Facebook và rất phù hợp để kết hợp với React Native trong việc phát triển ứng dụng. 8 Cách thức hoạt động của Redux tương đối đơn giản. Có một store trung tâm lưu giữ toàn bộ state của ứng dụng.
Mỗi component có thể truy cập các state trong store bất cứ lúc nào. Hoặc cũng có thể cập nhật giá trị cho các state trong store bằng cách truyền giá trị mới của state vào trong một action và gửi action đến store. Redux có cấu trúc gồm 3 phần: Actions, reducers và store. Actions chính là thông điệp gửi từ component đến store.
Đây là cách duy nhất để người dùng truyền tải dữ liệu từ component đến Store trong Redux. Reducers được xem là thành phần trung gian giữa component và store, là các hàm thuần túy cập nhật lại state trong store như yêu cầu từ các actions.