Skip to content

webmasterscity/juez.com.ve

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OVI - Sistema de Juez Online

Sistema de juez automático para competencias de programación desarrollado en PHP. Permite la evaluación automática de código fuente en múltiples lenguajes de programación.


Origen del Proyecto

Este sistema fue desarrollado como Trabajo Especial de Grado para optar al título de Ingeniero en Informática por:

Leonardo Meléndez

Universidad Politécnica Territorial del Estado Portuguesa "Juan de Jesús Montilla" Acarigua, Estado Portuguesa, Venezuela


Tabla de Contenidos

Características

  • Juez automático para evaluación de código en tiempo real
  • Múltiples lenguajes: C, C++, Java, Python 3, JavaScript, PHP, SQL
  • Sistema de concursos con tiempos de congelamiento y descongelamiento
  • Módulo de entrenamiento para práctica individual
  • Gestión de equipos e instituciones
  • Sistema de clarificaciones durante concursos
  • Rankings en tiempo real (público y jurado)
  • Panel de administración completo
  • Sistema de notificaciones
  • Chat integrado
  • Reportes en PDF
  • Auditoría completa de acciones

Requisitos del Sistema

Software Requerido

Software Versión Mínima Recomendado
PHP 7.4+ 8.1+
MariaDB/MySQL 10.3+ / 5.7+ 10.11+ / 8.0+
Apache 2.4+ 2.4+
GCC 9+ 11+
G++ 9+ 11+
Python 3.8+ 3.11+
Node.js 14+ 18+
Java JDK 11+ 17+

Extensiones PHP Requeridas

php-mysqli
php-gd
php-mbstring
php-xml
php-curl
php-json

Requisitos de Hardware (Mínimo)

  • CPU: 2 cores
  • RAM: 2 GB
  • Disco: 10 GB libres

Requisitos de Hardware (Recomendado para producción)

  • CPU: 4+ cores
  • RAM: 8+ GB
  • Disco: 50+ GB SSD

Instalación

Instalación Automática

# Clonar el repositorio
git clone https://github.com/webmasterscity/juez.com.ve.git
cd juez.com.ve

# Ejecutar script de instalación
chmod +x install.sh
sudo ./install.sh

Instalación Manual

1. Clonar el repositorio

git clone https://github.com/webmasterscity/juez.com.ve.git
cd juez.com.ve

2. Instalar dependencias del sistema (Ubuntu/Debian)

# Actualizar repositorios
sudo apt update

# Instalar Apache, PHP y extensiones
sudo apt install -y apache2 php php-mysqli php-gd php-mbstring php-xml php-curl libapache2-mod-php

# Instalar MariaDB
sudo apt install -y mariadb-server mariadb-client

# Instalar compiladores y lenguajes
sudo apt install -y gcc g++ default-jdk python3 nodejs npm

3. Configurar MariaDB

# Iniciar y habilitar MariaDB
sudo systemctl start mariadb
sudo systemctl enable mariadb

# Configuración segura (establecer contraseña root)
sudo mysql_secure_installation

# Crear la base de datos
mysql -u root -p < ovi_database.sql

4. Configurar Apache

# Copiar archivos al directorio web
sudo cp -r . /var/www/html/juez

# Configurar permisos
sudo chown -R www-data:www-data /var/www/html/juez
sudo chmod -R 755 /var/www/html/juez
sudo chmod -R 777 /var/www/html/juez/archivos

# Habilitar mod_rewrite
sudo a2enmod rewrite

# Reiniciar Apache
sudo systemctl restart apache2

5. Configurar el Virtual Host (Opcional)

Crear archivo /etc/apache2/sites-available/juez.conf:

<VirtualHost *:80>
    ServerName juez.local
    DocumentRoot /var/www/html/juez

    <Directory /var/www/html/juez>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/juez_error.log
    CustomLog ${APACHE_LOG_DIR}/juez_access.log combined
</VirtualHost>
# Habilitar el sitio
sudo a2ensite juez.conf
sudo systemctl reload apache2

Configuración

Configuración de Base de Datos

Editar el archivo modelo/class_db.php:

public $dns="localhost",       // Host de la base de datos
       $usuario="ovi",         // Usuario de la base de datos
       $password="tu_password", // Contraseña de la base de datos
       $db="ovi";              // Nombre de la base de datos

Configuración del Chat

Editar el archivo chat/includes/config.php:

define('DB_SERVER','localhost');
define('DB_USERNAME','tu_usuario');
define('DB_PASSWORD','tu_password');
define('DB_NAME','ovi');

Configuración del Servidor de Juez

El servidor de juez se encarga de compilar y ejecutar el código enviado. Se configura en la base de datos en la tabla servidor:

INSERT INTO servidor (nombre_servidor, active, polltime)
VALUES ('juez-local', 1, 5);

Permisos de Directorios

# Directorio para archivos subidos
chmod -R 777 archivos/

# Directorio para fotos de perfil
chmod -R 777 archivos/fotos_usuarios/

# Directorio para problemas
chmod -R 777 archivos/problemas/

# Directorio para imágenes de noticias
chmod -R 777 images/noticia/

Estructura del Proyecto

juez.com.ve/
├── modelo/              # Clases de modelos (ORM básico)
│   ├── class_db.php     # Conexión a base de datos
│   ├── class_usuario.php
│   ├── class_problema.php
│   ├── class_envio.php
│   └── ...
├── control/             # Controladores
│   ├── control_usuario.php
│   ├── control_concurso.php
│   └── ...
├── vista/               # Vistas y templates
│   ├── campo/           # Campos de formulario
│   └── ...
├── libreria/            # Librerías de terceros
│   ├── bootstrap/
│   ├── jquery/
│   ├── codemirror/
│   └── ...
├── chat/                # Sistema de chat integrado
├── reporte/             # Generación de reportes PDF
├── js/                  # JavaScript personalizado
├── css/                 # Estilos CSS
├── images/              # Imágenes del sistema
├── archivos/            # Archivos subidos
├── error/               # Páginas de error
├── index.php            # Punto de entrada principal
├── intranet.php         # Panel de administración
├── servidor             # Servidor de juez (daemon)
├── ovi_database.sql     # Script de base de datos
├── install.sh           # Script de instalación
└── .htaccess            # Configuración de Apache

Uso del Sistema

Tipos de Usuario

Tipo Descripción Permisos
Administrador Control total del sistema Todos
Juez Gestión de problemas y concursos Crear/editar problemas, juzgar
Participante Competidores Enviar código, ver resultados
Colaborador Ayudantes Permisos limitados
Nuevo Usuarios recién registrados Solo lectura

Usuario Administrador por Defecto

Cédula: V12345678
Nombre: Admin Sistema
Tipo: Administrador

Nota: Cambiar la contraseña después de la primera instalación.

Flujo de un Concurso

  1. Crear concurso: Definir nombre, tiempos de inicio/fin/congelamiento
  2. Agregar problemas: Asociar problemas al concurso
  3. Registrar equipos: Inscribir equipos participantes
  4. Iniciar concurso: El sistema activa automáticamente según horario
  5. Recibir envíos: Los equipos envían soluciones
  6. Juzgamiento automático: El servidor evalúa los envíos
  7. Ver rankings: Tabla de posiciones en tiempo real
  8. Finalizar: El sistema calcula posiciones finales

Crear un Problema

  1. Ir a Problemas > Crear Problema
  2. Completar:
    • Nombre del problema
    • Límite de tiempo (segundos)
    • Límite de memoria (MB)
    • Enunciado (HTML o imagen)
  3. Agregar casos de prueba:
    • Input esperado
    • Output esperado
    • Marcar si es ejemplo visible
  4. Seleccionar lenguajes permitidos
  5. Activar el problema

Lenguajes Soportados

Lenguaje Extensiones Compilador/Intérprete Factor Tiempo
C .c gcc 1.0x
C++ .cpp, .cc, .cxx g++ 1.0x
Java .java javac/java 2.0x
Python 3 .py python3 3.0x
JavaScript .js node 2.0x
PHP .php php 2.0x
SQL .sql psql 1.0x

Agregar un Nuevo Lenguaje

INSERT INTO lenguaje_prog (nombre, extensiones, factor_tiempo, comando, estatus)
VALUES ('Ruby', 'rb', 2.50, 'ruby', 1);

API del Juez

Mensajes de Salida

Código Mensaje Descripción
1 ACCEPTED Respuesta correcta
2 WRONG ANSWER Respuesta incorrecta
3 TIME LIMIT EXCEEDED Tiempo excedido
4 RUNTIME ERROR Error en ejecución
5 COMPILATION ERROR Error de compilación
6 MEMORY LIMIT EXCEEDED Memoria excedida
7 PRESENTATION ERROR Error de formato
8 PENDING Pendiente
9 JUDGING En evaluación

Proceso de Evaluación

1. Usuario envía código
2. Sistema guarda en tabla `envio`
3. Servidor de juez detecta envío pendiente
4. Compila el código (si aplica)
5. Ejecuta con cada caso de prueba
6. Compara salida con salida esperada
7. Actualiza resultado en base de datos
8. Usuario ve resultado

Solución de Problemas

Error de conexión a base de datos

# Verificar que MariaDB está corriendo
sudo systemctl status mariadb

# Verificar credenciales en modelo/class_db.php
# Probar conexión manual
mysql -u usuario -p nombre_bd

Permisos de archivos

# Restablecer permisos
sudo chown -R www-data:www-data /var/www/html/juez
sudo chmod -R 755 /var/www/html/juez
sudo chmod -R 777 /var/www/html/juez/archivos

Errores de PHP

# Ver logs de Apache
sudo tail -f /var/log/apache2/error.log

# Habilitar errores en desarrollo
# En php.ini:
display_errors = On
error_reporting = E_ALL

El juez no procesa envíos

# Verificar que el servidor de juez está activo
# En la base de datos:
SELECT * FROM servidor WHERE active = 1;

# Verificar permisos de ejecución
ls -la servidor
chmod +x servidor

Problemas con caracteres especiales

# Verificar encoding de la base de datos
mysql -u root -p -e "SHOW VARIABLES LIKE 'character_set%';"

# La base de datos debe usar utf8mb4
ALTER DATABASE ovi CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Contribuir

  1. Fork el repositorio
  2. Crear una rama para tu feature (git checkout -b feature/nueva-funcionalidad)
  3. Commit tus cambios (git commit -am 'Agregar nueva funcionalidad')
  4. Push a la rama (git push origin feature/nueva-funcionalidad)
  5. Crear un Pull Request

Estándares de Código

  • Usar indentación con tabs
  • Comentarios en español
  • Nombres de variables descriptivos
  • Seguir la estructura MVC existente

Autor

Leonardo Meléndez

  • Ingeniero en Informática
  • Universidad Politécnica Territorial del Estado Portuguesa "Juan de Jesús Montilla"
  • Acarigua, Estado Portuguesa, Venezuela

Este proyecto fue desarrollado como Trabajo Especial de Grado (Tesis) para optar al título de Ingeniero en Informática, con el objetivo de crear una plataforma que fomente la programación competitiva en instituciones educativas de Venezuela.

Licencia

Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.

Contacto


Desarrollado con PHP para la comunidad de programación competitiva en Venezuela y Latinoamérica.

About

Sistema de Entrenamiento para Competencias Internacionales de Programación

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors