-
Notifications
You must be signed in to change notification settings - Fork 11
installation and config
- Cài đặt
- Hướng dẫn
Bạn có thể tải trực tiếp bản có tích hợp sẵn UniServer tại đây (tệp có tên themis-web-interface_v0.6.0-rev1
)
Sau khi tải xong, giải nén tệp vừa tải thành một thư mục và đặt ở vị trí tùy ý
- Yêu cầu:
- Git
- PHP/7 trở lên
- Apache/2 trở lên
Sử dụng lệnh sau để tải toàn bộ tệp tin của dự án:
git clone https://github.com/belivipro9x99/themis-web-interface.git
Hoặc vào phần releases và tải tệp Source Code.zip
hoặc Source Code.tar.gz
Sau khi tải xong, giải nén tệp vừa tải thành một thư mục và đặt ở vị trí tùy ý
Để khởi động máy chủ, chạy tệp UniController.exe
có trong thư mục vừa giải nén, sau đó nhấn vào nút Start Apache
để khởi động máy chủ.
Nếu khởi động UniServer gặp lỗi, vui lòng cài Microsoft Visual C++ 2015 Redistributable và thử lại.
Lần đầu chạy Windows firewall sẽ popup lên một cửa sổ để hỏi quyền được vượt firewall. Nhấn vào Allow access
để cho phép apache vượt qua firewall như hình dưới.
Mở trình duyệt bất kì và đi đến localhost:80
để kiểm tra, nếu trang web hiện ra là bạn đã thành công.
Để dừng máy chủ, nháy đúp chuột vào icon chữ U
nền xanh trên thanh biểu tượng, chọn Stop Apache
.
Tiến hành cài đặt Apache và PHP bằng câu lệnh:
sudo apt-get update
sudo apt-get install apache2 php php-xml
Bật các module cần thiết cho apache:
sudo a2enmod rewrite actions fastcgi alias mime headers reqtimeout
Sau khi cài đặt xong, đi tới thư mục /etc/apache2
và chỉnh sửa tệp apache2.conf
.
cd /etc/apache2
sudo nano apache2.conf
Thay đổi tệp apache2.conf
như sau:
Lưu ý: Thay thế
(document root)
thành vị trí thư mục của mã nguồn.
# Thay thế (document root) thành vị trí thư mục của mã nguồn.
# Ví dụ:
# Define THEMIS_ROOT "/home/jeff/themis-web-interface"
Define THEMIS_ROOT (document root)
<VirtualHost *:80>
ServerAdmin someone@localhost
ServerName localhost
ServerAlias themisweb.lan
DocumentRoot ${THEMIS_ROOT}
ErrorDocument 400 /lib/error.php
ErrorDocument 401 /lib/error.php
ErrorDocument 403 /lib/error.php
ErrorDocument 404 /lib/error.php
ErrorDocument 405 /lib/error.php
ErrorDocument 406 /lib/error.php
ErrorDocument 408 /lib/error.php
ErrorDocument 414 /lib/error.php
ErrorDocument 500 /lib/error.php
ErrorDocument 502 /lib/error.php
<Directory "${THEMIS_ROOT}">
Options -Indexes
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
<Directory "${THEMIS_ROOT}/api">
Options +FollowSymLinks -Indexes
AllowOverride All
Order allow,deny
Allow from all
Require all granted
<IfModule headers_module>
Header set Access-Control-Allow-Origin "*"
</IfModule>
# Rewrite url
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
</Directory>
<Directory "${THEMIS_ROOT}/public">
Options +Indexes
Order allow,deny
Allow from all
Require all granted
</Directory>
<Directory "${THEMIS_ROOT}/data">
<Files "logs.json">
Order Allow,Deny
Deny from all
</Files>
<Files "config.json">
Order Allow,Deny
Deny from all
</Files>
</Directory>
<Directory "${THEMIS_ROOT}/data/xmldb">
Options -Indexes
Deny from all
</Directory>
<Directory "${THEMIS_ROOT}/data/problems">
Options -Indexes
Deny from all
</Directory>
<IfModule mod_reqtimeout.c>
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
</IfModule>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Sau khi chỉnh sửa xong lưu tệp lại và sử dụng câu lệnh sau để khởi động lại Apache:
sudo systemctl restart apache2
Sau khi khởi động xong, nếu không gặp lỗi thì truy cập đến địa chỉ của máy chủ trong trình duyệt. Nếu trang web hiện ra, bạn đã thành công.
Nếu máy bạn chưa cài đặt phần mềm Themis, bạn có thể tải về tại đây
Tạo một thư mục để themis-web-interface lưu lại bài nộp lên.
Ở đây, mình sẽ lấy thư mục tại D:/UploadDir
làm ví dụ.
Vào trang web của themis-web-interface, đăng nhập với tài khoản admin:admin
, đi tới bảng cài đặt và thay đổi ô nhập THƯ MỤC LƯU BÀI LÀM
thành vị trí thư mục vừa tạo. Ví dụ như hình dưới:
Sau khi thay đổi xong, nhấn nút Lưu thay đổi
ở phía dưới bảng cài đặt.
Khởi động phần mềm chấm Themis
, đi tới Thiết lập môi trường
hoặc nhấn F11
để hiện bảng cài đặt. Chọn thư mục vừa tạo và nhấn nút Ghi nhận
. Ví dụ như hình dưới:
Sau khi hoàn tất, bạn có thể muốn đọc qua Một số lưu ý cho Admin
Do phần mềm Themis
hiện tại chỉ có cho hệ điều hành Windows nên bạn có thể sử dụng wine
hoặc sử dụng 1 máy tính khác chạy Windows (sử dụng samba
để 2 máy có thể trao đổi tệp tin với nhau)
Bạn có thể thay đổi cấu hình, chỉnh sửa đề bài tại tab cài đặt dành cho admin
- Yêu cầu: ID của tài khoản (không phải username) là
admin
, nếu không sẽ không có quyền truy cập.
Đặt thời gian làm bài là 0 sẽ tắt thời gian làm bài
Cấu hình được lưu tại tệp data/config.json
, bao gồm:
- Tên kì thi
- Mô tả kì thi
- Thư mục lưu bài
- Thời gian bắt đầu kì thi
- Thời gian làm bài
- Thời gian bù
- Công bố kết quả sau khi chấm
- Cho phép nộp bài
- Cho phép thay đổi thông tin
- Cho phép xem nhật ký chấm
Dữ liệu tài khoản được lưu tại data/xmldb/account.xml
. Có thể sử dụng các trình soạn thảo như Excel để chỉnh sửa.
Hướng dẫn cách chuẩn bị một kì thi đã được nêu rõ tại trang Hướng dẫn sử dụng
trong phần mềm Themis (có thể mở bằng cách nhấn vào biểu tượng dấu ?
ở góc trên phải của phần mềm hoặc nhấn phím F1
).
Ở đây mình sẽ lấy ví dụ cách tạo đề bài cho một bài toán đơn giản. Ta có đề bài:
Tính tổng một dãy số gồm n phần tử cho trước.
Tên tệp: SUM.pasTest ví dụ:
INP OUT 3
1 2 36 4
2 2 2 28
- Tạo thư mục chứa các test. Mình sẽ lấy ví dụ thư mục này có tên là
Task
. - Trong thư mục này tạo thêm một thư mục là tên của bài. Ở ví dụ trên thì tên thư mục này sẽ là
SUM
- Trong thư mục bài đó tạo thêm
n
thư mục với tên làtestn
(Vớin
là số lượng test mà bạn muốn tạo). Trong mỗi thư mục test chứa 2 tệp làtên bài.inp
vàtên bài.out
.
-
tên bài.inp
chứa 1 hoặc nhiều dòng là Input cho bài làm. -
tên bài.out
chứa 1 hoặc nhiều dòng là Output cho bài làm.
Ví dụ mình tạo 2 test cho bài trên thì thư mục Task
sẽ có cấu trúc giống như sau:
- Task
- SUM
- test01
- SUM.inp
- SUM.out
- test02
- SUM.inp
- SUM.out
- test01
- SUM
Tệp SUM.inp
trong test01
:
4
1 3 4 2
Tệp SUM.out
trong test01
:
10
Tệp SUM.inp
trong test02
:
7
5 4 2 6 8 9 12
Tệp SUM.out
trong test02
:
46
Nguyên lý làm việc của tạo test tự động là sử dụng một ngôn ngữ lập trình để tạo các test với Input là các số ngẫu nhiên và qua thuật toán của đề bài đã cho để tìm ra Output từ Input ban đầu, sau đó tự động tạo thư mục cho test và ghi Input Output ra các tệp .inp
và .out
.
Sử dụng Tiện ích sinh test tự động của Thầy Nguyễn Tô Sơn
sẽ giúp bạn nhanh chóng tạo các test cho phần mềm Themis. Xem thêm chi tiết tại đây
Hoặc tạo test tự động bằng cách viết một chương trình nhỏ:
Ví dụ về tạo test của bài trên sử dụng ngôn ngữ Python
:
# Hàm để lấy số ngẫu nhiên
from random import randint
# Hàm để tạo thư mục
from os import mkdir
# Lấy số lượng test cần tạo
l = int(input())
# Chạy vòng lặp từ 1 -> l để tạo các test từ test1 -> testl
for i in range(1, l+1):
# Lấy số n ngẫu nhiên từ 1 -> 100
n = randint(1, 100)
# biến lưu danh sách các phần tử
p = []
# biến đếm tổng n phần tử
s = 0
# chạy một vòng lặp từ 1 đến n
for j in range(1, n+1):
# lấy 1 số ngẫu nhiên từ 1 -> 1000
t = randint(1, 1000)
# thêm phần tử ngẫu nhiên t vào danh sách phần tử p
p.append(t)
# thêm phần tử t vào tổng
s += t
# tạo thư mục testi
mkdir("test" + str(i))
# bắt đầu viết Input ra tệp sum.inp trong thư mục testi
with open("test" + str(i) + "/sum.inp", "w") as f:
# in ra số lượng phần tử của test
f.write(str(n) + "\n")
# chuyển các phần tử của p sang dạng string để có thể nối
p = map(str, p)
# nối các phần tử của p thành 1 chuỗi string và ngăn cách bởi dấu cách
f.write(" ".join(p))
# bắt đầu viết Output ra tệp sum.out trong thư mục testi
with open("test" + str(i) + "/sum.out", "w") as f:
f.write(str(s))
Đoạn mã trên sẽ tự động tạo n
thư mục test từ test1
đến testn
với Input hoàn toàn là các số ngẫu nhiên và Output được tính ra qua Input ngẫu nhiên đó.
Lưu đoạn mã đó với tên testgen.py
và chạy trong thư mục Task/SUM
, sau khi chạy thư mục SUM
sẽ trông giống như sau:
- SUM
- testgen.py
- test1
- SUM.inp
- SUM.out
- test2
- SUM.inp
- SUM.out
- test3
- SUM.inp
- SUM.out
- ...
- testn
- SUM.inp
- SUM.out
1. Đăng nhập vào tài khoản có quyền admin
2. Chuyển sang tab cài đặt
3. Tại bảng `Đề Bài`, nhấn vào biểu tượng dấu `+` ở góc phải trên để thêm một đề bài
4. Nhập `Tên Tệp` với giá trị là tên của bài nộp. Với ví dụ trên thì tên tệp sẽ là `SUM`
5. Tiếp tục nhập các trường khác cho phù hợp với bài
6. Nhấn biểu tượng hình chữ `V` ở góc trên phải để lưu đề bài.
* Lưu ý:
* Nếu có thể nộp nhiều loại tệp cho bài thì ngăn cách đuôi tệp bằng kí kí hiệu `|`. VD: `pas|py|java|cpp`
* Những bài đã có trong phần mềm `Themis` nhưng chưa được thêm vào trang web thì sẽ không nộp được bài đấy.
2 phần này đã được nói rõ trong hướng dẫn của phần mềm Themis
nên ở đây mình sẽ nói lại.
1. Tại phần mềm `Themis`, click vào biểu tượng Thư mục là `Nạp danh sách bài thi` (hoặc nhấn `F2`), sau đó chọn thư mục chứa các test đã nêu ở trên. Chương trình sẽ tự động quét và liệt kê danh sách các test có trong thư mục.
2. Tạo một thư mục để chứa các bài làm của thí sinh sau khi chấm (thường là `Contestants`), sau đó nhấn vào biểu tượng `Nạp danh sách thí sinh` (hoặc nhấn `F3`), sau đó chọn tới thư mục vừa tạo.
Trên thanh phía trên của bảng điểm sẽ xuất hiện danh sách các test. Để thay đổi cấu hình của test, `phải chuột` vào test đó và chọn `Cấu hình bài thi`.
<p align="center"><img src="https://lh3.googleusercontent.com/Pwaq2K12SCe0a4YNH-p7q6RnwfzBzxiKFjF1aLApuFDgMZIqGXiYfZzGbxktwDojxo5TmvtS7zoMK-ACht-hwJ-Q3G4A9X50raiEkEfU1iZ63QMbALWjlG1YWiuP_tfiaBvJogxHug=w2400"></p>
* Dùng luồng vào chuẩn (`stdin` / `Standard input`): Input sẽ được đưa vào như nhập bình thường trong `cửa sổ dòng lệnh` (`terminal/console`)
* Dùng luồng ra chuẩn (`stdout` / `Standard output`): Dữ liệu in ra trong `cửa sổ dòng lệnh` (`terminal/console`) sẽ dùng làm output sau khi chương trình kết thúc
> Với các bài yêu cầu lấy Input và Output từ tệp thì không cần phải tích 2 ô này.
* Điểm của test: Điểm sẽ nhận được nếu test chạy đúng
* Giới hạn thời gian: Thời gian tối đa để chương trình chạy 1 test
* Giới hạn bộ nhớ: Bộ nhớ tối đa được cho phép sử dụng trên RAM.
> Nhập giá trị vào `Thiết lập chung` sẽ áp dụng giá trị đó cho từng test.
Sau khi cấu hình xong, nhấn vào nút `ghi nhận` để lưu lại thay đổi.
Trong thư mục themis-web-interface\
có một thư mục có tên là public
. Toàn bộ các tệp tin trong thư mục này (trừ 2 tệp index.php
và .htaccess
) đều có thể được tải xuống bởi mọi người.
- Để thêm tệp, chỉ cần copy tệp đó vào thư mục
public
- Để xóa tệp, xóa tệp cần xóa ở trong thư mục
public
Lưu ý: Không được xóa hai tệp
index.php
và.htaccess
ở trong thư mục này.
⚠ Lưu ý: Sử dụng tệp cài đặt cũ có thể làm cho hệ thống hoạt động không bình thường.
Sau khi tải về và giải nén phiên bản mới, thay thế các tập tin cài đặt
/thư mục
sau đây từ phiên bản cũ sang phiên bản mới:
- Tệp:
data\config.json
- Tệp:
xmldb\account.xml
- Toàn bộ các thư mục trong thư mục:
data\problems\
- Nội dung của đề bài chấp nhận mã HTML. Có thể sử dụng chức năng này để định dạng đề bài, hướng dẫn cụ thể có thể xem tại W3S:HTML Basic
- Tài khoản với
id
làadmin
sẽ có các quyền:- Truy cập vào
Admin Control Panel
,Problems Editor
vàSysLogs
- Bypass kiểm tra thời gian, cho phép xem danh sách đề bài, nộp bài và tải các tệp đính kèm có trong đề bài kể cả khi kì thi chưa bắt đầu hoặc đã kết thúc.
- Truy cập vào
-
Ratelimit
vẫn sẽ áp dụng với tài khoảnadmin
, vì vậy hãy cẩn thận khi thay đổi các thông số của ratelimit. Nếu bạn bị chặn truy cập bởiRatelimit
vì thay đổi sai thông số, bạn sẽ phải thay đổi thủ công trong tệp/data/config.json
- Nếu gặp lỗi khi đăng nhập hoặc chỉnh sửa thông tin tài khoản, hãy kiểm tra xem excel hiện có đang mở tệp
account.xml
không. Nếu có hãy tắt tiến trình excel hiện đang mở tệpaccount.xml
và thử lại. Nếu lỗi vẫn tiếp diễn, hãy gửi một báo cáo lỗi và mình sẽ cố gắng fix trong thời gian sớm nhất.