- Nhận xét/ Đánh giá: Bất kỳ người dùng nào cũng có thể để lại đánh giá và nhận xét sách trên nhiều tiêu chí, giúp những người dùng khác chọn được cuốn sách phù hợp sở thích.. Đối tượng
Trang 1ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
NGUYỄN HỒNG PHÚC
KHÓA LUẬN TỐT NGHIỆP
XÂY DỰNG ỨNG DỤNG CHIA SẺ VÀ TRAO ĐỔI SÁCH
Building an app to share and exchange books
KỸ SƯ NGÀNH KỸ THUẬT PHẦN MỀM
TP HỒ CHÍ MINH, 2020
Trang 2ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
NGUYỄN HỒNG PHÚC – 16520951
KHÓA LUẬN TỐT NGHIỆP
XÂY DỰNG ỨNG DỤNG CHIA SẺ VÀ TRAO ĐỔI SÁCH
Building an app to share and exchange books
KỸ SƯ NGÀNH KỸ THUẬT PHẦN MỀM
GIẢNG VIÊN HƯỚNG DẪN Ths LÊ THANH TRỌNG
TP HỒ CHÍ MINH, 2020
Trang 3THÔNG TIN HỘI ĐỒNG CHẤM KHÓA LUẬN TỐT NGHIỆP
Hội đồng chấm khóa luận tốt nghiệp, thành lập theo Quyết định số
……… ngày ……… của Hiệu trưởng Trường Đại học Công nghệ Thông tin
1 – Chủ tịch
2 – Thư ký
3 – Ủy viên
4 – Ủy viên
Trang 4ĐHQG TP HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC
CÔNG NGHỆ THÔNG TIN
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc Lập - Tự Do - Hạnh Phúc
TP HCM, ngày… tháng… năm 2020
NHẬN XÉT KHÓA LUẬN TỐT NGHIỆP
(CỦA CÁN BỘ HƯỚNG DẪN)
Tên khóa luận:
XÂY DỰNG ỨNG DỤNG CHIA SẺ VÀ TRAO ĐỔI SÁCH
Nguyễn Hồng Phúc 16520951 Ths Lê Thanh Trọng
Đánh giá Khóa luận
1 Về cuốn báo cáo:
Số trang 97 _ Số chương 5
Số bảng số liệu 23 _ Số hình vẽ 51 _
Số tài liệu tham khảo 18 _ Sản phẩm 1
Một số nhận xét về hình thức cuốn báo cáo:
2 Về nội dung nghiên cứu:
3 Về chương trình ứng dụng:
Trang 5
4 Về thái độ làm việc của sinh viên:
Đánh giá chung:Khóa luận đạt/không đạt yêu cầu của một khóa luận tốt nghiệp kỹ
sư/ cử nhân, xếp loại Giỏi/ Khá/ Trung bình
Điểm từng sinh viên:
Nguyễn Hồng Phúc:……… /10
Người nhận xét (Ký tên và ghi rõ họ tên)
Trang 6ĐHQG TP HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC
CÔNG NGHỆ THÔNG TIN
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc Lập - Tự Do - Hạnh Phúc
TP HCM, ngày… tháng… năm 2020
NHẬN XÉT KHÓA LUẬN TỐT NGHIỆP
(CỦA CÁN BỘ PHẢN BIỆN)
Tên khóa luận:
XÂY DỰNG ỨNG DỤNG CHIA SẺ VÀ TRAO ĐỔI SÁCH
Nguyễn Hồng Phúc 16520951 *Name of lecturer*
Đánh giá Khóa luận
5 Về cuốn báo cáo:
Số trang 97 _ Số chương 5
Số bảng số liệu 23 _ Số hình vẽ 51 _
Số tài liệu tham khảo 18 _ Sản phẩm 1
Một số nhận xét về hình thức cuốn báo cáo:
6 Về nội dung nghiên cứu:
7 Về chương trình ứng dụng:
Trang 7
8 Về thái độ làm việc của sinh viên:
Đánh giá chung:Khóa luận đạt/không đạt yêu cầu của một khóa luận tốt nghiệp kỹ
sư/ cử nhân, xếp loại Giỏi/ Khá/ Trung bình
Điểm từng sinh viên:
Nguyễn Hồng Phúc:……… /10
Người nhận xét (Ký tên và ghi rõ họ tên)
Trang 8LỜI CẢM ƠN
Khoá luận tốt nghiệp với đề tài “Xây dựng ứng dụng chia sẻ và trao đổi sách” là minh chứng cho quá trình cố gắng không ngừng trong việc tìm tòi, học hỏi trong suốt hơn 4 năm học tập tại trường Đại học Công nghệ Thông tin Thể hiện khả năng của bản thân trong việc áp dụng kiến thức chuyên môn vào giải
quyết bài toán thực tế
Trong quá trình thực hiện khoá luận, em đã nhận được sự hướng dẫn tận tình từ quý thầy cô, sự giúp đỡ và hỗ trợ từ gia đình cũng như bạn bè Một cách đặc biệt, em xin được gửi lời cảm ơn chân thành đến:
Các thầy cô trường Đại học Công nghệ Thông Tin nói chung và các thầy cô trong Khoa Công nghệ Phần mềm nói riêng đã tận tình truyền đạt kiến thức tới em trong những năm học tập tại trường Đó là tài sản quý báu đã giúp em hoàn thành khoá luận và cũng là hành trang cho con đường sự nghiệp của bản thân sau này
Em xin được gửi lời cảm ơn sâu sắc tới Ths Lê Thanh Trọng, người đã trực tiếp hướng dẫn, chỉ bảo, giúp đỡ em những lúc khó khăn, đưa ra những lời khuyên bổ ích
để khoá luận được hoàn thành đúng tiến độ và đáp ứng các yêu cầu đề ra ban đầu Cảm ơn giảng viên phản biện và các thầy cô trong hội đồng chấm luận văn với những lời khuyên, góp ý quý báu và bổ ích Từ đó bài luận văn của em được trở nên hoàn thiện hơn
Lời cuối cùng, em xin dành lời cảm ơn gửi tới gia đình, anh chị, bạn bè đã luôn bên cạnh để động viên và đóng góp ý kiến trong quá trình hoàn thành khoá luận này
Thành phố Hồ Chí Minh, tháng 01 năm 2020
Sinh viên Nguyễn Hồng Phúc
Trang 9ĐHQG TP HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC
CÔNG NGHỆ THÔNG TIN
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc Lập - Tự Do - Hạnh Phúc
ĐỀ CƯƠNG CHI TIẾT
TÊN ĐỀ TÀI: XÂY DỰNG ỨNG DỤNG CHIA SẺ VÀ TRAO ĐỔI SÁCH
Cán bộ hướng dẫn: Ths Lê Thanh Trọng
Thời gian thực hiện: Từ ngày 07/09/2020 đến ngày 02/01/2021
Sinh viên thực hiện:
Trang 10- Thảo luận: Chia sẻ, bàn luận và thể hiện cảm xúc ngay tức thì về bài học/ trích dẫn trong một thể loại sách bất kỳ
- Nhận xét/ Đánh giá: Bất kỳ người dùng nào cũng có thể để lại đánh giá và nhận xét sách trên nhiều tiêu chí, giúp những người dùng khác chọn được cuốn sách phù hợp sở thích
- Trao đổi sách: Tìm kiếm, trao đổi sách giấy
- Mượn sách: Yêu cầu mượn sách giấy trên kho sách chung (kho sách chứa tất cả cuốn sách của người dùng ở trạng thái “sẵn sàng cho mượn”) tới chủ sở hữu
- Quản lý tủ sách: Thêm mới, cập nhật tình trạng và trạng thái sách Thêm các bài học rút ra từ những cuốn sách trong tủ
- Thông báo: Luôn nhận được thông báo kể cả khi không mở ứng dụng
- Khởi tạo tài khoản: Không cần đăng ký, tích hợp với mạng xã hội Facebook
Đối tượng sử dụng:
Là những người sử dụng thiết bị di động (iOS) có một trong các nhu cầu:
- Người có sở thích đọc và chia sẻ về sách
- Người có nhu cầu tìm kiếm sách phù hợp để đọc
- Người sở hữu sách muốn lan toả tri thức bằng cách cho mượn sách
Phương pháp thực hiện:
- Tìm hiểu và đánh giá các giải pháp đã có
- Đề xuất, cải thiện các tính năng cần thiết
- Áp dụng mô hình thác nước vào xây dựng ứng dụng
Kết quả mong đợi:
- Hiểu rõ các framework liên quan (Vapor, Websocket, Combine, SwiftUI, …)
để có thể ứng dụng vào xây dựng ứng dụng chia sẻ và trao đổi sách
- Hoàn thành ứng dụng chạy trên nền tảng iOS với đầy đủ các yêu cầu chức năng
đề ra
- Ứng dụng có độ hoàn thiện cao, có khả năng đưa vào thực tiễn
Trang 11Kế hoạch thực hiện:
Khoá luận được thực hiện trong 15 tuần, thời gian và mô tả nội dung công việc được thể hiện ở bảng bên dưới:
Phân tích yêu cầu, nghiên cứu kỹ
Thiết kế hệ thống
(10/2020)
- Thiết kế kiến trúc phần mềm
- Thiết kế cấu trúc dữ liệu
- Thiết kế giao diện bằng công cụ Figma
- Tạo đặc tả phần mềm (sơ đồ use case, sơ
đồ tuần tự) Hiện thực các mô-đun và kiểm thử
Trang 13MỤC LỤC
TÓM TẮT KHÓA LUẬN 1
Chương 1 MỞ ĐẦU 2
1.1 Giới thiệu đề tài 2
1.2 Lý do chọn đề tài 3
Chương 2 TỔNG QUAN ĐỀ TÀI 5
2.1 Mục tiêu 5
2.2 Phạm vi 5
2.3 Phương pháp thực hiện 6
2.4 Ý nghĩa thực tiễn 6
2.5 Kết quả dự kiến 6
Chương 3 CƠ SỞ LÝ THUYẾT 7
3.1 Khảo sát hiện trạng 7
3.1.1 Các ứng dụng liên quan 8
3.1.1.1 Ứng dụng GAT 8
3.1.1.2 Ứng dụng Goodreads 9
3.1.2 Đánh giá hiện trạng và hướng giải quyết 10
3.1.2.1 Đánh giá hiện trạng 10
3.1.2.2 Hướng giải quyết 11
3.2 Công nghệ sử dụng 12
3.2.1 Vapor 12
3.2.2 SwiftUI 13
3.2.3 Combine 15
Trang 143.2.4 WebSocket 18
3.2.5 Apple Push Notification service 20
3.2.6 PostgreSQL 24
3.2.7 Bcrypt 26
3.2.8 Alamofire 29
3.2.9 Amazon Web Services – S3 29
3.2.10 Heroku 30
3.2.11 SMTP 31
Chương 4 XÂY DỰNG ỨNG DỤNG CHIA SẺ VÀ TRAO ĐỔI SÁCH 34
4.1 Phân tích yêu cầu hệ thống 34
4.1.1 Phân tích yêu cầu chức năng 34
4.1.1.1 Yêu cầu lưu trữ 34
4.1.1.2 Yêu cầu về tính năng 34
4.1.2 Phân tích yêu cầu phi chức năng 35
4.1.3 Phân tích yêu cầu người dùng 35
4.1.3.1 Mô hình use case toàn hệ thống 36
4.1.3.2 Danh sách các Actors 37
4.1.3.3 Danh sách các Use case 37
4.2 Phân tích thiết kế hệ thống 40
4.2.1 Thiết kế xử lý 40
4.2.1.1 Lược đồ tuần tự thao tác đăng ký 41
4.2.1.2 Lược đồ tuần tự thao tác đăng nhập 42
4.2.1.3 Lược đồ tuần tự thao tác khôi phục mật khẩu 44
4.2.1.4 Lược đồ tuần tự thao tác cập nhật thông tin cá nhân 46
Trang 154.2.1.5 Lược đồ tuần tự thao tác thêm đầu sách 47
4.2.1.6 Lược đồ tuần tự cho thao tác thêm sách vào tủ 48
4.2.1.7 Lược đồ tuần tự cho thao tác quản lý lịch sử trao đổi sách 50
4.2.1.8 Lược đồ tuần tự cho thao tác thêm mới ghi chú 52
4.2.1.9 Lược đồ tuần tự cho thao tác cập nhật sách người dùng 53
4.2.1.10 Lược đồ tuần tự cho thao tác đánh giá sách 54
4.2.1.11 Lược đồ tuần tự cho thao tác trao đổi sách 55
4.2.1.12 Lược đồ tuần tự cho thao tác mượn sách 59
4.2.1.13 Lược đồ tuần tự cho thao tác nhắn tin 62
4.2.1.14 Lược đồ tuần tự cho thao tác tạo bài viết 63
4.2.1.15 Lược đồ tuần tự cho thao tác bình luận 65
4.2.2 Thiết kế cơ sở dữ liệu 66
4.2.2.1 Lược đồ cơ sở dữ liệu 66
4.2.2.2 Mô tả các bảng dữ liệu 67
4.2.3 Thiết kế kiến trúc hệ thống 78
4.2.3.1 Kiến trúc tổng thể 78
4.2.3.2 Kiến trúc ứng dụng di động 79
4.2.4 Thiết kế giao diện 80
4.2.4.1 Danh sách màn hình 80
4.2.4.2 Giao diện một số màn hình của ứng dụng 83
4.3 Triển khai hệ thống 89
4.3.1 Máy chủ 89
4.3.2 Ứng dụng di động 91
Chương 5 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 92
Trang 165.1 Kết quả đạt được 92
5.2 Thuận lợi và khó khăn 93
5.2.1 Thuận lợi 93
5.2.2 Khó khăn 93
5.3 Hướng phát triển 94
TÀI LIỆU THAM KHẢO 95
Trang 17DANH MỤC HÌNH
Hình 3.1: Buổi chia sẻ sách tại KTX Khu B do Đội hỗ trợ sinh viên nội trú tổ chức 7
Hình 3.2: Logo ứng dụng GAT 8
Hình 3.3: Logo ứng dụng Goodreads 9
Hình 3.4: Logo Vapor Framework 12
Hình 3.5: Logo SwiftUI Framework 13
Hình 3.6: Triển khai mã nguồn hiệu ứng trái tim bằng SwiftUI 14
Hình 3.7: Nút hiển thị Toggle trên macOS và iOS 15
Hình 3.8: Sơ đồ mô tả hoạt động của Combine Framework 17
Hình 3.9: Mô tả cách hoạt động của WebSocket 18
Hình 3.10: Mô tả các thành phần trong mỗi Frame gửi đi bởi WebSocket 19
Hình 3.11: Logo Apple Push Notications service 20
Hình 3.12: Các chứng chỉ cần thiết để tạo thông báo đẩy 21
Hình 3.13: Lược đồ tuần tự cho thao tác nhận token của thiết bị 22
Hình 3.14: Lược đồ tuần tự cho quá trình tạo thông báo đẩy 23
Hình 3.15: Logo PostgreSQL 24
Hình 3.16: Minh hoạ bộ dữ liệu được lưu trong bảng của PostgreSQL 24
Hình 3.17: Tốc độ băm của 1 số thuật toán phổ biến 27
Hình 3.18: Mã giải thuật toán băm Bcrypt 28
Hình 3.19: Kết qủa cuối cùng của quá trình băm 28
Hình 3.20: Logo Amazone Web Services 29
Hình 3.21: Logo nền tảng đám mây Heroku 30
Hình 3.22: Quá trình truyền nhận thư bằng SMTP và POP/IMAP 32
Hình 3.23 Ví dụ về tương tác SMTP 33
Hình 4.1: Lược đồ Use case hệ thống 36
Hình 4.2: Lược đồ tuần tự cho thao tác đăng ký 41
Hình 4.3: Lược đồ tuần tự cho thao tác đăng nhập 42
Hình 4.4: Lược đồ tuần tự cho thao tác đăng nhập với Facebook 43
Hình 4.5: Lược đồ tuần tự cho thao tác khôi phục mật khẩu 44
Trang 18Hình 4.6: Lược đồ tuần tự cho thao tác cập nhật thông tin cá nhân 46
Hình 4.7: Lược đồ tuần tự cho thao tác thêm đầu sách 47
Hình 4.8: Lược đồ tuần tự cho thao tác thêm sách vào tủ 48
Hình 4.9: Lược đồ tuần tự cho thao tác quản lý lịch sử trao đổi sách 50
Hình 4.10: Lược đồ tuần tự cho thao tác thêm mới ghi chú 52
Hình 4.11: Lược đồ tuần tự cho thao tác cập nhật sách người dùng 53
Hình 4.12: Lược đồ tuần tự cho thao tác đánh giá sách 54
Hình 4.13: Lược đồ tuần tự cho thao tác tạo nhu cầu đổi sách 55
Hình 4.14: Lược đồ tuần tự cho thao tác yêu cầu trao đổi sách 56
Hình 4.15: Lược đồ tuần tự cho thao tác phản hồi trao đổi sách 58
Hình 4.16: Lược đồ tuần tự cho thao tác yêu cầu mượn sách 59
Hình 4.17: Lược đồ tuần tự cho thao tác phản hồi mượn sách 60
Hình 4.18: Lược đồ tuần tự cho thao tác nhắn tin 62
Hình 4.19: Lược đồ tuần tự cho thao tác tạo bài viết 63
Hình 4.20: Lược đồ tuần tự cho thao tác bình luận bài viết 65
Hình 4.21: Lược đồ cơ sở dữ liệu 66
Hình 4.22: Kiến trúc tổng thệ hệ thống 78
Hình 4.23: Kiến trúc ứng dụng di động 79
Hình 4.24: Màn hình tạo bài viết 83
Hình 4.25: Màn hình hiển thị bài viết 83
Hình 4.26: Màn hình hiển thị chi tiết bài viết 83
Hình 4.27: Màn hình sách được yêu thích nhất 83
Hình 4.28: Màn hình các cuốn sách đang chờ trao đổi 84
Hình 4.29: Màn hình danh sách người dùng có sẵn sách cho mượn 84
Hình 4.30: Màn hình gửi yêu cầu mượn sách 84
Hình 4.31: Màn hình tạo sách chờ trao đổi 84
Hình 4.32: Màn hình kết quả đổi sách 85
Hình 4.33: Màn hình lịch sử mượn và trao đổi sách 85
Hình 4.34: Màn hình trang cá nhân 85
Trang 19Hình 4.35: Màn hình tủ sách cá nhân 85
Hình 4.36: Màn hình chi tiết cuốn sách cá nhân 86
Hình 4.37: Màn hình thông báo hoạt động 86
Hình 4.38: Màn hình cài đặt tài khoản 86
Hình 4.39: Màn hình cập nhật vị trí hiện tại 86
Hình 4.40: Màn hình yêu cầu truy cập vị trí 87
Hình 4.41: Màn hình danh sách cuộc trò chuyện 87
Hình 4.42: Màn hình đăng nhập lần đầu 87
Hình 4.43: Màn hình nhắn tin 87
Hình 4.44: Màn hình đánh giá sách 88
Hình 4.45: Màn hình tạo yêu cầu đổi sách 88
Hình 4.46: Màn hình chi tiết đầu sách 88
Hình 4.47: Màn hình chấp nhận yêu cầu mượn sách 88
Hình 4.48: Màn hình xem yêu cầu mượn sách 89
Hình 4.49: Quá trình triển khai ứng dụng lên nền tảng đám mây 90
Hình 4.50: Thông tin máy chủ đã triển khai 90
Hình 4.51: Thông tin cơ sở dữ liệu đã triển khai 91
Trang 20DANH MỤC BẢNG
Bảng 3.1 Bảng giới hạn kích thước của dữ liệu trong PostgreSQL 26
Bảng 4.1: Danh sách actor trong hệ thống 37
Bảng 4.2: Danh sách các Use case trong hệ thống 40
Bảng 4.3: Danh sách thuộc tính của bảng Account 67
Bảng 4.4: Danh sách thuộc tính của bảng User 68
Bảng 4.5: Danh sách thuộc tính của bảng Book 68
Bảng 4.6: Danh sách thuộc tính của bảng Post 69
Bảng 4.7: Danh sách thuộc tính của bảng NotyfyType 69
Bảng 4.8: Danh sách thuộc tính của bảng Notify 70
Bảng 4.9: Danh sách thuộc tính của bảng Reaction 70
Bảng 4.10: Danh sách thuộc tính của bảng Devices 71
Bảng 4.11: Danh sách thuộc tính của bảng Category 71
Bảng 4.12: Danh sách thuộc tính của bảng PostComment 71
Bảng 4.13: Danh sách thuộc tính của bảng Setting 72
Bảng 4.14: Danh sách thuộc tính của bảng Chat 72
Bảng 4.15: Danh sách thuộc tính của bảng Message 73
Bảng 4.16: Danh sách thuộc tính của bảng MessageType 73
Bảng 4.17: Danh sách thuộc tính của bảng UserFollow 74
Bảng 4.18: Danh sách thuộc tính của bảng BookReview 74
Bảng 4.19: Danh sách thuộc tính của bảng UserCategory 75
Bảng 4.20: Danh sách thuộc tính của bảng BorrowBook 75
Bảng 4.21: Danh sách thuộc tính của bảng ExchangeBook 76
Bảng 4.22: Danh sách thuộc tính của bảng UserBook 77
Bảng 4.23: Danh sách thuộc tính của bảng Note 77
Trang 21DANH MỤC TỪ VIẾT TẮT
1 STT Số thứ tự Số thứ tự trong bảng
2 UI User Interface Là những gì chúng ta nhìn thấy và
giao tiếp với ứng dụng
3 API
Application Programming Interface
Giao diện lập trình ứng dụng Sử dụng để truy cập 1 số phương thức của hệ thống, từ đó có thể trao đổi
6 REST Representational State
Transfer
Một kiểu kiến trúc lập trình, định nghĩa các quy tắc để thiết kế web service
Trang 22- Tìm hiểu các công nghệ mới, phù hợp để áp dụng vào phát triển hệ thống
- Phân tích, thiết kế hệ thống, thiết kế cơ sở dữ liệu và giao diện ứng dụng
- Phát triển ứng dụng hoàn chỉnh chạy trên nền tảng iOS
- Triển khai máy chủ lên nền tảng đám mây Heroku
- Trình bày báo cáo, đưa ra kết luận và hướng phát triển cho ứng dụng chia sẻ
và trao đổi sách
Trang 232
Chương 1 MỞ ĐẦU
1.1 Giới thiệu đề tài
Sách chứa đựng nguồn kiến thức vô cùng lớn của nhân loại Những bài học, kinh nghiệm của người đi trước, những nghiên cứu, phát minh được lưu lại đã giúp tác động trực tiếp theo hướng tích cực đến cuộc sống của con người Sách giúp ta kết nối với thế giới bên ngoài, tiếp cận các kiến thức mới của xã hội, thúc đẩy khả năng sáng tạo, nâng cao dân trí và tu dưỡng nhân cách
Năm 2014, hưởng ứng Ngày Sách và Bản quyền Thế giới, Thủ tướng Chính phủ đã ban hành quyết định 284/QĐ – TTg lấy ngày 21/4 hằng năm là Ngày Sách Việt
Nam nhằm:
1 Khuyến khích và phát triển phong trào đọc sách trong cộng đồng, nâng cao nhận thức của nhân dân về ý nghĩa to lớn và tầm quan trọng của việc đọc sách đối với việc nâng cao kiến thức và kỹ năng, phát triển tư duy, giáo dục
và rèn luyện nhân cách con người
2 Tôn vinh giá trị của sách, khẳng định vai trò, vị trí, tầm quan trọng của sách trong đời sống xã hội; tôn vinh người đọc và những người tham gia sưu tầm, sáng tác, xuất bản, in, phát hành, lưu giữ, quảng bá sách
3 Nâng cao trách nhiệm của các cấp, các ngành, các cơ quan chức năng và các tổ chức xã hội đối với việc xây dựng và phát triển văn hóa đọc Việt Nam
Qua đó ta thấy được sự quan tâm của nhà nước về việc đọc sách, và tất cả mọi ngời đều có trách nhiệm để góp phần hoàn thành mục tiêu chung, đẩy mạnh xây dựng xã hội học tập
Trang 243
Theo một khảo sát1 gần đây, dữ liệu thu được cho thấy việc đọc sách việc đọc sách của người Việt Nam còn vô cùng khiêm tốn Dữ liệu thể hiện bao gồm 30% số người đọc sách thường xuyên, 44% thỉnh thoảng đọc sách và 26% không đọc sách Đồng thời thời lượng đọc sách mỗi tuần của người Việt Nam chưa tới 1 giờ, thuộc nhóm có thời lượng đọc sách thấp nhất của các nước được khảo sát
Vì vậy, để góp phần khích lệ tinh thần, hình thành hói quen đọc sách của mọi người
và kết nối những người có cùng sở thích đọc sách, đề tài khoá luận đã được lên ý tưởng và thực hiện
1.2 Lý do chọn đề tài
Có những cuốn sách đọc mãi không chán, cứ đọc hết lần này tới lần khác Mỗi lần mở sách ra đọc chúng ta lại học thêm được điều gì mới mẻ Nhưng cũng có những cuốn sách ta chỉ đọc 1 lần rồi đặt lên tủ sách mà không còn đọc tới lần thứ 2, nổi bật nhất là các cuốn sách giáo trình và sách truyện Việc để những cuốn sách nằm yên trên kệ sẽ rất lãng phí vì ngoài kia, rất nhiều người yêu sách nhưng không đủ tiền mua hay đang tìm kiếm những cuốn sách đã ngừng xuất bản Hiện nay cũng đã có vài phương pháp được triển khai, điển hình là trao đổi sách qua các nhóm trên mạng xã hội Facebook Tuy nhiên, việc đăng tải và trao đổi trên nền tảng không được thiết kế phù hợp với trao đổi sách khiến các bài tìm kiếm, trao đổi dễ bị trôi và chìm vào quên lãng Người đọc cũng khó khăn để quản lý những cuốn sách đã mượn/cho mượn của bản thân
Cùng với đó, việc tìm kiếm được cuốn sách hay và phù hợp với bản thân là bước đầu tiên và cũng là bước vô cùng quan trọng khi bắt đầu hành trình khám phá một cuốn sách mới Vậy làm thế nào để lựa chọn đúng sách giữa hàng ngàn đầu sách được xuất bản mỗi tháng? Một sự lựa chọn nhanh chóng là ta có thể xem đánh giá trên cửa hàng sách trực tuyến, gợi ý của mạng xã hội Goodreads, … Nhưng tất cả
1 Tham khảo từ: https://thanhnien.vn/thoi-su/26-nguoi-viet-nam-hoan-toan-khong-doc-sach-1072672.html
Trang 254
những nguồn gợi ý kể trên đều có đánh giá chung với số sao nhất định Mọi thứ sẽ tuyệt vời hơn nếu ta có đánh giá chi tiết về các tiêu chí khác nhau và chọn ra cuốn mà tiêu chí mình quan tâm được nhiều bình chọn nhất
Từ những thực trạng, vấn đề được nêu trên, em đã lên ý tưởng về một hệ thống kết nối và phục vụ những nhu cầu thường nhật dành cho những người yêu sách
Trong quá trình hình thành ý tưởng, em cũng đã tham khảo và tìm hiểu các hệ thống đã giải quyết các vấn đề nêu ra Kết quả là nhận thấy chưa có hệ thống nào phù hợp, giải quyết đầy đủ Tuy nhiên, nhờ tham khảo các hệ thống khác mà em rút ra được những kinh nghiệm hữu ích và quyết định tạo ra ứng dụng chia sẻ và trao đổi sách
Trang 26- Trao đổi sách: Tìm kiếm, trao đổi sách giấy
- Mượn sách: Yêu cầu mượn sách giấy trên kho sách chung (kho sách chứa tất
cả cuốn sách của người dùng ở trạng thái “sẵn sàng cho mượn”) tới chủ sở hữu
- Quản lý tủ sách: Thêm mới, cập nhật tình trạng và trạng thái sách Thêm các bài học rút ra từ những cuốn sách trong tủ
- Thông báo: Luôn nhận được thông báo kể cả khi không mở ứng dụng
- Khởi tạo tài khoản: Sử dụng email đăng ký và tích hợp đăng nhập với mạng
xã hội Facebook
Trang 276
2.3 Phương pháp thực hiện
- Tìm hiểu và đánh giá các giải pháp đã có
- Đề xuất, cải thiện các tính năng cần thiết
- Tìm hiểu, ứng dụng các công nghệ mới, phù hợp
- Áp dụng mô hình thác nước vào xây dựng ứng dụng
2.4 Ý nghĩa thực tiễn
- Tạo môi trường kết nối người yêu sách, thúc đẩy tinh thần chia sẻ các bài học, góc nhìn về sách
- Giúp bạn đọc dễ dàng tìm kiếm sách phù hợp với bản thân
- Người dùng tiếc kiệm chi phí, tiếp cận được nhiều sách hơn nhờ việc mượn và đổi sách
- Dễ dàng quản lý các cuốn sách và các bài học được rút ra
- Nâng cao trách nhiệm sử dụng sách hiệu quả trong cộng đồng
Trang 28Qua tìm hiểu, em nhận thấy đã có nhiều cá nhân, tổ chức đã và đang quan tâm đến việc đọc sách cũng như chia sẻ sách Buổi chia sẻ sách giúp mọi người có dịp chia sẻ suy nghĩ quan điểm riêng của mình Những trăn trở công việc, khúc mắc tư duy tìm được câu trả lời thông qua kiến thức vô giá có trong sách
Hình 3.1: Buổi chia sẻ sách tại KTX Khu B do Đội hỗ trợ sinh viên nội trú tổ chức2
2 Nguồn: https://www.facebook.com/doihtsvnt
Trang 298
Ở một số trường đại học, các ngày hội sách hằng năm cũng được tổ chức bởi các câu lạc bộ, đội nhóm Các bạn tình nguyện viêm tham gia thu gom sách từ các bạn sinh viên, đa số những sách nhận được là giáo trình, kỹ năng và tiếng anh Nhờ đó các bạn sinh viên có nhu cầu nhận sách miễn phí sẽ tới ngày hội, xếp hàng điểm danh và thoải mái lựa chọn các cuốn sách cho bản thân
Và ở ngay tại Trường Đại học Công nghệ Thông tin, khi bắt đầu một học kỳ mới, trên các nhóm Facebook của các khoá UIT K11, UITK12, …cũng luôn có những bài viết tìm kiếm sách, chia sẻ miễn phí và mượn sách, giúp các bạn sinh viên tiếc kiệm được một khoản chi phí đáng kể
Việc cho mượn sách không chỉ giúp mọi người về mặt tài chính, dễ dàng tiếp cận các đầu sách khác mà còn giúp tận dụng nguồn tài nguyên quý giá này trong cộng đồng
và phục vụ nhu cầu tìm kiếm những cuốn sách đã ngừng xuất bản
Ưu điểm:
3 Nguồn: https://gatbook.org/
Trang 309
- Hỗ trợ tương đối đầy đủ các chức năng cơ bản cho việc mượn sách
- Có sẵn trên nền tảng Android và iOS
- Có thể kết nối bạn bè nhờ chắc năng bạn bè xung quanh
- Được đánh giá rất cao về mặt ý tưởng trên App Store và Google Play
- Chỉ có thể đánh giá sách theo 1 tiêu chí
- Người dùng chỉ có thể để lại đánh giá trên các cuốn sách, không thể thảo luận trên các đánh giá đó
3.1.1.2 Ứng dụng Goodreads
Hình 3.3: Logo ứng dụng Goodreads4
“Goodreads là trang web lớn nhất cho những người đọc sách, chia sẻ và giới thiệu sách Sứ mệnh của trang hướng đến giúp mọi người tìm và chia sẻ những cuốn sách mà họ yêu thích Goodreads được thành lập từ tháng 1 năm 2007.”5
Ưu điểm:
- Hệ thống giới thiệu sách hữu ích dựa trên dữ liệu những cuốn sách đã đọc
- Dễ dàng quản lý cuốn sách của bản thân, đánh giá sao, thêm ngày đọc và viết đánh giá về cuốn sách bạn đã đọc
4 Nguồn: https://www.goodreads.com
5 Trích phần giới thiệu của ứng dụng: https://www.goodreads.com/about/us
Trang 31- Có thể kết nối và đặt câu hỏi trực tiếp tới tác giả giúp người đọc hiểu thêm
ý nghĩa đằng sau các chi tiết trừu tượng
- Có 2 nền tảng để sử dụng: Web và ứng dụng di động
Hạn chế:
- Sách chỉ được đánh giá theo 1 tiêu chí duy nhất vì thế sẽ không thể hiện được chi tiết các khía cạnh mà sách thể hiện
- Nền tảng di động không được đầu tư nhiều, vì thế bị thiếu nhiều chức năng
so với phiên bản web (ví dụ điều chỉnh ngày đọc, ẩn tin, …)
- Có thể nói đây là ứng dụng tuyệt vời để tìm kiếm những cuốn sách phù hợp Tuy nhiên với hiện trạng được khảo sát trên, ứng dụng này chưa thể giải quyết vấn đề chia sẻ sách
3.1.2 Đánh giá hiện trạng và hướng giải quyết
3.1.2.1 Đánh giá hiện trạng
Sách lưu giữ nguồn kiến thức vô tận của nhân loại và ảnh hưởng tới cuộc sống mỗi người Ngày nay, nhờ hiểu đươc tầm quan trọng của sách mà mọi người càng trân trọng và nâng niu nó hơn Cùng nhờ đó, các chương trình chia sẻ và trao đổi sách cũng xuất hiện nhiều hơn, đã thúc đẩy và cổ vũ tinh thần đọc sách của mọi người
Trang 3211
Tuy nhiên, cần nhìn nhận một cách khách quan rằng, các chương trình đang được tổ chức hoàn toàn một cách thủ công và đang bị hạn chế về mặt địa lý Việc này dẫn đến các tài nguyên sách trong cộng đồng chưa được tận dụng triệt
để, hoạt động trao đổi sách không được liên tục, tốn kém các chi phí phát sinh
và người mượn sách phải trải qua nhiều thủ tục, mất thời gian chờ để có được cuốn sách mong muốn
Rất nhiều ý tưởng đã được đưa ra và xuất hiện trên các cuộc thi đã được sự đánh giá rất cao từ cộng đồng Nhưng một trong số đó chỉ dừng lại ở ý tưởng, một số
đã được tiến hành một cách thủ công, cũng có một số đã tin học hoá và phục vụ nhu cầu của mọi người Nhưng với tiêu chuẩn khắt khe từ thị trường, những ứng dụng đó vẫn còn nhiều hạn chế cần cải thiện để hỗ trợ cộng đồng đọc sách một cách tốt hơn
3.1.2.2 Hướng giải quyết
Để hỗ trợ chia sẻ và trao đổi sách được tốt hơn, việc ứng dụng công nghệ thông tin vào quản lý sẽ giúp các thủ tục được diễn ra tự động ở nhiều bước, cắt giảm chi phí, giảm bớt sai sót và tạo ra sự tiện lợi cho mọi người
Tại Việt Nam, theo báo cáo6 “Thị trường điện thoại và ứng dụng di động Việt Nam 6 tháng đầunăm 2020” do Appota phát hành, tỉ lệ sử dụng điện thoại di động chiếm đến 70% tổng dân số tương dương 150 triệu thiết bị Trong đó tỉ lệ người sử dụng smartphone chiếm hơn 45% dân số và xếp hạng thứ 15 trên thế giới Vì vậy, xây dựng hế thống cho phép người dùng trao đổi sách trên nền tảng di động là sự lựa chọn phù hợp trong bối cảnh hiện tại
6 Tham khảo từ https://thanhnien.vn
Trang 3312
Tận dụng các tài nguyên có sẵn, kế thừa những tính năng hữu ích của các ứng dụng đã ra đời trước đó cùng với đánh giá, bổ sung các tính năng mới Tận dụng tối đa khả năng của thiết bị và tối ưu hoá trải nghiệm người dùng
3.2 Công nghệ sử dụng
3.2.1 Vapor
Hình 3.4: Logo Vapor Framework7
Vapor là web framework mã nguồn mở được viết bằng ngôn ngữ Swift Nó được xây dựng dựa trên thư viện SwiftNIO của Apple, cung cấp 1 framework mạnh mẽ
và bất đồng bộ Vapor cho phép xây dựng back-end cho ứng dụng iOS, front-end websites và ứng dụng server độc lập chạy trên môi trường MacOS và Linux
Apple công bố mã nguồn mở Swift vào năm 2015 đã cho phép các nhà phát triễn
dễ dàng tạo ra các web framework với bằng ngôn ngữ Swift Qua đó, phiên bản đầu tiên của vapor đã được Tanner Nelson viết ra và tháng 1 năm 2016 Theo thời gian, vapor đã được sự ủng hộ và đóng góp nhiệt tình từ cộng đồng, trở thành server-side Swift framework trên Github Tới thời điểm hiện tại, Vapor đã phát hành 389 phiên bản và sẽ còn tiếp tục cập nhật thêm các tính năng mới ở những phiên bản tiếp theo
Đề tài sử dụng vapor phiên bản 4.0.0, được phát hành ngày 31 tháng 3 năm 2020
7 Nguồn: https://vapor.codes/
Trang 3413
3.2.2 SwiftUI
Hình 3.5: Logo SwiftUI Framework8
Trong WWDC20199, Apple đã gây bất ngờ cho các nhà phát triển khi công bố một framework hoàn toàn mới – SwiftUI Đây là sự thay đổi lớn nhất trong hệ sinh thái của nhà phát triển Apple (bao gồm iOS, iPadOS, macOS, tvOS và watchOS) kể từ khi Swift ra mắt
Với UIKit được Apple cung cấp để phát triển giao diện trước đây, nhà phát triển luôn phải cân nhắc giữa việc sử dụng Storyboards hay xây dựng giao diện hoàn toàn bằng code Nhưng việc giới thiệu UI framework mới này, Apple cung cấp một cách mới sử dụng cú pháp lập trình mô tả giúp viết code dễ dàng hơn, ít dòng code hơn so với UIKit
SwiftUI cung cấp khả năng xem trước của giao diện hoàn chỉnh, mọi thay đổi trên code sẽ lập tức được thể hiện trên canvas Nó cũng có thể tự động tạo mã nguồn khi ta thêm UI component trực quan dựa trên kéo thả
8 Nguồn: https://developer.apple.com/xcode/swiftui
9 WWDC là viết tắt của Apple Wordwide Developers Conference, hội nghị được Apple tổ chức hằng năm nhằm giới thiệu các phần mềm mới và công nghệ để phát triển phần mềm
Trang 3514
Hình 3.6: Triển khai mã nguồn hiệu ứng trái tim bằng SwiftUI10
Với SwiftUI, sẽ không còn khái niệm InterfaceBuilder và storyboards Nó được thay thế bởi trình soạn thảo code và preview canvas Bạn viết code lên trình soạn thảo, sau đó Xcode sẽ render giao diện theo thời gian thực và hiển thị lên canvas
Tương tự storynboards, View controller cũng không còn được sử dụng để làm khối
xử lý trung tâm để giao tiếp với View và Model Thay vào đó, việc giao tiếp và chia sẻ dữ liệu được thực hiện bởi một framework mới gọi là Combine
Apple cung cấp cho nhà phát triển một UI framework thống nhất để xây dựng cho tất cả các loại Apple devices Giao diện được viết cho iOS có thể dễ dàng chuyển sang sử dụng cho ứng dụng watchOS/ macOS Điều này được thực hiện nhờ vào phương pháp lập trình dạng mô tả
10 Nguồn: https://www.appcoda.com/learnswiftui
Trang 3615
Hình 3.7: Nút hiển thị Toggle trên macOS và iOS11
Sau khi WWDC2020 được tổ chức, mặc dù nhiều UI component đã được bổ sung nhưng vẫn còn tương đối hạn chế, một số UI component sẽ phải tự viết lại dựa trên SwifUI và UIKit Để làm được điều này, ta sử dụng Representable Protocols mà Apple cung cấp Phiên bản SwiftUI được sử dụng là phiên bản 2.0, được giới thiệu vào ngày 22 tháng 6 năm 2020
3.2.3 Combine
Combine framework là một framework mới được Apple giới thiệu năm 2019, cung cấp declarative Swift API để xử lý giá trị qua thời gian (processing values over time) Gồm có 3 thành phần chính:
- Publisher: Những thứ có thể tạo ra các giá trị là các đối tượng có sẵn hoặc do người dùng tự định nghĩa
- Operators: Những thứ mà sẽ làm việc với các giá trị
- Subscribers: Nhứng thứ sẽ quan tâm, lắng nghe sự thay đổi của các giá trị đó
Publisher:
11 Nguồn: https://www.appcoda.com/learnswiftui/
Trang 3716
Những đối tượng (objects) đáp ứng (conform) với Publisher sẽ chuyển giao một cách tuần tự các giá trị theo thời gian Protocols này liên kết với 2 kiểu dữ liệu: Output – kiểu dữ liệu mà nó sẽ tạo ra, và Failure – kiểu dữ liệu lỗi mà có thể nó sẽ gặp phải
Mỗi publisher có thể phát ra nhiều sự kiện:
- Một giá trị output của kiểu dữ liệu Output
có thể kết hợp nhiều operators để xử lý các bài toán phức tạp
Kết hợp các thành phần:
Trang 3817
Hình 3.8: Sơ đồ mô tả hoạt động của Combine Framework12Một publisher bắt đầu chuyển giao dữ liệu (values) khi chúng ta gọi hàm subscribe(_:) lên nó Tại lúc này, publisher sẽ gửi subscription tới subscriber Subscriber có thể sử dụng subscription này để yêu cầu publisher gửi các values vô hạn hoặc hữu hạn Sau đó, publisher sẽ liên tục gửi các sự kiện (events) tới subscribers cho đến khi kết thúc hoặc gặp lỗi
Một minh hoạ đơn giản, có thể coi các publishers như các cảng sông ở thượng nguồn, nó sẽ tạo ra các con thuyền mang theo hàng hoá (values), trên đường trôi dạt về hạ nguồn sẽ đi qua các trạm kiểm soát (operators), hàng hoá được kiểm tra
và thay đổi cho phù hợp Khi đến hạ nguồn, người quản lý ở đó (subcribers) sẽ nhận được thông báo hàng hoá gửi đến đã thành công, yêu cầu kết thúc quá trình chuyển hàng Hoặc hàng hoá vẫn liên tục truyền đến, tuỳ vào trường hợp hàng hoá
đó là gì, trạng thái và tình trạng như thế nào mà có cách xử lý phù hợp Trong trường hợp chuyển hàng thất bại, người quản lý cũng sẽ nhận được thông báo và chuẩn bị sẵn các phương án xử lý
12 Nguồn: https://www.raywenderlich.com
Trang 3918
3.2.4 WebSocket
WebSocket là một giao thức mạng cho phép giao tiếp 2 chiều giữa máy chủ và máy khách Không giống HTTP - giao thức sử dụng dạng request và response, WebSocket có thể gửi gói tin từ 1 trong 2 hướng tại bất cứ thời điểm nào
Hình 3.9: Mô tả cách hoạt động của WebSocket13Một kết nối WebSocket bắt đầu với quá trình bắt tay bắt đầu từ phía client Đầu tiên, client gửi một HTTP request chứa 2 headers đặc biệt: Upgrade: WebSocket
và Connection: Upgrade, cùng với các dữ liệu khác như authencation, …
Server ngay khi nhận được request sẽ phản hồi một mã trạng thái HTTP 101 Switching Protocols để cho client biết: Cả 2 đã sử dụng từng giao tiếp thông qua HTTP, nhưng trong lần tiếp theo sẽ sử dụng giao thức khác Cùng với mã HTTP
101, nó cũng kèm theo headers Upgrade: WebSocket và Connection: Upgrade Lúc này, quá trình bắt tay hoàn tất và kết nối WebSocket cũng sẵn sàng để sử dụng
WebSocket là một giao thức gửi theo khung (framed protocol), nếu dữ liệu (message) quá lớn, nó sẽ được chia thành các khối rời rạc (frame) để gửi đi Mỗi
13 Nguồn: https://www.raywenderlich.com
Trang 4019
frame bao gồm frame type, độ dài payload và một phần dữ liệu Mô tả các thành phần trong 1 frame được biểu ở hình bên dưới
Hình 3.10: Mô tả các thành phần trong mỗi Frame gửi đi bởi WebSocket14
FIN: Đây là 1 bit thể hiện rằng nó có phải là frame cuối cùng hay vẫn còn những
frame khác đang được gửi phía sau
Opcode: Gồm 4 bits thể hiện loại dữ liệu được gửi là gì và cách để xử lý payload
data
MASK: Đây là 1 bit cho biết dữ liệu có được maskd Dữ liệu giữ clident-server
luôn phải được masked
Payload Length: Sử dụng 7, 23 hoặc 71 bits để nói lên độ lớn của payload data
theo đơn vị bit Phần này tương tự với Content-Length của HTTP header
14 Nguồn: https://tools.ietf.org