Publicidad
Publicidad

RSS PHP

Moodle es un ambiente educativo virtual (VLE) desarrollado inicialmente por Martin Dougiamas con la intención de ayudar a los educadores a crear cursos en línea pensando en todo momento en la colaboración del contenido y su evolución continua. Por supuesto, Moodle es Software Libre bajo el amparo de la GPL.

Es la plataforma educativa más extendida del mundo con más de cuarenta millones de usuarios y cuatro millones de cursos alrededor del globo. Está programada en legacy PHP (esto es que la práctica totalidad del core de Moodle no soporta clases) y por lo tanto no está orientado a objetos.

Realmente Moodle mezcla un poco de programación orientada a objetos con mucha programación estructurada. Tampoco utiliza ningún sistema de encapsulación de datos ni separa la vista de la lógica de la aplicación. Si pienso en implementar el patrón de diseño MVC en Moodle me entra la risa y una flojera interesante.

Arquitectura de MoodleMoodle se basa en un núcleo (conocido como el Moodle core) del sistema rodeado de una gran cantidad de plugins que proveen de funcionalidad específica a la plataforma. Los plugins en Moodle pueden ser de varios tipos distintos, autenticación, bloques, matriculación, temas, actividades, etc.

Todos los módulos comparten funcionalidad específica entre si y el core. La distribución estándar de Moodle incluye el core del sistema y un número de módulos de todos los tipos que proveen de la funcionalidad base del sistema y con el cual se puede empezar a funcionar sin carencias ni problemas de ningún tipo.

La estructura de los módulos en Moodle es muy simple, un directorio con archivos PHP, JavaScript, XML y/o CSS y puntos de entrada definidos en varios archivos clave como locallib.php, db/install.xml o lib.php que permiten la comunicación con el core.

El CoreEl core de Moodle proporciona todos los mecanismos necesarios para implementar la plataforma educativa. Implementa todos aquellos mecanismos que luego los plugins utilizan para desarrollar su función. Es por lo tanto el core la parte más importante del sistema Moodle y sus componentes principales son los siguientes.

Cursos y ActividadesMoodle define un curso como una secuencia de actividades agrupadas en secciones. Existen actividades de todo tipo y son muy flexibles. Los cursos se organizan en categorías jerárquicas dentro de la plataforma educativa.

Usuarios y GruposCada curso puede tener un número indeterminado de alumnos y un número indeterminado de grupos que acoja a esos alumnos. Los alumnos tienen un perfil de usuario que pueden editar y opciones específicas por curso en el que están matriculados. Los cursos cuentan con históricos, roles, permisos, etc.

MatriculacionEn Moodle los tipos de matriculación disponibles en la plataforma se definen a través de módulos por lo que podemos definir nuevos tipos de matriculación con sus peculiaridades de forma bastante sencilla a través de módulos externos. Cada tipo de matriculación puede implementar sus propios mecanismos al margen del core.

Los módulos principalesComo ya he dicho anteriormente, Moodle viene con una serie de módulos principales o estándar que además le son necesarios para su correcto funcionamiento. A parte, al estar tan extendida, moodle cuenta con una base de datos de módulos ingente donde buscar algo a veces puede ser un poco exasperante.

Algunos de los más importantes tipos de módulos en Moodle son:Actividades y Recursos: Componen los objetos individuales del curso. Existen actividades de todo tipo, colaborativas, foro, wiki, cuestionarios, etc. Es de largo el tipo de módulo más desarrollado y se instalan en el directorio mod dentro de la raíz de MoodleBloques: Los bloques son cajas con contenido añadido en columnas a los lados del contenido principal que ofrecen funcionalidades varias. Residen en el directorio blocksMatriculación: Aunque este tipo de plugin no es muy común, voy a hablar mucho de él en esta serie puesto que la experiencia que tengo en el desarrollo de módulos de Moodle incluye uno de estos, Los plugins de matriculación residen en el directorio enrolTemas: Los estilos se desarrollan dentro de módulos que residen (efectivamente, lo has adivinado) en el directorio theme Existen muchos otros tipos de plugins pero su completa enumeración y definición excede de sobremanera el propósito de este artículo.

La base de datosMoodle integra más de doscientas tablas en su base de datos incluyendo las necesarias por el core y las de los módulos principales. La estructura de las tablas de los módulos se definen en el archivo install.xml dentro del directorio db en el directorio principal de los módulos. La base de datos puede ser editada y revisada a través del menú de administración de la plataforma.

En Moodle no usamos un objeto para interactuar con la base de datos (aunque existe, es una de las pocas cosas que si cuenta con orientación a objetos en Moodle) sino con funciones al estilo de la programación estructurada que interactúan con un objeto ODBC.

Tampoco existe un ORM propiamente dicho pero si una capa de abstracción sobre la base de datos llamada XMLDB

Organización del códigoMoodle sigue un enfoque de transaction script para organizar el código apoyado por elementos de un modelo de dominio puesto que al empezar a programar Moodle, lo orientación a objetos no estaba soportada en PHP, o al menos esa es la excusa oficial expuesta en la documentación para desarrolladores del proyecto.

El código del core y los módulos principales de Moodle se están regulando y refactorizando para soportar el paradigma orientado a objetos a una velocidad similar a las obras del escorial, pero la esperanza es lo último que se pierde.

Otra cosa que Moodle no soporta es hooks por lo que la funcionalidad del core solo puede ser extendida a través de parches modificando el mismo y convirtiendo nuestro desarrollo en algo complicado de mantener que impide la normal actualización de la plataforma.

Pongámonos en situaciónDesde hace aproximadamente un año he estado desarrollando un módulo muy ambicioso que añade funcionalidad extra al core de Moodle sin modificar el código del mismo ni aplicar parches posibilitando la actualización completa de la plataforma. El módulo sigue una política de no intromisión en el core del sistema añadiendo funcionalidad extra, capas y entidades superiores.

En próximas entregas de esta nueva serie narraré los problemas a los que me he enfrentado a la hora de desarrollar dicho módulo y los éxitos cosechados.

Publicidad

HTML5 Constraint API

16 Comentarios
HTML5 Constraint API

Cada día usamos más características de HTML5 pero a veces hay algunas que nos pasan un poco más desapercibidas. Uno de los ejemplos es HTML5 Constraint API que esta orientada a facilitar las validaciones de formularios. HTML5 soporta dos atributos que nos permiten validar elementos en un formulario, por un lado tenemos el atributo "required" que nos obliga a rellenar el campo y por otro lado tenemos el atributo "pattern" que obliga a que el campo se adapte a algún tipo de patrón. Vamos a ver un ejemplo a través de un formulario con dos nombres :

Leer más »

Las editoriales de libros técnicos más reconocidas

18 Comentarios
Las editoriales de libros técnicos más reconocidas

Hoy por hoy en nuestro mundo técnico es prácticamente obligatorio comprar bibliografía en inglés y trabajar con editoriales internacionales. Vamos a hacer un recorrido por las editoriales más conocidas en nuestro ámbito.Seguro que muchos de vosotros tenéis algun libro en vuestras estanterías. Algunos de ellos se han convertido en auténticos best seller y, aún estando en la era de internet, son una gran fuente de aprendizaje.

Leer más »

Facebook desiste con PHP, esto ya no tiene solucción (Actualizado)

13 Comentarios
Facebook desiste con PHP, esto ya no tiene solucción (Actualizado)
Mark, ya has sobrescrito de nuevo el config.php y mira todos esos warnings, ¡esto no puede seguir así!

ACTUALIZACIÓN: Este post se trata de una pequeña broma en ocasión del día de los Santos Inocentes que se celebra en España el 28 de diciembre de cada año. Disculpad las molestias.

Para los defensores y fanboys varios de PHP Facebook es poco menos que la piedra filosofal: "Si un gigante de la talla Facebook lo utiliza, no puede ser tan terrible". Sin embargo este mantra dejará de ser cierto en poco tiempo. Lo cierto es que en Facebook llevan tiempo descontentos con PHP y por eso proyectos como HHVM o Hack, que básicamente son tuneos de PHP para librarse de sus características más perniciosas y adaptarlo mejor a las necesidades de un mastodonte de semejantes dimensiones. Pero ahora en la empresa creada por Marc Zuckerberg van a dar un paso más: desisten con PHP definitivamente y van a migrar a Node.js a lo largo de los próximos meses.

Leer más »

Los lenguajes de programación más utilizados

31 Comentarios
Los lenguajes de programación más utilizados

El otro día estuve echando un vistazo a la lista de lenguajes de programación más utilizados que ha publicado Gartner para 2014 en el cual vemos a Java como lider del mercado. Quizás esta vez tengamos que preguntarnos si es un líder indiscutible o no. En este caso el segundo lenguaje de programación es JavaScript que le esta pisando los talones y la presión que esta realizando es cada día más fuerte a traves de HTML5 y su importancia en el mundo de la movilidad.

Leer más »
Publicidad

Otro compilador PHP para el bote: Recki-CT

4 Comentarios
Otro compilador PHP para el bote: Recki-CT

Muchos piensan que PHP está muerto o por lo menos en decadencia. Los hechos van por otro lado, no sólo no parece muerto si no que está de parranda: sigue siendo muy, muy utilizado en entorno web y se siguen haciendo nuevos desarrollos e innovaciones. De hecho este 2014 ya tuvimos la noticia de HHVM y Hack de la gente de Facebook y ahora nos encontramos con otro compilador PHP con muy buenos benchmarks, se llama Recki-CT y ha sido desarrollado por un desarrollador de Google... aunque en su 20% de tiempo de libre disposición (vamos que es un pet project) por lo que no es un producto oficial de la corporación de Mountain View.

Leer más »

Large-scale Scrum, multas por no cumplir la normativa sobre cookies y hackers éticos: Pull Request #12

1 Comentario
Large-scale Scrum, multas por no cumplir la normativa sobre cookies y hackers éticos: Pull Request #12

Cerramos la semana repasando algunas de las lecturas recopiladas por los editores de Genbeta Dev. Agrupamos en este nuevo Pull Request Semanal #11 nuestras recomendaciones de artículos técnicos para desarrolladores.

Leer más »

Compro, luego existo, ¿de dónde es este código?

5 Comentarios
Compro, luego existo, ¿de dónde es este código?

Una vez más, traemos el código fuente de una aplicación para que nos digáis si sabéis de dónde procede. En este caso se trata de un software de servidor, desarrollado por un programador alemán (aunque de nombre noruego y apellido español), que con apenas 20 años vio la necesidad de una aplicación libre para un nicho que todavía se encontraba muy verde.

Las pistas

  • Es un habitual entre las sugerencias de aplicaciones para entornos LAMP, MAMP y WAMP.
  • Fue uno de los primeros proyectos de software libre de su nicho, por lo que muchos de sus competidores actuales están realmente derivados de su propio código.
  • Mandriva y Ubuntu utilizan este proyecto para una sección de sus páginas web.
Leer más »

Interoperabilidad en el siglo XXI

25 Comentarios
Interoperabilidad en el siglo XXI

Muchos de vosotros habréis conocido los gloriosos días en que las conectividades (ej. la empresa A envía en tiempo real el estado del almacén a otra empresa B) se hacían directamente por TCP y se definían hermosas tarjetas que mostraban la longitud de tal o cual campo ("...el teléfono 30 char..."). En realidad, ninguna de las partes tenía ninguna gana de definir el formato, crear el cliente/servidor, parsear las entradas, etc... cambios en los formatos debían hacerse con cautela y representar caracteres extendidos era algo que sencillamente, ni se planteaba (ASCII era todo lo que había). Es decir, un pichoche de mucho cuidado, para total, que el programador de la empresa A, pudiera llamar a la función void UpdateInventory(string productCode, int newInventory); que tenía implementada el otro programador en la empresa B.

Si el programador B ya tiene esa función en su sistema ¿porqué el programador A no puede sencillamente invocarla?.

Leer más »
Publicidad

Menú

Lo nuevo en genbetadev

Ver más artículos