3.5.1 Khái niệm MongoDB
Hình 3-11 MongoDB Nguồn: mongodb.com
MongoDB là phần mềm cơ sở dữ liệu mã nguồn mở NoSQL hỗ trợ đa nền tảng được thiết kế theo hướng đối tượng.
3.5.2 Khái niệm NoSQL
Hình 3-12 Is MongoDB NonSQL Nguồn: mongodb.com
38
NoSQL (Non-Relational SQL) là dạng cơ sở dữ liệu mã nguồn mở được ra đời như một mô hình tiến bộ hơn về tốc độ, tính năng,… so với hệ quản trị cơ sở dữ liệu quan hệ RDBMS. NoSQL có kiểu dữ liệu JSON. Đây là dạng dữ liệu kiểu key và value cùng với hiệu suất nhanh và khả năng mở rộng không bị ràng buộc bởi việc tạo khóa ngoại, khóa chính,… nên được ưa chuộng và sử dụng rất phổ biến.
3.6 Tổng quan kiến thức Docker 3.6.1. Khái niệm 3.6.1. Khái niệm
Docker là một nền tảng để cung cấp cách để building, deploying và running ứng dụng dễ
dàng hơn bằng cách sử dụng các containers (trên nền tảng ảo hóa). Ban đầu viết bằng Python, hiện tại đã chuyển sang Golang.
3.6.2. Ưu điểm của Docker
• Tính dễ ứng dụng: Docker rất dễ cho mọi người sử dụng từ lập trình viên, sys
admin… nó tận dụng lợi thế của container để build, test nhanh chóng. Có thể đóng gói ứng dụng trên laptop của họ và chạy trên public cloud, private cloud… Câu thần chú là “Build once, run anywhere”.
• Tốc độ: Docker container rất nhẹ và nhanh, bạn có thể tạo và chạy docker
container trong vài giây.
• Môi trường chạy và khả năng mở rộng: Bạn có thể chia nhỏ những chức năng
của ứng dụng thành các container riêng lẻ. Ví dụng Database chạy trên một container và Redis cache có thể chạy trên một container khác trong khi ứng dụng Node.js lại chạy trên một cái khác nữa. Với Docker, rất dễ để liên kết các container với nhau để tạo thành một ứng dụng, làm cho nó dễ dàng scale, update các thành phần độc lập với nhau.
3.6.3 Mô hình Docker
Hình 3-13 Mô hình Docker
Nguồn: docs.docker.com
− Docker Engine : là thành phần chính của Docker, như một công cụ để đóng gói ứng
dụng
− Docker Hub : là một “github for docker images”. Trên DockerHub có hàng ngàn
public images được tạo bởi cộng đồng cho phép bạn dễ dàng tìm thấy những image mà bạn cần. Và chỉ cần pull về và sử dụng với một số config mà bạn mong muốn.
− Images: là một khuôn mẫu để tạo một container. Thường thì image sẽ dựa trên 1
image có sẵn với những tùy chỉnh thêm. Ví dụ bạn build 1 image dựa trên image Centos mẫu có sẵn để chạy Nginx và những tùy chỉnh, cấu hình để ứng dụng web của bạn có thể chạy được. Bạn có thể tự build một image riêng cho mình hoặc sử dụng những image được chia sẽ từ cộng đồng Docker Hub. Một image sẽ được build dựa trên những chỉ dẫn của Dockerfile.
− Container: là một instance của một image. Bạn có thể create, start, stop, move or
delete container dựa trên Docker API hoặc Docker CLI.
40
− Docker Daemon: lắng nghe các yêu cầu từ Docker Client để quản lý các đối tượng
như Container, Image, Network và Volumes thông qua REST API. Các Docker Daemon cũng giao tiếp với nhau để quản lý các Docker Service.
− Dockerfile: là một tập tin bao gồm các chỉ dẫn để build một image .
− Volumes: là phần dữ liệu được tạo ra khi container được khởi tạo.
3.6.4. Quy trình thực thi của một hệ thống sử dụng Docker
Hình 3-14 Quy trình thực thi hệ thống sử dụng Docker
Nguồn: docs.docker.com
− Build: Đầu tiên tạo một dockerfile, trong dockerfile này chính là code của chúng ta. Dockerfile này sẽ được Build tại một máy tính đã cài đặt Docker Engine. Sau khi build ta sẽ có được Container, trong Container này chứa ứng dụng kèm bộ thư viện của chúng ta.
− Push: Sau khi có được Container, chúng ta thực hiện push Container này lên cloud và lưu tại đó.
− Pull, Run: Nếu một máy tính khác muốn sử dụng Container chúng ta thì bắt buộc máy phải thực hiện việc Pull container này về máy, tất nhiên máy này cũng phải cài Docker Engine. Sau đó thực hiện Run Container này.
3.7 Tổng quan Python FastAPI3.7.1. Khái niệm 3.7.1. Khái niệm
Hình 3-15 FastAPI
Nguồn: fastapi.tiangolo.com
FastAPI là nền tảng thiết kế, lập trình xây dựng API cực kỳ nhanh trên cả 2 phương diện phát triển và thực thi trên Python 3.6+.
Đặc điểm:
− Fast: Hiệu suất cao ngang với NodeJS và Go.
− Fast to code: Code nhanh hơn, tốc độ code các features tăng khoảng 200 đến 300 %.
− Fewer bugs: do đơn giản nên giảm số bugs của developper đến 40%.
− Intuitive: hỗ trợ code dễ hơn với tự động gợi ý, debug cần ít thời gian hơn so với
trước.
− Easy: được thiết kế sao cho dễ dùng dễ học.
− Short: Tối thiểu việc lặp code. Các tham số truyền vào có nhiều tính năng. Ít bugs.
42
3.7.2. Ưu điểm của FastAPI
Hình 3-16 Hiệu suất của FastAPI
Nguồn: techempower.com
− High performance Do được base trên 2 lib khá mạnh ở thời điểm hiện tại của python là Pydantic và Starlette nên FastAPI sở hữu hiệu suất cao nhất trong tất cả các
framework Python hiện nay
− Development Speed Được hỗ trợ tích hợp sẵn giao diện Swagger – OpenAPI kèm theo cách code khá đơn giản nên lập trình có thể release function rất nhanh mà vẫn có document đầy đủ, đây là lợi thế có thể nói là quan trọng nhất của FastAPI so với các Framework khác. Dưới đây là một đoạn code in ra dòng text healthcheck
Hình 3-17 Đoạn code in ra dòng text healthcheck
Nguồn: fastapi.tiangolo.com
− Bất đồng bộ Hiện tại bất đồng bộ đã được hỗ trợ từ phiên bản Django 3.x nhưng ngay từ khi release, FastAPI mặc định đã hỗ trợ developer Async, cũng vì vậy mà FastAPI chỉ có thể sử dụng với python3.6 trở lên.
3.7.3. FastAPI CLI
FastAPI được build dựa trên OpenAPI (trước có tên Swagger), phần web được support bởi Starlette, còn phần data được support bởi Pydantic.
ASGI kế thừa từ WSGI. Mà WSGI là 1 chuẩn giao tiếp giữa web server và Python application server. Trước thì có mod_python của Apache nhưng do không phát triển và không an toàn nên WSGI sinh ra. WSGI có những tác dụng như sau:
− WSGI mang tính linh hoạt: dev có thể chuyển đổi thành phần web như chuyển từ Gunicorn sang uWSGI.
− WSGI xử lý nhiều request cùng lúc thay webserver và quyết định request nào được chuyển tới application web.
44
Hình 3-18 Sơ đồ hoạt động WSGI Nguồn: fullstackpython.com
Nếu như WSGI là tiêu chuẩn cho các synchronous Python appsthì ASGI là tiêu chuẩn cho cả synchronous và asynchronous Python apps. ASGI phù hợp với tất cả ứng dụng sử dụng WSGI do có cơ chế tương thích ngược.
3.7.4. FastAPI DOCS
Do based trên OpenAI mà trước đó có tên là Swagger nên FastAPI cung cấp doc có giao diện dễ nhìn, dễ sử dụng
Hình 3-19 Giao diện khi bật doc bằng local url http://0.0.0.0:8000/docs. Nguồn: fastapi.tiangolo.com
Hình 3-20 Giao diện khi bật redoc bằng local url http://0.0.0.0:8000/redoc. Nguồn: fastapi.tiangolo.com
3.7.5. Optional Depencies
Pydantic:
− ujson: JSON "parsing" nhanh hơn.
− email_validator: validate email Starlette:
− requests: khi bạn muốn tạo request, dùng TestClient.
− aiofiles: khi bạn muốn dùng FileResponse hoặc StaticFile.
− jinja2: nếu bạn muốn dùng các mẫu config mặc định.
− python-multipart: hỗ trợ "parsing" với request.form().
− itsdangerous: hỗ trợ SessionMiddleware.
− graphene: hỗ trợ GraphQL. FastAPI:
− uvicorn: ASGI server phục vụ cho ứng dụng của bạn.
46
Chương 4. XÂY DỰNG HỆ THỐNG 4.1. Đặt vấn đề
4.1.1. Thực trạng quy trình điểm danh sinh viên của các trường đại học, cao đẳng:
Nhận thấy việc điểm danh sinh viên vào các buổi học thường tốn nhiều thời gian vì người điểm danh cần gọi tên, điểm mặt từng bạn trong lớp học. Đối với những lớp học có nhiều sinh viên thì công việc này càng khó khăn hơn vì có thể xảy ra tình trạng gian lận điểm danh hộ. Trong đề tài này em nghiên cứu về hệ thống nhận diện bằng vân tay. Ứng dụng điểm danh bằng vân tay giúp cho việc điểm danh trở nên nhanh chóng và dễ dàng khắc phục những khuyết điểm , hạn chế của việc điểm danh truyền thống
Các câu hỏi được đặt ra:
− Người điểm danh luôn ở cùng với giáo viên , Kiểm tra IP của Router phòng học ( Trường ) với IP của điện thoại điểm danh để cung cấp quyền truy cập để điểm danh.
− Người điểm danh là người cần điểm danh . Sử dụng vân tay để xác minh danh tính của sinh viên.
4.2. Hướng giải quyết
- Sử dụng điện thoại có sinh trắc học vân tay để điểm danh sinh viên . Giáo viên sẽ mở app trên window sẽ bật Server và Mạng cục bộ để sinh viên kết nối, cấp quyền truy cập để điểm danh. Giải quyết được câu hỏi người điểm danh luôn ở cùng sinh viên
- Sau khi sinh viên được cấp quyền điểm danh và ghi mã số sinh viên sẽ được gửi lên Server để lưu trữ thông tin sinh viên đã điểm danh. Mỗi sinh viên chỉ điểm danh được cho bản thân mình. Giải quyết được câu hỏi sinh viên là sinh viên cần điểm danh
4.3. Xác định và phân tích yêu cầu 4.3.1. Danh sách các Actor 4.3.1. Danh sách các Actor
STT Tên Actor Ý nghĩa
1 LECTURER Giảng viên 2 STUDENT Sinh viên
Bảng 4-1 Danh sách các Actor
4.3.2. Danh sách các Use-Case 4.3.2.1. Use-case của Giảng Viên 4.3.2.1. Use-case của Giảng Viên
48
Tên use-case Mô tả use-case
Quản lí thông tin sinh viên
điểm danh Giảng viên có thể xem danh sách sinh viên đã được điểm danh
Quản lí Server Giảng viên có thể bật tắt server để sinh viên điểm danh
Quản lí WLAN Giảng viên có thể bật tắt WLAN để cấp quyền truy cập cho sinh viên
Bảng 4-2 Use-case của Giảng viên
4.3.2.2. Use-case của Sinh viên
Tên use-case Mô tả use-case
Đăng kí Sinh viên vào app đăng kí để điểm danh
Điểm danh Sinh viên có thể sử dụng vân tay để điểm danh khi giảng viên đã cấp quyền truy cập
Bảng 4-3 Use-case của Sinh viên
4.4. Thiết kế cơ sở dữ liệu
InforStudent
Mô tả: Lưu thông tin sinh viên điểm danh
STT Tên Kiểu Ràng buộc Ý nghĩa
1 _id ObjectId unique ID của sinh viên 2 idFinger String ID của vân tay 3 idUser String Mã số sinh viên 4 username String Tên sinh viên
50
4.5. Thiết kế hệ thống
Hiện nay, hầu hết các trường học đều thực hiện điểm danh theo phương pháp truyền thống: giảng viên sử dụng danh sách sinh viên của lớp học, gọi tên điểm danh từng sinh viên. Giả sử số lượng sinh viên của một lớp học một buổi trung bình là 100 người, mất khoảng 10 giây điểm danh một người thì một lần điểm danh lớp học phải mất tới 1000 giây, tức hơn 16 phút. Có thể nhận thấy rõ ràng hình thức điểm danh này đang làm lãng phí lớn công sức và thời gian giảng dạy của giảng viên, cùng với những bất cập của nó mang lại, đã ảnh hưởng không nhỏ đến việc truyền dạy kiến thức cho sinh viên trong buổi học.
Để giải quyết những thách thức của quy trình điểm danh trong thực tế hệ thống phần mềm được xây dựng gồm ba thành phần chính: server xử lý điểm danh, client bao gồm ứng dụng trên smartphone và ứng dụng app quản trị thông tin trên windows của giảng viên.
Server làm nhiệm vụ chính là xử lý việc thực hiện điểm danh sinh viên giữa ứng dụng client trên điện thoại di động và cơ sở dữ liệu. Khi có yêu cầu thực hiện điểm danh từ client, server nhận được thông tin sinh viên cần điểm danh từ client, server sẽ dựa vào những thông tin đã được cung cấp, truy xuất cơ sở dữ liệu để lấy được những thông tin tương ứng trong cơ sở dữ liệu của sinh viên đó và thực hiện đối sánh chúng. Nếu kết quả trả về là phù hợp, server sẽ ghi nhận lần điểm danh của sinh viên, và thông báo kết quả về app của giảng viên.
App được cung cấp cho giảng viên nhằm mục đích theo dõi thông tin sinh viên đã được điểm danh. Dựa vào app giảng viên có thể dễ dàng theo dõi, quan tâm tình hình đi học của sinh viên, từ đó giảng viên và nhà trường có thể lên kế hoạch nâng cao chất lượng đào tạo.
Ứng dụng Client trên điện thoại di động cung cấp chức năng chính cho sinh viên là thực hiện điểm danh. Thông tin điểm danh của sinh viên đưipkc nhận bằng cách xác định vị trí hiện tại thông qua WLAN và cung cấp quyền truy cấp cho sinh viên điểm danh và gửi về cho server xử lý. Ứng dụng client được tích hợp các thuật toán xử lý ảnh vân tay, sau khi thu được danh sách các đặc trưng vân tay sẽ gửi đến server để thực hiện điểm danh.
Cơ sở dữ liệu quản lý thông tin được xây dựng sau khi phân tích những thông tin cần thiết để quản lý việc điểm danh sinh viên và những chức năng phụ như quản lý thông tin sinh viên, giảng viên.
Hình 4.3 Kiến thúc hệ thống Class ART
4.6. Thiết kế giao diện và xử lý
4.6.1. Danh sách các màn hình trên điện thoại:
STT Tên màn hình Mô tả màn hình
1 Giao diện chính Đăng kí vào hệ thống 2
Điểm danh Sử dụng vân tay để điểm danh
3 Nhập mã số sinh viên, họ tên
Sau khi lấy mã vân tay sinh viên thành công, sinh viên sẽ nhập mã số sinh viên và họ tên để lưu trên server ở lần đầu tiên
4
Điểm danh thành công
Hiển thị thông báo sinh viên điểm danh thành công
52
4.6.2. Giao diện và xử lý một số màn hình chính
54
56
Chương 5. KẾT LUẬN
5.1. Kết quả đạt được
Thông qua việc nghiên cứu và tìm hiểu về FastAPI, WLAN, đặc biệt về FastAPI, em đã phát triển và triển khai một hệ thống điểm danh sinh viên đơn gian- hiểu quả cao khắc phục được các khó khăn của điểm danh truyền thống như: tốn thời gian, bất tiện, điểm danh hộ ,…
Về mặt kỹ thuật và công nghệ, em đã đạt được các kết quả như sau:
− Tìm hiểu được cơ chế làm việc, những ưu điểm, nhược điểm của FastAPI ,WLAN.
− Tìm hiểu và sử dụng ngôn ngữ Java, Python để viết App và Server
− Nâng cao được kỹ năng lập trình ở nhiều khía cạnh khác nhau trong hệ thống: cả back-end và front-end ứng dụng di động.
Về mặt thực tiễn, em đã đạt được các kết quả như sau:
− Nâng cao kỹ năng tìm hiểu, nghiên cứu công nghệ mới.
− Nâng cao khả năng quản lý công việc.
− Xây dựng một hệ thống theo dõi quy trình điểm danh với ứng dụng di động, app trên windows, đáp ứng được yêu cầu là đơn giản – hiệu quả.
5.2. Thuận lợi và khó khăn 5.2.1. Thuận lợi: 5.2.1. Thuận lợi:
− Đã có kiến thức nền tảng về ngôn ngữ Javanên việc thực thi tính năng không gặp nhiều trở ngại về sử dụng ngôn ngữ hay cơ chế làm việc của framework.
5.2.2. Khó khăn:
− Lần đầu tiếp xúc với một công nghệ, framework mới, nên cách tiếp cận vấn đề kỹ thuật nhiều lúc gặp khó khăn; mất khá nhiều thời gian để sửa sai và tìm ra được một giải pháp đúng nhằm giải quyết được khó khăn về kỹ thuật.
− Do sự thay đổi của công nghệ từ Android 4.0 trở lên, việc bảo mật thông tin khách hàng được chú trọng, việc dữ liệu 1 vân tay có thể lưu trên nhiều điện thoại sẽ làm cho thông tin khách hàng có thể bị 1 số thành phần xấu lợi dụng vào nhiều mục đích khác nhau. Nên đã thay đổi khá nhiều phạm vi dự định
ban đầu em đề ra đó là : ‘Một chiếc điện thoại có thể điểm danh cho tất cả