Nace Kopernik, un sistema académico

Logo de Kopernik

22-04-2016 Nota: Actualización al pie de la entrada.

Kopernik es el nombre clave del proyecto personal al que he dedicado mi tiempo estos últimos 4 meses. Se trata de un sistema académico online desarrollado usando Flex, PHP (Zend Framework) y MySQL para su uso en instituciones educativas.

Aprovechando la experiencia que adquirí trabajando y estudiando en universidades decidí crear desde cero un sistema que se ajustara a los requerimientos especiales que cada institución pudiera tener. Como recién estaba empezando pensé que mejor seria comenzar con módulos para colegios pero… resulta que he olvide como funcionan!

Cuando estaba en el colegio no pensaba en procesos y en maneras de como mejorarlos como lo hago ahora. Por eso es que los módulos que ya he creado almacenan datos como el valor en créditos de cada asignatura o que permiten a un alumno matricularse en asignaturas distintas que el resto de sus compañeros. De hecho el proceso que los administradores deben realizar para matricular de un alumno esta pensado usando los requerimientos universitarios o de institutos.

En los colegios todos los alumnos llevan lo mismo. Solo hay dos opciones:

  • No te matriculas un año o…
  • Estas matriculado y llevas todas las asignaturas de tu año (con algunas excepciones como no asistir al curso de religión por solicitud de los padres).

Es algo en lo que hay que trabajar.

Por el momento me quedan algunos módulos importantes por desarrollar, como el control de evaluaciones, asistencias y materiales de clase.

Logo de Kopernik

Logo de Kopernik

A continuación explico algunos detalles del software y al final puedes encontrar un enlace para que lo puedas ver en acción.

Características generales

  • Es modular, de tal forma que sea facil reutilizar los módulos comunes y adecuarlos a lo que necesite.
  • Permite el trabajo colaborativo (tiempo real).
  • Solo hace uso del puerto 80. No es necesario habilitar la salida puertos adicionales en una red controlada.
  • El cliente solo necesita tener Adobe Flash instalado.
  • No requiere de licencias adicionales.
  • Es multiplataforma. Corre en Windows, Mac, Linux y cualquier otro sistema operativo que tenga soporte para Adobe Flash (talvez Android?)
  • Es multitarea. Las aplicaciones y modulos son cargados dentro de contenedores visibles como ventanas. Por lo tanto, no es necesario salir de un modulo para entrar a otro. Puedes tener varios modulos abiertos al mismo tiempo compartiendo el escritorio visible o minimizar algunos de ellos para usarlos luego.
  • Al instalarlo en un servidor web con un IP publico es accesible desde cualquier parte del mundo.
  • Control de acceso, a modulos y acciones, por grupos de usuarios. Se define que grupos tienen acceso a que modulos y las operaciones que realizan estos.
  • El sistema cuenta con algunas herramientas como el administrador de tareas (clic secundario sobre el fondo) y un explorador de directorios (del servidor).
Tres aplicaciones abiertas: el explorador de alumnos, el explorador de archivos y el administrador de tareas

Tres aplicaciones abiertas: el explorador de alumnos, el explorador de archivos y el administrador de tareas

Tecnologías usadas

  • Flex 4: Empece el proyecto con la version 3 pero las nuevas caracteristicas (en especial la capacidad de trabajar con archivos localmente y el skining) resultaron muy tentadoras y tuve que hacer la migracion ya casi a mitad del proyecto (y acepto que no fue una decision muy inteligente. Me retraso todo el calendario pero espero haya valido la pena).
  • Zend Framework: Elegi este framework por la empresa que hay detras (Zend creadora de PHP) y por que ya me encuentro familiarizado con el. Ademas podia usar el paquete Zend_Amf para conectar Flex con el servidor. Tuve que migrar desde AMFPHP por lo que perdi el explorador de servicios y el control de acceso en cada clase. Realmente fue una migracion dura porque las clases del sistema (no academicas) ya estaban empezadas y funcionaban perfecto con AMFPHP. La gran ventaja de usar Zend_Amf es que tienes a tu disposicion todo el framework de Zend y ademas es el unico soporte para AMF que tiene la venia de Adobe sin ser desarrollado por Adobe (y la version actual de AMFPHP se encontraba abandonada en una version beta).
  • PHP: Como es obvio, por ser un lenguaje fantastico y porque casi todo servidor Apache lo tiene instalado.
  • MySQL: Necesitaba una base de datos transaccional y confiable. Que mejor que MySQL usada en la mayoria de servicios de hosting.

Requisitos

  • Del lado del cliente
    • Flash Player 10.0.0 o una version mayor.
  • Del lado del servidor
    • PHP 5.2
    • Apache
    • MySQL

Acceso a la demo

Antes de ingresar por favor, lee las siguientes instrucciones:

  • Los datos de acceso se encuentran pre-escritos en los campos de texto, solo es cuestion de logearse.
  • El usuario de prueba pertenece al grupo de administradores, por lo que tendras acceso sin restriccion sobre los modulos y acciones que puedan estos realizar. Ten cuidado de eliminar aplicaciones, volver a registrarlas te puede resultar complicado si no sabes donde se encuentran almacenadas.
  • La falta de acentos se debe a que uso en teclado en ingles. Lo corregire muy pronto. Las fallas ortograficas se deben a mi falta de atencion a las clases de lengua (junto con la eficiencia del corrector ortografico de Word). Cuando tenga tiempo aplicare las correcciones necesarias.
  • La primera vez que cada aplicacion es solicitada puede demorarse unos segundos en cargarse (dependiendo de tu velocidad de salida a Internet). La aplicacion queda almacenada en la cache de tu navegador y es cargada de alli en las solicitudes posteriores.
  • Y por ultimo, te recuerdo que esta es una version en desarrollo y por ello puede tener errores. Si encuentras alguno, por favor ayudame a corregirlo comentandolo en este post. Gracias.

Eso es todo. La direccion de acceso es la siguiente: http://danielzegarra.info/Projects/Kopernik/. Espero tus comentarios.

22-04-2016 Actualización

He estado recibiendo preguntas sobre este proyecto y por eso quiero informarles a los interesados que se detuvo el desarrollo del mismo por cuestiones técnicas. Como todos saben Adobe Flash está agonizando (las tecnologías cambian, es parte del progreso) y desde hace ya un tiempo que salté de ese barco. Planeo retomar este proyecto con la tecnología mas prometedora que hay actualmente en el mercado (Meteor y JS fullstack están a la delantera por ahora) inmediatamente después de conseguir mi certificación en Linux que es a lo que actualmente estoy enfocado ahora.

20 Respuestas

  1. Gesinca dice:

    Hola. Buen trabajo.
    Estoy interesado en tu aplicación Kopernik. Piensas en vender o es open source.

  2. Lo pienso comercializar, pero cuando este un poco mas avanzado. Aun faltan modulos importantes. Acabo de llegar a Lima y aun estoy acomodandome.
    Dejame tus datos y te informare de los releases que vaya soltando.

    Gracias por el interes.

  3. Avila dice:

    Hola, Excelente trabajo realizado… es asombroso como trabajas modularmente no se si es mucho pedir pero podria hacer un post explicando esta forma de trabajar.

  4. Jonathan Rodriguez C. dice:

    Notable trabajo, excelente tu forma de trabajar con flex.

    Consulta:
    ¿como lograste desarrollar la ficha dinamica de gestion de contactos,
    en la ficha de administracion de alumnos con el flex?

    Saludos!

    JRC

  5. No entendí. A cual ficha dinámica te refieres?

  6. Jonathan Rodriguez C. dice:

    Hola Daniel, me refiero a la gestion de contactos, correos, etc. del mantenedor de alumnos.

    Es muy interesante tu forma de agregar datos de contacto en ese mantenedor.
    ¿Que controles usaste para lograr tan eficiente resultado?

    Saludos!

    JRC.

  7. Carlos Rojas dice:

    Hola Daniel que impresionante tu aplicación… Una consulta por favor son componentes extendidos de TitleWindow los que usas para las ventanas de tu aplicación verdad? para hacer que sean minimizables, maximizables y Resizables. lo de maximizable y rezisable si lo hecho pero me impresionó la forma como es que haces el minimizable no logro hacerlo y por eso es q acudo a ti haber si me das una noción. A también como es que haces para que solo sean movibles dentro del espacio de la aplicacion… gracias de antemano espero y me puedas ayudar.

  8. Jonathan Rodriguez C. dice:

    Hola Carlos, para trabajar con ventanas y paneles flotantes tienes que usar unas librerias en flex:

    http://code.google.com/p/flexmdi/downloads/detail?name=flexmdi-1.1.zip

    Hay muchas mas, pero esa es como una de las primeras.

    Saludos!

    JRC

  9. Asi es. Utilizo Flexlib para este proyecto. Los componentes de Flexlib para Flex 4 de ese entonces seguian basandose en los componentes MX que Flex cada vez da menos soporte. Tuve muchos problemas con estos componentes de Flexlib. No he vuelto a revisar la web de flexlib, espero que ya tengan componentes nuevos.

  10. eduardo quiroz dice:

    pero que buena aplicación, como es que levantas todo independientemente en varias pantallas. me imagino que usas RemoteObject para los datos dinamicos, me gustaria saber en cuanto a las llamadas que haces en tu aplicacion solo usas una instancia de RemoteObecjt o varias, porque por ejemplo yo uso una clase personalizada para mis llamadas la cual solo uso una instancia usando el patron singleton, pero al ver tu aplicacion que levantas varias pantallas y en cada pantalla puedes trabajar independientemente tus datos, no se si lo trabajas con una sola instancia o varias, Podrias explicarme, talvez estoy mal y no lo comprendo muy bien.

  11. Hola Eduardo. Así es, utilizo RemoteObjects para la comunicación entre Flex y el servidor. Tengo una clase que me centraliza la configuración inicial del proxy y esta clase se encuentra en una librería compartida por la aplicación principal y las hijas (que son cargadas en las ventanas). Los parámetros de configuración sin embargo no se encuentran hardcodeado en la clase. Estos parámetros son definidos por la aplicación principal al crear la primera instancia de mi proxy de comunicación (que es un Singleton). Las aplicaciones hijas son cargadas en un applicationDomain hija del applicationDomain principal, por lo tanto, cuando desean crear una instancia del proxy de comunicación Flex les entrega la instancia inicializada de mi app principal y no la suya. Cuando la app hija es cargada dentro de la app principal todas las clases de la app hija que también existen en la app principal son ignoradas.

  12. eduardo quiroz dice:

    O sea solo usas una sola instancia del proxy?? la mia es asi masomenos esta es la parte del constructor y el singleton.

    private var _remote:RemoteObject;

    public function Remote(){

    _remote = new RemoteObject();
    _remote.showBusyCursor = true;
    _remote.source=”EchoService”;

    _remote.destination = ‘zend’;
    _remote.endpoint = “http://localhost/gateway.php”;

    }

    private static var _instance:Remote;
    public static function getInstance():Remote{

    if(_instance == null){
    _instance = new Remote();
    }

    _instance = new Remote();
    return _instance;
    }

    Bueno hay algo circulando en mi cabeza aunque en realidad no lo he hecho pero esta es la cuestión, suponte que levantas 3 ventanas cada una tiene un proceso de listar sus propios registros en la primera lista 10 000 en la segunda 20 000 y en la tercera 15 000 registros si se usa una sola instancia del remote object me imagino que se ira cargando de una por una, tiene que terminar un listar para que empieze con el otro y asi… o sea en cola es cierto esto? ???

    porq me imagino si creo 3 instancias del remote object que trabaje una por proceso de listar de cada ventana se cargarán independientemente sin esperar que termine uno para empezar la otra.??????

    ahhhhhhhhhhhhhhh…. creo que ya me hize bolas…. (:( )

  13. eduardo quiroz dice:

    hola…. espero y tengas tiempo para leer mi comentario anterior y haber si me das una noción… Gracias

  14. Disculpa por no responder la pregunta. He tenido una semana apretada y ademas, se me olvido :-B
    Lei el codigo que adjuntaste y a pesar de no haber revisado recientemente mi script no recuerdo que defina el endpoint en cada metodo. Creo que era mas simple que eso. tengo en casa el codigo, te lo muestro cuando llegue alla.

  15. eduardo quiroz dice:

    Mucha gracias por contestar, me encantaría si pudieras hecharme la manito con eso ya que acudo a tu experiencia para esto, muchas gracias nuevamente…

  16. Soria dice:

    Hola.
    Estoy interesado en comprarte ese proyecto te dejo mi mail richarsoria_109@hotmail.com

  17. Juan Ponce dice:

    Hola como me contacto contigo estoy interesado en tu sistema, no pude ingresar al demo. Mi correo es juan.ponce@iclaro.com.pe, por favor escribeme.

  18. Fredy de Jesús Aristizábal Aristizábal dice:

    Hola

    Es imposible acceder al demo.. ¿cual es el usuario y contraseña demo?

    Mil gracias!

  19. Hola Fredy. Este experimento ya no está disponible por que la bd se daño por un error del hosting y no valía la pena restaurarla porque a que este proyecto no iba a continuar debido principalmente a la tecnología que usé para desarrollarlo (Adobe Flash). Aún tengo la intención de retomar este proyecto pero lamentablemente aún no se han dado las condiciones para hacerlo. Gracias por el interés.

  20. Fredy de Jesús Aristizábal Aristizábal dice:

    Muchas gracias Daniel!

Deja un comentario