Về phía công ty: Admin sẽ là người có quyền hạn cao nhất, quản lí dữ liệu và nhân viên khác Manager là người quản lí dữ liệu phim, xuất chiếu, rạp … Censor là người kiểm duyệt các bài đă
Trang 1Sinh viên thực hiện:
19522321 – Trần Trí Thức
19520145 – Nguyễn Khánh Linh
Thành phố Hồ Chí Minh, tháng 09 năm 2022
Trang 2ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
Sinh viên thực hiện:
19522321 – Trần Trí Thức
19520145 – Nguyễn Khánh Linh
Thành phố Hồ Chí Minh, tháng 09 năm 2022
Trang 3ĐỀ CƯƠNG CHI TIẾT
TÊN ĐỀ TÀI: XÂY DỰNG HỆ THỐNG HỖ TRỢ QUẢN LÍ BÁN VÉ XEM PHIM TÍCH HỢP KHUYẾN NGHỊCán bộ hướng dẫn: ThS Nguyễn Thị Thanh Trúc
Thời gian thực hiện: Từ ngày 05/09/2022 đến ngày 31/12/2022
Sinh viên thực hiện:
cứu thông tin; ứng dụng Recommend system gợi ý phim cho khách hàng:
Giúp khách hàng có thể xem thông tin bộ phim, bình luận về phim cũng như thực hiện thao tác đặt vé, đánh giá phim
Hỗ trợ việc tìm kiếm theo nhiều bộ lọc khác nhau
Có hệ thống quản lí dữ liệu: quản lí phim, các cụm rạp, nhân viên, các bài bình luận, các đơn hàng đã đặt, thông tin cá nhân…
Thực hiện kiểm duyệt đối với các bài bình luận phim
Chatbot tư vấn gợi ý phim cho khách hàng
Recommed system gợi ý phim liên quan đến khách hàng
Phạm vi:
Đề tại xây dựng một website cung cấp một số tính năng cơ bản về đặt vé xem phim online với các phân quyền chính:
Trang 4Về phía công ty:
Admin sẽ là người có quyền hạn cao nhất, quản lí dữ liệu và nhân viên khác
Manager là người quản lí dữ liệu phim, xuất chiếu, rạp …
Censor là người kiểm duyệt các bài đăng từ khách hàng
Về phía khách hàng:
Customer là người đặt vé, thanh toán và đăng các bài bình luận phim trên website
Sử dụng chatbot tra cứu thông tin
Hệ thống đề xuất các phim theo hành vi của người dùng
Đối tượng sử dụng:
Người dùng muốn xem thông tin các bộ phim, các bài bình luận, có nhu cầu đặt vé xem phim
Sử dụng chatbot tư vấn trực tuyến
Hệ thống đợi ý phim theo hành vi của khách hàng
Admin quản lí các nhân viên, cụm rạp; thống kê, báo cáo doanh thu
Nhân viên kiểm tra đơn hàng, giải đáp thắc mắc của khách hàng
Người kiểm duyệt kiểm tra nội dung các bài bình luận phim theo quy định
Phương pháp thực hiện:
Tìm hiểu, phân tích quy trình xây dựng một website, hệ thống gợi ý bằng các công nghệ đã đề ra
Phân tính, đánh giá các ứng dụng tương tự
Khảo sát lấy ý kiến người dùng
Kết quả mong đợi:
Trang 5Biết được quy trình xây dựng một website cơ bản thông qua các công nghệ đã đề ra
Biết được thủ tục thanh toán, quản lí hệ thống quản lí xem phim
Xây dựng được một ứng dụng website đáp ứng gợi được việc ý phim và chatbot
Wibsite có khả năng mở rộng trong tương lai
Trang 6LỜI CẢM ƠN
Đồ án với đề tài “XÂY DỰNG HỆ THỐNG HỖ TRỢ ĐĂT VÉ XEM PHIM TÍCH HỢP KHUYẾN NGHỊ” 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 khi 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 đồ án, em đã nhận được sự hướng dẫn tận tình từ cô 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ô Nguyễn Thị Thanh Trúc 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 Nguyễn Thị Thanh Trúc, 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ác thành viên trong nhóm đã luôn nổ lực phấn đấu, lắng nghe và luôn sẵn sàng hỗ trợ nhau trong suốt cả quá trình học tập và thực hiện đồ án Để đạt được kết quả như ngày hôm nay
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 đồ án này
Thành phố Hồ Chí Minh, tháng 12 năm 2022
Sinh viên 1 Sinh viên 2
Trần Trí Thức Nguyễn Khánh Linh
Trang 7NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
Trang 8DANH MỤC HÌNH ẢNH
Hình 1 Phân loại Recommend System 19
Hình 2 Mô tả thuật toán 21
Hình 3 Ma trận dữ liệu 22
Hình 4 Flask 26
Hình 5 ReactJs 28
Hình 6 ExpressJs 28
Hình 7 Pandas 29
Hình 8 NumPy 30
Hình 9 ScikitsLearn 31
Hình 10 SciPy 33
Hình 11 Mongoose 34
Hình 12 Redux 34
Hình 13 NodeMailer 35
Hình 14 AXIOS 36
Hình 15 MongoDB 37
Hình 16 Cloudinary 38
Hình 17 JWT 39
Hình 18 Sơ đồ của JWT 39
Hình 19 Hình ảnh thực tế JWT 40
Hình 20 Paypal tiêu chuẩn 41
Hình 21 Paypal nâng cao 42
Hình 22 Paypal tuỳ chỉnh 43
Hình 23 Cách thức hoạt động giao dịch Paypal 44
Hình 24 Cách thức hoạt động khi lập hoá đơn Paypal 45
Hình 25 Google Trends 46
Hình 26 Sơ đồ phân rã chức năng Admin 49
Hình 27 Sơ đồ phân rã chức năng manager 49
Hình 28 Sơ đồ phân rã chức năng censor 50
Hình 29 Sơ đồ phân rã chức năng customer 50
Hình 30 Usecase toàn hệ thống 52
Hình 31 Usecase Đăng nhập 53
Hình 32 Usecase đăng kí 54
Hình 33 Usecase chatbot Shinema 54
Hình 34 Usecase chatbot 55
Hình 35 Usecase Quản lí suất chiếu 56
Hình 36 Usecase Quản lí rạp 57
Hình 37 Usecase Quản lí phòng 58
Hình 38 Usecase Quản lí bài đăng 59
Trang 9Hình 39 Usecase Bình luận 60
Hình 40 Usecase Tìm phim 60
Hình 41 Usecase tìm diễn viên 61
Hình 42 Usecase Đặt vé 61
Hình 43 Usecase Gợi ý phim 62
Hình 44 Sơ đồ DFD đăng nhập 63
Hình 45 Sơ đồ DFD đăng kí 64
Hình 46 Sơ đồ DFD chỉnh sửa thông tin cá nhân 64
Hình 47 Sơ đồ DFD thanh toán 65
Hình 48 Sơ đồ DFD tìm diễn viên 65
Hình 49 Sơ đồ DFD tìm phim 66
Hình 50 Sơ đồ DFD thêm suất chiếu 67
Hình 51 Sơ đồ DFD sửa suất chiếu 68
Hình 52 Sơ đồ DFD xoá suất chiếu 69
Hình 53 Sơ đồ DFD Gợi ý dựa vào nội dung tương tự 70
Hình 54 Sơ đồ DFD Gợi ý phim dựa vào hành vi của các người dùng tương tự khác 71
Hình 55 Sơ đồ DFD dựa vào xu hướng 72
Hình 56 Activity Đăng nhập 73
Hình 57 Activity Đăng kí 74
Hình 58 Activity Chatbot 75
Hình 59 Activity Chatbot 76
Hình 60 Activity Thêm suất chiếu 77
Hình 61 Activity Sửa suất chiếu 78
Hình 62 Activity Xoá suất chiếu 79
Hình 63 Activity Bình luận 80
Hình 64 Activity Đặt vé 81
Hình 65 Activity Tìm phim 82
Hình 66 Activity Tìm diễn viên 82
Hình 67 Activity gợi ý phim tương tự 83
Hình 68 Gợi ý phim dựa vào hành vi người dùng tương tự 84
Hình 69 Gợi ý phim theo xu hướng 85
Hình 70 Lược đồ cơ sở dữ liệu 86
Hình 71 Kiến trúc tổng thể 93
Hình 72 Thư mục client 94
Hình 73 Thư mục server 95
Hình 74 Thư mục server Python 96
Hình 75 Sơ đồ liên kết màn hình admin 97
Hình 76 Sơ đồ liên kết màn hình manager 98
Hình 77 Sơ đồ liên kết màn hình censor 99
Hình 78 Sơ đồ liên kết màn hình customer 102
Trang 10Hình 79 Màn hình chính 102
Hình 80 Màn hình chính 103
Hình 81 Màn hình chính 104
Hình 82 Màn hình chính 105
Hình 83 Màn hình chính 106
Hình 84 Màn hình chi tiết phim 107
Hình 85 Màn hình chi tiết phim 108
Hình 86 Màn hình chi tiết phim 109
Hình 87 Màn hình chi tiết phim 110
Hình 88 Màn hình chi tiết diễn viên 111
Hình 89 Màn hình chi tiết diễn viên 112
Hình 90 Màn hình chi tiết diễn viên 113
Hình 91 Màn hình thanh toán 114
Hình 92 Màn hình thanh toán 116
Hình 93 Màn hình thanh toán 117
Hình 94 Màn hình thanh toán 119
Hình 95 Danh sách suất chiếu 120
Hình 96 Màn hình thêm suất chiếu 122
Hình 97 Màn hình review phim 124
Hình 98 Màn hình chatbot 126
Hình 99 Màn hình xu hướng 127
Hình 100 Màn hình Report 128
Trang 11DANH MỤC BẢNG BIỂU
Bảng 1 Phân công công việc 17
Bảng 2 Sandbox account 41
Bảng 3 Bảng nghiệp vụ 47
Bảng 4 Bảng dữ liệu Suất chiếu 86
Bảng 5 Bảng dữ liệu DateTime 87
Bảng 6 Bảng dữ liệu User 87
Bảng 7 Bảng dữ liệu Ticket 88
Bảng 8 Bảng dữ liệu Invoice 89
Bảng 9 Bảng dữ liệu Theater 90
Bảng 10 Bảng dữ liệu Room 90
Bảng 11 Bảng dữ liệu Review 91
Bảng 12 Bảng dữ liệu Comment 92
Bảng 13 Bảng mô tả màn hình chính 102
Bảng 14 Bảng mô tả biến cố màn hình chính 103
Bảng 15 Bảng mô tả màn hình chính 103
Bảng 16 Bảng mô tả biến cố màn hình chính 104
Bảng 17 Bảng mô tả màn hình chính 104
Bảng 18 Bảng mô tả biến cố màn hình chính 105
Bảng 19 Bảng mô tả màn hình chính 105
Bảng 20 Bảng mô tả biến cố màn hình chính 106
Bảng 21 Bảng mô tả màn hình chính 106
Bảng 22 Bảng mô tả biến cố màn hình chính 107
Bảng 23 Bảng mô tả màn hình chính 107
Bảng 24 Bảng mô tả biến cố màn hình chính 108
Bảng 25 Bảng mô tả màn hình chính 109
Bảng 26 Bảng mô tả biến cố màn hình chính 109
Bảng 27 Bảng mô tả màn hình chính 109
Bảng 28 Bảng mô tả biến cố màn hình chính 110
Bảng 29 Bảng mô tả màn hình chính 110
Bảng 30 Bảng mô tả biến cố màn hình chính 111
Bảng 31 Bảng mô tả màn hình chính 111
Bảng 32 Bảng mô tả biến cố màn hình chính 112
Bảng 33 Bảng mô tả màn hình chính 112
Bảng 34 Bảng mô tả biến cố màn hình chính 113
Bảng 35 Bảng mô tả màn hình chính 113
Bảng 36 Bảng mô tả biến cố màn hình chính 114
Trang 12Bảng 37 Bảng mô tả màn hình chính 114
Bảng 38 Bảng mô tả biến cố màn hình chính 115
Bảng 39 Bảng mô tả màn hình chính 116
Bảng 40 Bảng mô tả biến cố màn hình chính 116
Bảng 41 Bảng mô tả màn hình chính 117
Bảng 42 Bảng mô tả biến cố màn hình chính 118
Bảng 43 Bảng mô tả màn hình chính 119
Bảng 44 Bảng mô tả biến cố màn hình chính 119
Bảng 45 Bảng mô tả màn hình danh sách suất chiếu 120
Bảng 46 Bảng mô tả danh sách biến cố 121
Bảng 47 Bảng mô tả màn hình thêm suất chiếu 122
Bảng 48 Bảng mô tả biến cố màn hình thêm suất chiếu 123
Bảng 49 Bảng mô tả màn hình thêm review phim 124
Bảng 50 Bảng mô tả biến cố màn hình thêm review phim 125
Bảng 51 Bảng mô tả màn hình chatbot 126
Bảng 52 Bảng mô tả biến cố màn hình chatbot 127
Bảng 53 Bảng mô tả màn hình xu hướng 127
Bảng 54 Bảng mô tả biến cố màn hình xu hướng 128
Bảng 55 Bảng mô tả Màn hình report 128
Bảng 56 Bảng mô tả biến cố màn hình Report 129
Trang 13MỤC LỤC
ĐỀ CƯƠNG CHI TIẾT 2
LỜI CẢM ƠN 5
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN 6
Chương 1 GIỚI THIỆU TỔNG QUAN ĐỀ TÀI 15
1.1 Lý do chọn đề tài 15
1.2 Mục tiêu 15
1.3 Phạm vi 16
1.4 Đối tượng 16
1.5 Phương pháp thực hiện 17
1.6 Công nghệ sử dụng 17
1.7 Kết quả mong đợi 17
1.8 Quy trình thực hiện 17
Chương 2 CƠ SỞ LÝ THUYẾT VÀ CÔNG NGHỆ 19
2.1 Lý thuyết 19
2.1.1 Recomment System 19
2.1.2 Chatbot 25
2.2 Công nghệ sử dụng 26
2.2.1 Framework 26
2.2.2 Thư viện 29
2.2.3 Database 37
2.2.4 Tiêu chuẩn 38
2.3 Hỗ trợ thanh toán trực tuyến 40
2.4 Google Trends 45
Chương 3 PHÂN TÍCH BÀI TOÁN 47
3.1 Nghiệp vụ 47
3.2 Yêu cầu tính năng 48
3.3 Phân tích yêu cầu chức năng 49
3.3.1 Admin 49
3.3.2 Manager 49
Trang 143.3.3 Censor 50
3.3.4 Customer 50
3.4 Phân tích yêu cầu phi chức năng 51
3.5 Phân tích yêu cầu người dùng 51
3.6 Mô hình use case toàn hệ thống 52
3.7 Một số mô hình Use case của hệ thống 53
3.7.1 Use case Đăng nhập 53
3.7.2 Use case Đăng kí 54
3.7.3 Use case Chat bot Shemina 54
3.7.4 Use case Quản lí suất chiếu 56
3.7.5 Use case Quản lí rạp 57
3.7.6 Use case Quản lí phòng 58
3.7.7 Use case Quản lí bài đăng 59
3.7.8 Use case Bình luận bài đăng 60
3.7.9 Use case Tìm phim 60
3.7.10 Use case Tìm diễn viên 61
3.7.11 Use case Đặt vé 61
3.7.12 Use case Gợi ý phim 62
Chương 4 THIẾT KẾ HỆ THỐNG 63
4.1 DFD 63
4.1.1 Đăng nhập 63
4.1.2 Đăng kí 64
4.1.3 Cập nhật thông tin cá nhân 64
4.1.4 Thanh toán 65
4.1.5 Tìm diễn viên 65
4.1.6 Tìm phim 66
4.1.7 Thêm suất chiếu 67
4.1.8 Sửa suất chiếu 68
4.1.9 Xoá suất chiếu 69
4.1.10 Gợi ý phim 70
Trang 154.2 Thiết kế xử lí 72
4.2.1 Activity Đăng nhập 73
4.2.2 Activity Đăng kí 74
4.2.3 Activity Chatbot 75
4.2.4 Activity Thêm suất chiếu 77
4.2.5 Activity Sửa suất chiếu 78
4.2.6 Activity Xoá suất chiếu 79
4.2.7 Activity Bình luận 80
4.2.8 Activity Đặt vé 81
4.2.9 Activity Tìm phim 82
4.2.10 Activity Tìm diễn viên 82
4.2.11 Activity Gợi ý phim 83
4.3 Thiết kế cơ sở dữ liệu 86
4.3.1 Lược đồ cơ sở dữ liệu 86
4.3.2 Mô tả các bảng dữ liệu 86
4.4 Thiết kế kiến trúc hệ thống 93
4.4.1 Kiến trúc tổng thể 93
4.4.2 Kiến trúc thư mục 94
4.5 Thiết kế giao diện 97
4.5.1 Sơ đồ liên kết màn hình 97
4.5.2 Mô tả màn hình 102
Chương 5 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 130
5.1 Kết quả đạt được 130
5.2 Thuận lợi và khó khăn 130
5.2.1 Thuận lợi 130
5.2.2 Khó khăn 131
5.3 Hướng phát triển 131
TÀI LIỆU THAM KHẢO 132
Trang 16Chương 1 GIỚI THIỆU TỔNG QUAN ĐỀ TÀI
1.1 Lý do chọn đề tàiKhách quan:
Trong cuộc sống hiện đại ngày nay, các hoạt động giải trí ngày càng được trú trọng Trong
số đó, xem phim là một hoạt động không thể không đề cập đến Khách hàng thường đến các rạp chiếu phim, chọn phim và tiến hành thanh toán Nhưng trong thời đại phát triển, nhu cầu của họ ngày càng cao, họ cần các chức năng xem đánh giá, giới thiệu về bộ phim
để lựa chọn được phim ưng ý nhất, thanh toán online để tiết kiệm thời gian nhất Vấn đề
đó đòi hỏi các công ty phải có các hệ thống đáp ứng được nhu cầu khách hàng Nắm bắt được vấn đề này, nhóm chúng em tiến hành xây dựng một website để người dùng có thể truy cập nhanh chóng mà không cần tải về điện thoại, họ có thể xem hình ảnh, trailer, đánh giá từ những người xem trước để có thể chọn được phim ưng ý nhất và thanh toán online một cách nhanh chóng Hơn thế nữa, khách hàng cần được gợi ý những bộ phim được cho rằng phù hợp với cá nhân họ một cách tự động dựa vào những trải nghiệm cá nhân họ trên
hệ thống và cả những người dùng tương tự Ngoài ra, hệ thống cần gợi ý những phim liên quan đến những vấn đề đang nổi cộm trong xã hội
Chủ quan:
Trong suốt quá trình học tập, nhóm chúng em muốn được trải nghiệm các đề tài khác nhau
và hoạt động trên nhiều nền tảng Cảm thấy hứng thú với công nghệ web và sở thích xem phim, nhóm đã đề xuất ý tưởng xây dựng một website về sở thích của mình Đây là trãi nghiệm lần đầu của nhóm về việc xây dựng một website hoàn chỉnh Ngoài ra, nhóm ấp ủ một sản phẩm hoàn thiện hơn, với việc nghiên cứu và xây dựng các giải pháp cho một hệ thống tự động, không cần tốn nhiều thời gian và công sức của người sử dụng mà vẫn mang đến sự tiện lợi
1.2 Mục tiêu
• Hoàn thiện thêm ứng dụng website với giao diện thân thiện, màu sắc hài hòa, bố cục hợp lí
Trang 17• Đáp ứng được các tính năng cần thiết với ngôn ngữ Javascript, công nghệ mới ReatcJS, ExpressJS và chuẩn bảo mật JWT
• Giúp khách hàng có thể xem thông tin bộ phim, bình luận về phim cũng như thực hiện thao tác đặt vé, đánh giá phim
• Hỗ trợ việc tìm kiếm theo nhiều bộ lọc khác nhau
• Có hệ thống quản lí dữ liệu: quản lí phim, các cụm rạp, nhân viên, các bài
• bình luận, các đơn hàng đã đặt, thông tin cá nhân
• Thực hiện kiểm duyệt đối với các bài bình luận phim
• Hỗ trợ quản lí thống kê doanh thu, báo cáo
• Nghiên cứu, phát triển các thuật toán, giải pháp với ngôn ngữ Python, công nghệ
• Gợi ý khách hàng các bộ phim có nội dung tương tự với một bộ phim cụ thể
• Đưa ra các phim khách hàng có thể thích dựa vào hành vi của các khách hàng tương
• Có nội dung tương tự với một bộ phim cụ thể
• Các phim khách hàng có thể thích dựa vào hành vi của các khách hàng tương tự
• Dựa vào những vấn đề nổi cộm trong đời sống – xã hội hiện nay
1.4 Đối tượng
• Người dùng muốn xem thông tin các bộ phim, các bài bình luận, có nhu cầu đặt vé xem phim
• Admin quản lí các nhân viên, cụm rạp; thống kê, báo cáo doanh thu
• Nhân viên kiểm tra đơn hàng, giải đáp thắc mắc của khách hàng
• Người kiểm duyệt kiểm tra nội dung các bài bình luận phim theo quy định
Trang 181.5 Phương pháp thực hiện
• Tìm hiểu, phân tích quy trình xây dựng một website bằng các công nghệ đã đề ra
• Phân tính, đánh giá các ứng dụng tương tự
• Tìm hiểu tổng quan về Recommend System và các thuật toán liên quan
• Chatbot: Dialogflow, Kommunicate
1.7 Kết quả mong đợi
• Biết được quy trình xây dựng một website cơ bản thông qua các công nghệ đã đề ra
• Website có khả năng mở rộng trong tương lai
• Có khả năng nghiên cứu, phân tích khi gặp một bài toán mới
Cả nhóm
lại Đồ án 1
- Tìm hiểu tổng quan về
Trang 19Recommended System
- Xây dựng cơ sở
dữ liệu
5 + 6 - Tìm hiểu Content
based recommender systems
- Tìm hiểu
Collaborative filtering recommender systems
- Soạn báo cáo
Trang 20Amazon sử dụng nó để đề xuất sản phẩm cho khách hàng
Netflix sử dụng gợi ý phim cho người dùng
YouTube sử dụng nó để đề xuất các video và quyết định video sẽ phát tiếp theo trên chế
độ tự động phát
Facebook sử dụng nó để gợi ý kết bạn, đề xuất các trang để thích và mọi người theo dõi
Phân loại:
Hình 1 Phân loại Recommend System
Nhìn chung, hệ thống Recommender System có thể được chia thành 4 loại chính:
Trang 21Simple Recommenders: Đưa ra các đề xuất tổng quát cho mọi người dùng, dựa trên mức
độ phổ biến và/hoặc thể loại phim Ý tưởng cơ bản đằng sau hệ thống này là những bộ phim nổi tiếng hơn và được giới phê bình đánh giá cao hơn sẽ có xác suất được khán giả bình thường thích cao hơn
Content-based Recommenders: Đề xuất các mặt hàng/phim tương tự dựa trên một mặt
hàng/phim cụ thể Hệ thống này sử dụng siê dữ liệu mục, chẳng hạn như thể loại, đạo diễn,
mô tả, diễn viên, v.v cho phim, để đưa ra các đề xuất này Ý tưởng chung đằng sau các hệ thống giới thiệu này là nếu một người thích một mặt hàng cụ thể, họ cũng sẽ thích một mặt hàng tương tự với nó Và để khuyến nghị điều đó, nó sẽ sử dụng siêu dữ liệu mục trước đây của người dùng Một ví dụ điển hình có thể là YouTube, nơi dựa trên lịch sử của bạn,
nó gợi ý cho bạn những video mới mà bạn có thể xem
Collaborative filtering Recommenders: Những hệ thống này được sử dụng rộng rãi và
chúng cố gắng dự đoán “ratings” hoặc “preference” mà người dùng sẽ đưa ra một mặt hàng dựa trên xếp hạng trước đây và sở thích của những người dùng khác Bộ lọc cộng tác không yêu cầu siêu dữ liệu mục giống như các bộ lọc dựa trên nội dung của nó
Hybrid Recommenders: Hybrid Filtering là sự kết hợp của hai giải thuật Content-based
Filtering và Collabrative Filtering: Hybrid Fitering được sử dụng mềm dẻo khi hệ thống Collabrative Filtering không có các hành vi (ratings), khi đó hệ thống sẽ sử dụng Content-based Filtering và ngược lại, khi Content-based Filtering không có các feature cần thiết trong việc đánh giá thì hệ thống sẽ sử dụng Collaborative Fitering để thay thế
Content-based Recommendation Systems
Đối với phương pháp content-based, hệ thống sẽ đánh giá các đặc tính của items được recommended Nó sẽ gợi ý các item dựa trên hồ sơ (profiles) của người dùng hoặc dựa vào nội dung, thuộc tính (attributes) của những item tương tự như item mà người dùng đã chọn trong quá khứ Ví dụ: một người rất thích ăn cam, vậy thì hệ thống gợi ý một loại trái cây tương tự với cam, ở đây là bưởi để đề xuất Cách tiếp cận này yêu cầu việc sắp xếp các items vào từng nhóm hoặc đi tìm các đặc trưng của từng item
Trang 22Hình 2 Mô tả thuật toán
Neighborhood-based Collaborative Filtering
Ý tưởng cơ bản của Neighborhood-Based Collaborative Filtering là xác định mức độ quan tâm của một user tới một item dựa trên các users khác gần giống với user này Việc gần giống nhau giữa các users có thể được xác định thông qua mức độ quan tâm của các users này tới các items khác mà hệ thống đã biết Ví dụ, A, B đều thích phim CCC, tức đều rate
bộ phim này 5 sao Ta đã biết A cũng thích một phim AAA, vậy nhiều khả năng B cũng thích bộ phim này
Neighborhood-based Collaborative Filtering trả lời 2 câu hỏi:
Làm thế nào xác định được sự giống nhau giữa hai users?
Khi đã xác định được các users gần giống nhau (similar users) rồi, làm thế nào dự đoán được mức độ quan tâm của một user lên một item?
Trang 23Việc xác định mức độ quan tâm của mỗi user tới một item dựa trên mức độ quan tâm của similar users tới item đó còn được gọi là User-user collaborative filtering Có một hướng tiếp cận khác được cho là làm việc hiệu quả hơn là Item-item collaborative filtering Trong hướng tiếp cận này, thay vì xác định user similarities, hệ thống sẽ xác định item similarities
Từ đó, hệ thống gợi ý những items gần giống với những items mà user có mức độ quan tâm cao
Một cách trực quan, hành vi của 𝑢0 giống với 𝑢1 hơn là 𝑢2, 𝑢3, 𝑢4, 𝑢5, 𝑢6 Từ đó có thể
dự đoán rằng 𝑢0 sẽ quan tâm tới 𝑖2 vì 𝑢1 cũng quan tâm tới item này
Giả sử có các users từ 𝑢0 đến 𝑢6 và các items từ 𝑖0 đến 𝑖4 trong đó các số trong mỗi ô vuông thể hiện số sao mà mỗi user đã rated cho item với giá trị cao hơn thể hiện mức độ quan tâm cao hơn Các dấu hỏi chấm là các giá trị mà hệ thống cần phải đi tìm Đặt mức
độ giống nhau của hai users 𝑢𝑖, 𝑢𝑗 là 𝑠𝑖𝑚(𝑢𝑖, 𝑢𝑗) Vì vậy, một similiarity function tốt cần
đảm bảo:
Trang 24𝒔𝒊𝒎(𝒖
𝟎, 𝒖
𝟏) > 𝒔𝒊𝒎(𝒖
𝟎, 𝒖
𝒊), ∀𝒊 > 𝟏
Để đo similarity giữa hai users, cách thường làm là xây dựng feature vector cho mỗi user rồi áp dụng một hàm có khả năng đo similarity giữa hai vectors đó Chú ý rằng việc xây dựng feature vector này khác với việc xây dựng item profiles như trong Content-based Recommendation Systems Các vectors này được xây dựng trực tiếp dựa trên Utility matrix chứ không dùng dữ liệu ngoài như item profiles Với mỗi user, thông tin duy nhất chúng
ta biết là các ratings mà user đó đã thực hiện, tức cột tương ứng với user đó trong Utility matrix Tuy nhiên, khó khăn là các cột này thường có rất nhiều mising ratings vì mỗi user thường chỉ rated một số lượng rất nhỏ các items Cách khắc phục là bằng cách nào đó, ta giúp hệ thống điền các giá trị này sao cho việc điền không làm ảnh hưởng nhiều tới sự giống nhau giữa hai vector Việc điền này chỉ phục vụ cho việc tính similarity chứ không phải là suy luận ra giá trị cuối cùng
Vậy mỗi dấu ‘?’ nên được thay bởi giá trị nào để hạn chế việc sai lệch quá nhiều? Một lựa chọn có thể nghĩ tới là thay các dấu ‘?’ bằng giá trị ‘0’ Điều này không thực sự tốt vì giá trị ‘0’ tương ứng với mức độ quan tâm thấp nhất Một giá trị an toàn hơn là 2.5 vì nó là trung bình cộng của 0, mức thấp nhất, và 5, mức cao nhất Tuy nhiên, giá trị này có hạn chế đối với những users dễ tính hoặc khó tính Với các users dễ tính, thích tương ứng với
5 sao, không thích có thể ít sao hơn, 3 sao chẳng hạn Việc chọn giá trị 2.5 sẽ khiến cho các items còn lại là quá negative đối với user đó Điều ngược lại xảy ra với những user khó tính hơn khi chỉ cho 3 sao cho các items họ thích và ít sao hơn cho những items họ không thích
Một giá trị khả dĩ hơn cho việc này là trung bình cộng của các ratings mà user tương ứng
đã thực hiện Việc này sẽ tránh được việc users quá khó tính hoặc dễ tính, tức lúc nào cũng
có những items mà một user thích hơn so với những items khác
Chuẩn hoá dữ liệu:
Trang 25Giá trị cao tương ứng với các user dễ tính và ngược lại Khi đó, nếu tiếp tục trừ từ mỗi rating đi giá trị này và thay các giá trị chưa biết bằng 0, ta sẽ được normalized utility matrix
có thể thắc mắc tại sao bước chuẩn hoá này lại quan trọng, câu trả lời ở ngay đây:
Việc trừ đi trung bình cộng của mỗi cột khiến trong trong mỗi cột có những giá trị dương
và âm Những giá trị dương tương ứng với việc user thích item, những giá trị âm tương ứng với việc user không thích item Những giá trị bằng 0 tương ứng với việc chưa xác định được liệu user có thích item hay không
Về mặt kỹ thuật, số chiều của utility matrix là rất lớn với hàng triệu users và items, nếu lưu toàn bộ các giá trị này trong một ma trận thì khả năng cao là sẽ không đủ bộ nhớ Quan sát thấy rằng vì số lượng ratings biết trước thường là một số rất nhỏ so với kích thước của utility matrix, sẽ tốt hơn nếu chúng ta lưu ma trận này dưới dạng sparse matrix, tức chỉ lưu các giá trị khác không và vị trí của chúng Vì vậy, tốt hơn hết, các dấu ‘?’ nên được thay bằng giá trị ‘0’, tức chưa xác định liệu user có thích item hay không Việc này không những tối ưu bộ nhớ mà việc tính toán similarity matrix sau này cũng hiệu quả hơn
Cosine similarity:
Đây là hàm được sử dụng nhiều nhất, và cũng quen thuộc với các nhất Nếu các không nhớ công thức tính coscos của góc giữa hai vector 𝑢1,𝑢2 trong chương trình phổ thông, thì dưới đây là công thức:
𝒄𝒐𝒔𝒊𝒏𝒆𝒔𝒊𝒎𝒊𝒍𝒂𝒓𝒊𝒕𝒚(𝒖𝟏,𝒖𝟐) = 𝐜𝐨𝐬(𝐮𝟏, 𝐮𝟐) = 𝒖𝑻𝟏𝒖𝟐
||u1||2 ||u2||2
Trong đó 𝑢1,2 là vectors tương ứng với users 1, 2 đã được chuẩn hoá như ở trên
Có một tin vui là python có hàm hỗ trợ tính toán hàm số này một cách hiệu quả
Độ similarity của hai vector là 1 số trong đoạn [-1, 1] Giá trị bằng 1 thể hiện hai vector toàn toàn similar nhau Hàm số coscos của một góc bằng 1 nghĩa là góc giữa hai vector
bằng 0, tức một vector bằng tích của một số dương với vector còn lại Giá trị cos bằng -1
hể hiện hai vector này hoàn toàn trái ngược nhau Điều này cũng hợp lý, tức khi hành vi của hai users là hoàn toàn ngược nhau thi similarity giữa hai vector đó là thấp nhất
Trang 262.1.2 Chatbot
Tiền xử lí dữ liệu là giai đoạn rất quan trọng, hay nói cách khác đây là công đoạn làm sạch văn bản Việc văn bản được làm sạch giúp cách thuật toán có thể trích xuất được những đặc trưng tốt nhất từ đó nâng cao hiệu quả, chất lượng của các mô hình, thuật toán
Một số vấn đề cần tiền xử lý như:
Biến đổi chữ thường
Tách câu, chữ
Loại bỏ stop-word
Stemming & Lemmatization (biến đổi về dạng gốc của từ)
Nhưng mạng nơ ron không thể học thông qua các từ đã được xử lý, chúng cần chuyển thành các vector Bag-of-words là một phương pháp hiệu quả Nó được dùng để trích xuất đặc trưng dữ liệu văn bản
Mô tả thuật toán Bag-of-words
Đoạn mẫu câu:
["Joe waited for the train train", "The train was late", "Mary and Samantha took the bus",
"I looked for Mary and Samantha at the bus station", "Mary and Samantha arrived at the bus station early but waited until noon for the bus"]
Trang 27Sau khi tiền sử lí dữ liệu, ta sẽ thu được danh sách các từ (words) được sắp xếp theo thứ
tự a-z:
['and', 'arrived', 'at', 'bus', 'but', 'early', 'for', 'i', 'joe', 'late', 'looked', 'mary', 'noon',
'samantha', 'station', 'took', 'train', 'until', 'waited', 'was']
Khởi tạo một vector [0, 0, …, 0] với độ dài bằng với số từ trong words So sánh từng từ trong từng câu mẫu với words, với mỗi lần xuất hiện, tăng giá trị vector tại vị trí đó lên 1,
ta thu được vector tương ứng như sau:
Joe waited for the train train [0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 2 0 1 0.]
The train was late [0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1.]
Mary and Samantha took the bus [1 0 0 1 0 0 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0.]
I looked for Mary and Samantha at the bus station [1 0 1 1 0 0 1 1 0 0 1 1 0 1 1
Trang 28Flask là một framework web của Python, còn được coi là một microframework bởi nó không yêu cầu các công cụ hoặc thư viện cụ thể Được phát triển bởi Armin Ronacher, người dẫn đầu một nhóm những người đam mê Python quốc tế có tên là Poocco Flask phát triển dựa trên bộ công cụ Werkzeug WSGI và công cụ mẫu Jinja2 Cả hai đều là các dự án của Pocco
Flask cung cấp cho tất cả các công cụ, thư viện và công nghệ cho phép xây dựng một ứng dụng web Ứng dụng web này có thể là blog, wiki hay một ứng dụng lịch dựa trên web hoặc một web thương mại Như đã nói, Flask là một microframework bởi nó không yêu cầu các công cụ hoặc thư viện cụ thể, điều này mang đến cả ưu điểm và khuyết điểm cho người sử dụng Ưu điểm của Flask là Framework nhẹ, ít phụ thuộc vào các cập nhật và dễ tìm kiếm các lỗi bảo mật Nhược điểm là đôi khi phải tự thêm các danh sách phụ thuộc bằng việc thêm các plugin Trong Flask, các phụ phuộc đó là Werkzeug WSGI và Jinja2
WSGI: Web Server Gateway Interface (Giao diện cổng vào máy chủ Web) được sử dụng
như một tiêu chuẩn để phát triển ứng dụng web Python WSGI mang đặc điểm kỹ thuật giao diện chung giữa máy chủ web và ứng dụng web
Werkzeug: Là một bộ công cụ WSGI thực hiện các yêu cầu, phản hồi đối tượng, và các
chức năng tiện ích Điều này cho phép xây dựng một web framework trên đó Flask sử dụng Werkzeug làm một trong những cơ sở xây dựng web của nó
Jinja2: Là một công cụ mẫu phổ biến cho Python Một hệ thống mẫu web kết hợp một mẫu
với một nguồn dữ liệu cụ thể để hiển thị một trang web động
Flask thường được coi là một microframework Nó được thiết kế để giữ cho cốt lõi của ứng dụng đơn giản và có thể mở rộng (scalable) Thay vì sử dụng một abstraction layer để hỗ trợ cơ sở dữ liệu, Flask hỗ trợ các phần extensions để thêm các khả năng như vậy vào ứng dụng
Trang 292.2.1.2 ReactJs
Hình 5 ReactJs
ReactJS là một opensource được phát triển bởi Facebook, ra mắt vào năm 2013, bản thân
nó là một thư viện Javascript được dùng để để xây dựng các tương tác với các thành phần trên website Một trong những điểm nổi bật nhất của ReactJS đó là việc render dữ liệu không chỉ thực hiện được trên tầng Server mà còn ở dưới Client
2.2.1.3
Express.js
Hình 6 ExpressJs
Expressjs hay còn được viết là Express js, Express.js Đây là một framework mã nguồn mở miễn phí cho Node.js Express.js được sử dụng trong thiết kế và xây dựng các ứng dụng web một cách đơn giản và nhanh chóng
Trang 30Vì Express js chỉ yêu cầu ngôn ngữ lập trình Javascript nên việc xây dựng các ứng dụng web và API trở nên đơn giản hơn với các lập trình viên và nhà phát triển. Expressjs cũng là một khuôn khổ của Node.js do đó hầu hết các mã code đã được viết sẵn cho các lập trình viên có thể làm việc
Nhờ có Expressjs mà các nhà lập trình có thể dễ dàng tạo các ứng dụng 1 web, nhiều web hoặc kết hợp Do có dung lượng khá nhẹ, Expressjs giúp cho việc tổ chức các ứng dụng web thành một kiến trúc MVC có tổ chức hơn. Để có thể sử dụng được mã nguồn này, chúng ta cần phải biết về Javascript và HTML
Expressjs cũng là một phần của công nghệ giúp quản lý các ứng dụng web một cách
dễ dàng hơn hay còn được gọi là ngăn xếp phần mềm MEAN. Nhờ có thư viện Javascript của Express js đã giúp cho các nhà lập trình xây dựng nên các ứng dụng web hiệu quả và nhanh chóng hơn Expressjs cũng được sử dụng để nâng cao các chức năng của Node.js
DataFrames tương tự như SQL tables hoặc bảng tính mà bạn làm việc trong Excel hoặc Calc Trong nhiều trường hợp, DataFrame nhanh hơn, dễ sử dụng hơn và mạnh hơn bảng hoặc spreadsheets vì chúng là một phần không thể thiếu của hệ sinh thái Python và NumPy
Trang 31NumPy được phát triển bởi Jim Hugunin Phiên bản ban đầu là Numarray được phát triển,
có một số chức năng bổ sung Năm 2005, Travis Oliphant đã tạo ra gói NumPy bằng cách kết hợp các tính năng của Numarray và gói Numeric
Sử dụng NumPy, lập trình viên có thể thực hiện các thao tác sau:
Các phép toán toán học và logic trên mảng
Các biến đổi Fourier và các quy trình để thao tác shape
Các phép toán liên quan đến đại số tuyến tính NumPy tích hợp sẵn các hàm cho đại số tuyến tính và tạo số ngẫu nhiên
NumPy - Sự thay thế hoàn hảo cho MatLab: NumPy thường được sử dụng cùng với các gói như SciPy (Python Scientific) và Mat-plotlib (thư viện vẽ đồ thị) Sự kết hợp này được
sử dụng rộng rãi để thay thế cho MatLab, một nền tảng phổ biến cho tính toán kỹ thuật
Trang 32Tuy nhiên, Python thay thế cho MatLab hiện được xem như một ngôn ngữ lập trình hoàn thiện và hiện đại hơn Điều quan trọng hơn cả là Numpy là một thư viện mã nguồn mở, miễn phí so với MatLab là một thư viện mã nguồn đóng và phải trả phí
2.2.2.3 Scikit-learn
Hình 9 ScikitsLearn
Scikit-learn (Sklearn) là thư viện mạnh mẽ nhất dành cho các thuật toán học máy được viết trên ngôn ngữ Python Thư viện cung cấp một tập các công cụ xử lý các bài toán machine learning và statistical modeling gồm: classification, regression, clustering, và dimensionality reduction
Thư viện được cấp phép bản quyền chuẩn FreeBSD và chạy được trên nhiều nền tảng Linux Scikit-learn được sử dụng như một tài liệu để học tập
Những thư viện mở rộng của SciPy thường được đặt tên dạng SciKits Như thư viện này là gói các lớp, hàm sử dụng trong thuật toán học máy thì được đặt tên là scikit-learn
Scikit-learn hỗ trợ mạnh mẽ trong việc xây dựng các sản phẩm Nghĩa là thư viện này tập trung sâu trong việc xây dựng các yếu tố: dễ sử dụng, dễ code, dễ tham khảo, dễ làm việc, hiệu quả cao
Mặc dù được viết cho Python nhưng thực ra các thư viện nền tảng của scikit-learn lại được viết dưới các thư viện của C để tăng hiệu suất làm việc Ví dụ như: Numpy (Tính toán ma trận), LAPACK, LibSVM và Cython
Sau đâu là một số nhóm thuật toán được xây dựng bởi thư viện scikit-learn:
Clustering: Nhóm thuật toán Phân cụm dữ liệu không gán nhãn Ví dụ thuật toán KMeans
Trang 33Cross Validation: Kiểm thử chéo, đánh giá độ hiệu quả của thuật toán học giám sát sử dụng
dữ liệu kiểm thử (validation data) trong quá trình huấn luyện mô hình
Datasets: Gồm nhóm các Bộ dữ liệu được tích hợp sẵn trong thư viện Hầu như các bộ dữ liệu đều đã được chuẩn hóa và mang lại hiêu suất cao trong quá trình huấn luyện như iris, digit,
Dimensionality Reduction: Mục đích của thuật toán này là để Giảm số lượng thuộc tính quan trọng của dữ liệu bằng các phương pháp như tổng hợp, biểu diễn dữ liệu và lựa chọn đặc trưng Ví dụ thuật toán PCA (Principal component analysis)
Ensemble methods: Các Phương pháp tập hợp sử dụng nhiều thuật toán học tập để có được hiệu suất dự đoán tốt hơn so với bất kỳ thuật toán học cấu thành nào
Feature extraction: Trích xuất đặc trưng Mục đích là để định nghĩa các thuộc tình với dữ liệu hình ảnh và dữ liệu ngôn ngữ
Feature selection: Trích chọn đặc trưng Lựa chọn các đặc trưng có ý nghĩa trong việc huấn luyện mô hình học giám sát
Parameter Tuning: Tinh chỉnh tham số Các thuật toán phục vụ việc lựa chọn tham số phù hợp để tối ưu hóa mô hình
Manifold Learning: Các thuật toán học tổng hợp và Phân tích dữ liệu đa chiều phức tạp
Supervised Models: Học giám sát Mảng lớn các thuật toán học máy hiện nay Ví dụ như linear models, discriminate analysis, naive bayes, lazy methods, neural networks, support vector machines và decision trees
Trang 34ưu hóa, tích hợp và thống kê
SciPy cung cấp khá nhiều module tính toán từ đại số tuyến tính, tích phân, vi phân, nội suy đến xử lý ảnh, fourier transform blabla… Chức năng của nó tương tự như MathLab, Octave Scilab, R… nhưng nó được sử dụng khá rộng rãi do có hệ thống thư viện tính toán mạnh, ngôn ngữ Python rõ ràng, dễ hiểu, gần gũi với ngôn ngữ tự nhiên, mã nguồn mở và cộng đồng đang dần lớn mạnh từng ngày
SciPy chứa nhiều loại gói phụ giúp giải quyết vấn đề phổ biến nhất liên quan đến tính toán khoa học
SciPy là thư viện Khoa học được sử dụng nhiều nhất chỉ sau Thư viện Khoa học GNU cho C/C ++ hoặc Matlab
Dễ sử dụng và hiểu cũng như sức mạnh tính toán nhanh
Nó có thể hoạt động trên mảng (array) của thư viện NumPy
Trang 352.2.2.5 Mongoose
Hình 11 Mongoose
Mongoose là một thư viện mô hình hóa đối tượng (Object Data Model - ODM) cho
MongoDB và Node.js Nó quản lý mối quan hệ giữa dữ liệu, cung cấp sự xác nhận giản đồ
và được sử dụng để dịch giữa các đối tượng trong mã và biểu diễn các đối tượng trong MongoDB
Mongoose cho phép bạn định nghĩa các object (đối tượng) với một schema được định nghĩa
rõ ràng, được ánh xạ tới một MongoDB document.Mongoose cũng cung cấp một số lượng đáng kinh ngạc các chức năng cho việc tạo ra và làm việc với các schema
2.2.2.6 Redux
Hình 12 Redux
Redux là một vùng chứa trạng thái có thể dự đoán được hay còn biết đến là một thư viện
của JavaScript Thư viện này được thiết kế để giúp bạn viết các ứng dụng JavaScript có thể
Trang 36hoạt động nhất quán trong các môi trường máy khách, máy chủ và môi trường số, đồng thời cho phép dễ dàng kiểm tra
Mặc dù Redux chủ yếu được sử dụng như một công cụ quản lý trạng thái với React, nhưng bạn có thể sử dụng thư viện này với bất kỳ Framework hoặc thư viện JavaScript nào khác Redux khá nhẹ, chỉ ở mức 2KB (bao gồm cả phần phụ thuộc) Vì vậy, bạn không phải lo lắng về việc công cụ này sẽ làm cho kích thước nội dung ứng dụng của bạn lớn hơn Với Redux, trạng thái ứng dụng của bạn sẽ được lưu trong một Store và mỗi thành phần có thể truy cập vào bất kỳ trạng thái nào mà nó cần từ Store này
2.2.2.7 Nodemailer
Hình 13 NodeMailer
Nodemailer là một mô-đun cho các ứng dụng Node.js để cho phép gửi email dễ dàng Dự
án bắt đầu trở lại vào năm 2010 khi không có tùy chọn lành mạnh để gửi email, ngày nay
nó là giải pháp mà hầu hết người dùng Node.js sử dụng theo mặc định
Tính năng và đặc điểm của Nodemailer:
Một mô-đun duy nhất không có phụ thuộc nào - mã dễ dàng kiểm tra, vì không có góc tối Tập trung nhiều vào bảo mật, không ai thích lỗ hổng RCE
Hỗ trợ Unicode để sử dụng bất kỳ ký tự nào, bao gồm biểu tượng cảm xúc
Trang 37Hỗ trợ Windows - bạn có thể cài đặt nó với npm trên Windows chỉ giống như bất kỳ đun nào khác, không có phần phụ thuộc đã biên dịch Sử dụng không rắc rối từ Azure hoặc
mô-từ hộp Windows của bạn
Sử dụng nội dung HTML, cũng như thay thế văn bản thuần túy
Thêm tệp đính kèm vào thư
Các tệp đính kèm hình ảnh được nhúng cho nội dung HTML - thiết kế của bạn không bị chặn
Gửi email an toàn bằng TLS / STARTTLS
Ngoài ra hỗ trợ SMTP tích hợp sẵn
Đăng tin nhắn với hỗ trợ Plugin tùy chỉnh DKIM để thao tác với tin nhắn
Xác thực Sane OAuth2
Proxy cho kết nối SMTP
Mã ES6 - không còn tình trạng rò rỉ bộ nhớ không chủ ý, do các tài khoản kiểm tra email được tạo tự động của var được nâng cấp từ Ethereal.email
2.2.2.8 AXIOS
Hình 14 AXIOS
Axios là một client HTTP đẳng hình, phổ biến Điều đó có nghĩa là nó có thể chạy trong
trình duyệt và môi trường Node runtime Do đó, bạn có thể sử dụng cùng một cơ sở mã để thực hiện các yêu cầu API trong Node, trong trình duyệt và trong ReactJs
Axios có một số tính năng như hỗ trợ API Promise, tự động chuyển đổi JSON và chặn các yêu cầu và phản hồi mạng, trong số những tính năng khác
Trang 38Với CSDL quan hệ chúng ta có khái niệm bảng, các cơ sở dữ liệu quan hệ (như MySQL hay SQL Server ) sử dụng các bảng để lưu dữ liệu thì với MongoDB chúng
ta sẽ dùng khái niệm là collection thay vì bảng
So với RDBMS thì trong MongoDB collection ứng với table, còn document sẽ ứng với row, MongoDB sẽ dùng các document thay cho row trong RDBMS
Các collection trong MongoDB được cấu trúc rất linh hoạt, cho phép các dữ liệu lưu trữ không cần tuân theo một cấu trúc nhất định
Thông tin liên quan được lưu trữ cùng nhau để truy cập truy vấn nhanh thông qua ngôn ngữ truy vấn MongoDB
Trang 392.2.3.2 Cloudinary
Hình 16 Cloudinary
Cloudinary là một cloud-based service, nó cung cấp một giải pháp quản lý hình ảnh bao
gồm upload, lưu trữ, thao tác, tối ưu hóa và delivery
Với cloudinary bạn có thể dễ dàng upload ảnh lên cloud, tự động thực thi các thao tác với ảnh một cách thông minh mà không cần phải cài đặt bất kì một phần mềm phức tạp nào khác Cloudinary cung cấp các APIs toàn diện và màn hình quản lý giúp chúng ta dễ dàng tích hợp vào các trang web và ứng dụng di động
Cloudinary cung cấp một Ruby Gem để dễ dàng cho việc tương tác với các app viết bởi
ngôn ngữ Ruby với một số framwork như là Rails hay Sinatra với các tương tác chính
sau:
Xây dựng các URL để chuyển đổi và thao tác với hình ảnh
Rails view helper cho việc nhúng và thay đổi hình ảnh
API wrappers: upload image, quản lý và nhiều thứ khác
Upload image trực tiếp từ trình duyệt sử dụng một jQuery plugin
Tích hợp với Active Record
Trang 40Hình 17 JWT
JSON Web Mã (JWT) là một chuẩn mở (RFC 7519) định nghĩa một cách nhỏ gọn và khép kín để truyền một cách an toàn thông tin giữa các bên dưới dạng đối tượng JSON Thông tin này có thể được xác minh và đáng tin cậy vì nó có chứa chữ ký số JWTs có thể được
ký bằng một thuật toán bí mật (với thuật toán HMAC) hoặc một public/private key sử dụng
mã hoá RSA
Hình 18 Sơ đồ của JWT
Hình ảnh thực tế Json Web Token