Integración Continua Agil como Práctica de Desarrollo

Rocketeer es agilidad con baterías, es moderno y además permite gestionar de manera fácil las tareas, los eventos y la gestión de implementaciones/lanzamientos de proyectos o aplicaciones. Es inspirado en la filosofía Laravel: Ser ágil, elegante y lo más importante, fácil de usar.

Por favor consulte:

Igual que Laravel, hace hincapié en el uso de valores predeterminados inteligentes presentes en el desarrollo de punta. Con Rocketter se puede implementar cualquier proyecto desde pequeños sitios web HTML/CSS hasta aplicaciones grandes realizadas con PHP, Rails, entre otros…”.

Send your projects up in the clouds

Ahora tengo muchas ganas de seguir explorando: Ansible, Crusible y Review Board.

Cosas que necesito tatuarme sobre PHP y OOP

¿Cuándo debo usar require o include?

La función require() es idéntica a include(), excepto que controla los errores de manera diferente. Si se produce un error, la función include() genera una advertencia, pero el script seguirá con su ejecución. Por otro lado, El require() genera un error fatal, por lo que el script se detendrá.

¿Cuándo debo usar require_once o require?

La declaración require_once () es idéntica a require(), pero PHP comprobará si el archivo ya se ha incluido, y si es así, no lo incluye otra vez.

Interfaces

Las clases abstractas son una característica mal entendida de la programación en PHP orientada a objetos (OOP) y la fuente de confusión surge cuando se considera frente a una interfaz.

¿Cuándo debo usar interfaces?

La razón obvia para usar una interfaz es que una clase hija puede implementar varias interfaces, pero sólo puede extender una única clase abstracta.

¿Cuándo debo usar clases abstractas?

Cuando no se requiere hacer uso de herencia múltiple se recomienda usar clases abstractas, simplemente porque permiten más tarde añadir funcionalidad básica dentro de la clase abstracta. Sin embargo las razones de la creación de clases abstractas debe ser más que eso.

“Abstract” sólo indica que algo fue declarado pero no definido, por lo que antes de usarlo, es necesario definirlo.

¿Por qué debo utilizar clases abstractas?

Una clase abstracta proporciona funciones base concretas, así como funciones abstractas que deben ser implementadas por clases concretas hijas que se vinculan por algo que llamaremos: un contrato.

El brillo sutil de las clases abstractas

Pueden llamar a funciones abstractas dentro de las funciones de la base concreta. Por ejemplo:

abstract class Vehicle { 
  function start() { 
    $ready = $this->drive();      // Existe en la clase hija por contrato.
    return strtoupper($ready); 
  } 
  abstract function drive();      // Este es el contrato.
} 
 
class Car extends Vehicle { 
  function drive() {              // Esta implementación concreta es obligatoria.
    return "Please accelarate your car."; 
  } 
} 

class Motorcycle extends Vehicle {
  // Actually you ride a motorcycle.
  function drive() {              // Esta implementación concreta es obligatoria.
    return "Please accelarate your motorcycle."; 
  } 
} 
 
$car = new Car(); 
echo $car->start();

$motorcycle = new Motorcycle(); 
echo $motorcycle->start();

Para comprender mejor las clases abstractas:

  • Herencia simple. Las clases hijas sólo pueden extender sólo una clase a la vez.
  • Las clases abstractas no pueden ser instanciadas – no se usa new Vehicle();
  • Las clases abstractas sólo pueden definir variables de clase del tipo const.
  • La clase abstracta A puede ser extendida por otra clase abstracta B. La clase B puede implementar alguna o ninguna de las funciones abstractas en A.
  • En el caso anterior, una clase hija C que extiende a la clase abstracta B debe implementar todas las funciones abstractas de B, así como las funciones abstractas en A que no se hayan implementado en la clase abstracta B.
  • Los parámetros de las funciones concretas y las funciones abstractas deben coincidir. Sin embargo, si una función abstracta se define como función abstracta turnOff($message); entonces está bien implementarla como turnOff($message, $lock = TRUE), pero no como turnOff($message, $lock).
  • La visibilidad de las funciones en las clases hijas debe ser la mismo o menos restrictiva que las de la clase madre. Por lo tanto protected abstract function puede ser implementada como protected o public pero no como private.
  • Arriba de PHP 5.3 si es permitido declarar funciones como static abstract.

A diferencia de las interfaces, las clases abstractas si son clases. Estas son otras características:

  • Las clases abstractas pueden tener “consts”, “members”, “method stubs” y “defined methods”, mientras que las interfaces sólo pueden tener “consts” y  “method stubs“.
  • Los métodos y los miembros de una clase abstracta se pueden definir con cualquier visibilidad, mientras que todos los métodos de una interfaz se deben definir como públicos.
  • Al heredar una clase abstracta, la clase hija debe definir los métodos abstractos, mientras que una interfaz puede extender otra interfaz y no es necesario que los métodos deban ser definidos.
  • Una clase hija sólo puede extender una sola clase abstracta (o cualquier otra), mientras que una interfaz se puede extender, también una clase puede implementar otras múltiples interfaces.
  • Una clase hija puede definir métodos abstractos con la misma o visibilidad menor restrictiva, mientras que una clase que implementa una interfaz debe definir los métodos con la misma visibilidad exacta.

Abstract Class vs Final Class/”Class Constant”

  • Una clase abstracta no puede ser instanciada. En otras palabras, no podemos crear directamente el objeto de la clase abstracta. Pero con las clases final sí podemos crear una instancia.
  • Una clase abstracta debe ser extendida mientras una clase final no lo puede ser.
  • Una clase final no puede contener métodos abstractos, pero una clase abstracta sí puede contener métodos final.

Traits

Arriba de PHP 5.4, las clases abstractas son antigüedades y no deben utilizarse. La clara separación de las interfaces y los traits proporciona los mismos beneficios DRY y son menos restrictivos para el desarrollador.

Los traits no implican una relación. Son puramente reutilización de código. En tiempo de ejecución, los traits no existen. No dicen nada acerca de un objeto que los utiliza, cómo se comportan, lo que puede hacer con ellos, o cualquier otra cosa. Los traits son puramente reutilización de código. En ese sentido, son completamente ortogonales a las interfaces; mientras que una interfaz es la reutilización puramente de la interfaz, un trait es puramente reutilización de código.

Las clases abstractas existen para apoyar a los desarrolladores de PHP 5.3, que aún no tienen acceso a los traits.

PHP – Patrón de diseño Singleton

Algunos recursos de aplicaciones son exclusivos, por ejemplo, la conexión a una base de datos a través del manejador de la base de datos es exclusivo.

Se comparte el manejador de la base de datos porque puede darse un “overhead” al estar abriendo y cerrando conexiones, en particular durante la petición a una sola página.

Un Objeto es un Singleton si la aplicación puede incluir uno y sólo uno de esos objetos a la vez.

PHP – Patrón de diseño Factory

En vez de usar new para crear Objetos, se usa una Clase Factory. Entonces, si se necesita el tipo de los Objetos creados, sólo se cambia la Clase Factory. Por lo tanto, todo el código que use la Clase Factory cambiará de manera automática.

En sistemas complejos, la mayoría del código confía en pocas Clases clave. Las dificultades surgen cuando se necesita cambiar esas Clases. Por ejemplo, si hay una Clase User que lee desde un archivo y se necesita cambiar el código para que más bien lea desde una Base de Datos. En este caso es cuando el patrón de diseño Factory se vuelve útil.

Esta variación usa Métodos Factory (static) en lugar de Clases Factory.

DRY: Encapsula el proceso de crear Objetos User en un sólo lugar, de ésta manera trozos de código complejo para inicializar Objetos no van a ser copiados y pegados una y otra vez por todo lado.

Drupal y PhoneGap – Mobile application development kit

Realmente no me gusta mucho Drupal, en lo personal me parece más simple e interesante WordPress. Pero me dió curiosidad experimentar, por ejemplo, con Drush:

DrupalGap es un kit de desarrollo de aplicaciones móviles de código abierto para Aplicaciones Web basadas en Drupal. Se utiliza para crear aplicaciones móviles para Estrategias Web con Drupal.

Este proyecto integra de manera efectiva: Drupal, PhoneGap, jQuery Mobile y jDrupal.

Página del proyecto: drupalgap.org

Para más información consulte:

Instalación de DrupalGap

drush dl services libraries views_datasource
drush dl drupalgap
drush en drupalgap

A continuación visite:

http://SITE/?q=admin/people/permissions#module-drupalgap

Seguidamente se deben habilitar los siguientes permisos:

  • DrupalGap
    Get vocabularies (anonymous user, authenticated user).
    Get terms (anonymous user, authenticated user).
  • Services
    Save file information (authenticated user).
    Get a system variable (anonymous user, authenticated user).
  • User
    View user profile (anonymous user, authenticated user).

Para verificar que la instalación se realizó de manera adecuada verifique la siguiente página:

http://SITE/?q=admin/config/drupalgap

Una manera fácil de comprender la idea

http://SITE/?q=drupalgap/node/NODE_ID.json

http://SITE/?q=drupalgap/node/1.json
http://SITE/?q=drupalgap/node/2.json
http://SITE/?q=drupalgap/node/3.json

Instalación de OpenJDK y Ant

Instalar OpenJDK y Ant, ambos son requeridos por Android-SDK:

sudo apt-get install openjdk-7-jdk ant -y

Instalación de Oracle JDK 7

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update

sudo apt-get install oracle-java7-installer
sudo apt-get install oracle-java7-set-default

sudo update-alternatives --config java
sudo update-alternatives --config javac

cat /etc/environment
cat .bashrc | grep 'PATH'

export PATH="$PATH:/usr/lib/jvm/java-7-oracle"
source .bashrc

which java
/usr/bin/java

java -version
java version "1.7.0_55"
Java(TM) SE Runtime Environment (build 1.7.0_55-b13)
Java HotSpot(TM) Server VM (build 24.55-b03, mixed mode)

Instalación de Android-SDK

Primero bajar: Android SDK.

Seguidamente correr:

mkdir ~/android
mv ~/Downloads/adt-bundle-linux-x86-20140321.zip ~/android

cd ~/android
unzip adt-bundle-linux-x86-20140321.zip

ls -la adt-bundle-linux-*
adt-bundle-linux-x86-20140321

vim ~/.bashrc

export COMPOSER_HOME="/home/YOUR_USER/.composer/vendor/bin"
#
export JAVA_HOME="/usr/lib/jvm/java-7-oracle"
#
export ANDROID_HOME="/home/YOUR_USER/android/adt-bundle-linux-x86-20140321/sdk"
#
export PATH="$PATH:$COMPOSER_HOME:$JAVA_HOME:$ANDROID_HOME:$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools"

source .bashrc

printev ANDROID_HOME

printenv PATH

Instalación de node.js

node.js es una plataforma construida sobre “Chrome’s JavaScript runtime ” y permite desarrollar aplicaciones de red de manera fácil, rápida y escalable.

node.js utiliza un modelo dirigido por eventos que no bloquea I/O, esto lo hace ligero y eficiente, ideal para aplicaciones en tiempo real con datos intensivos que corren a través de dispositivos distribuidos.

cd
git clone https://github.com/joyent/node.git
cd node

git checkout v0.10.28

./configure && make && sudo make install

Actualizar node y npm

Es el gestor de paquetes para node.js, instala, publica y gestiona programas de node.

sudo npm update npm -g
sudo npm install n -g
sudo n stable

which node
/usr/local/bin/node

node -v
v0.10.28

which npm
/usr/local/bin/npm

npm -v
1.4.10

Instalación de Cordova

Apache Cordova es una plataforma para construir aplicaciones móviles usando HTML, CSS
y JavaScript. Es un conjunto de APIs de aparatos que permiten a los desarrolladores acceder a funciones nativas, por ejemplo, la cámara o el acelerómetro desde JavaScript. En Combinación con un “framework” de interfaz de usuario como jQuery Mobile, Dojo Mobile o Sencha Touch, es posible desarrollar una aplicación de teléfono inteligente desarrollada con sólo HTML,CSS y JavaScript.

sudo npm install -g cordova

which cordova
/usr/local/bin/cordova

cordova -v
3.4.1-0.1.0

Instalación de PhoneGap

Para crear aplicaciones que utilizan las tecnologías web que uno conoce y ama: HTML, CSS y JavaScript. PhoneGap es un “framework” libre y de código abierto que permite crear aplicaciones móviles utilizando Web APIs estandarizados para las plataformas que más interesan, por ejemplo: Android & IOS.

sudo npm install -g phonegap

which phonegap

which phonegap
/usr/local/bin/phonegap

phonegap -v
3.4.0-0.19.21

Instalar un Android Target

android

API19

Momento del APK

Crear una aplicación vacía:

cd /var/www/SITE/htdocs

cordova create DrupalGapp com.drupalgap "DrupalGapp"

Le agregamos una plataforma y construimos/preparamos la app:

cd DrupalGapp

cordova platform add android
cordova build

Agregar el “Mobile Application Development Kit” a la app:

wget https://github.com/signalpoint/DrupalGap/archive/drupalgap_7.x-1.5-alpha.tar.gz

tar -xvpf drupalgap_7.x-1.5-alpha.tar.gz

mv DrupalGap-drupalgap_7.x-1.5-alpha/* www

rm -rf drupalgap_7.x* DrupalGap*

Por favor consulte:

Especificar la ruta del Sitio en Drupal:

cp www/app/default.settings.js www/app/settings.js

vi www/app/settings.js

'site_path':'http://127.0.0.1'

Agregar algunos plugins:

cordova plugin add org.apache.cordova.console org.apache.cordova.device org.apache.cordova.dialogs org.apache.cordova.file org.apache.cordova.inappbrowser org.apache.cordova.network-information

cordova plugin add org.apache.cordova.camera org.apache.cordova.geolocation

Correr la app:

cordova build – Para empaquetar el apk.

cordova run android – Para empaquetar el .apk e instalar en cualquier aparato detectado por adb.

cordova build
cordova run android

ripple

Para más información:

Tema RWD basado en “Omega Base Theme”

Realmente no me gusta mucho Drupal, en lo personal me parece más simple e interesante WordPress. Pero me dió curiosidad experimentar, por ejemplo, con Drush:

Importante: No es recomendable “hackear” ni módulos, ni temas del núcleo o contribuidos.

Hay una serie de temas que ofrecen una función más allá de la apariencia inmediata y la sensación, son temas que tienen la intención de ser usados como sub-temas.

Estos tipos de temas se conocen como: Temas Base.

“Responsive Design – Responsive Grid”

Antes de continuar: Responsive Web Design no es una tendencia emergente en Diseño Web, pero con la cantidad constante y creciente de aparatos móviles o de navegación que se usan en la calle, RWD es un tema que no puede ser ignorado.

Responsive Web Design se basa en la idea de que un Sitio Web debe adaptarse tanto como sea posible a cualquier dispositivo en el que se está navegando.

Omega Base Theme

Vamos a usar el tema Omega, parece tener una buena reseña en:

http://drupal.org/project/html5_tools

lo que significa que es una buena elección para basarnos en un tema HTML5.

cd /var/www/SITE/htdocs/

drush rl html5_tools
drush dl html5_tools
drush en html5_tools

drush rl omega
drush dl omega
drush en omega

drush rl omega_tools
drush dl omega_tools-7.x-4.x-dev
drush en omega_tools

Ahora podemos generar el sub-tema utilizando Drush:

drush omega-wizard

Seguidamente se puede verificar que el sub-tema basado en Omega está disponible y habilitado:

http://SITE/?q=admin/appearance

Código PHP elegante con Sublime Text

Aunque ahora me considero un fiel usuario del editor Atom y todas sus bondades:

La fórmula es simple, para crear código limpio y consistente hay que seguir y aplicar las normas o estándares que cualquier proyecto o “framework” necesite.

PHPCS

PHP_CodeSniffer tokeniza PHP, JavaScript y CSS para detectar posibles violaciónes a un conjunto definido de normas de codificación.

Para más información: PHP_CodeSniffer

PHP_CodeSniffer es un script en PHP5 que tokeniza PHP, JavaScript y CSS para detectar posibles violaciónes de acuerdo a un estándar de codificación definido. Es una herramienta de desarrollo fundamental que garantiza que el código permanece limpio y consistente. También puede ayudar a prevenir algunos errores de semántica que son muy comunes por parte de los desarrolladores.

cat ~/.composer/composer.json

{
    "require": {
        "drush/drush": "dev-master"
    }
}

Instalación de PHP_CodeSniffer:

composer global require 'squizlabs/php_codesniffer=*'

phpcs --version

phpcs --help

cat ~/.composer/composer.json

{
    "require": {
        "drush/drush": "dev-master",
        "squizlabs/php_codesniffer": "*"
    }
}

Para conocer los estándares de codificación disponibles:

phpcs -i

“The installed coding standards are PEAR, PHPCS, PSR1, Zend, Squiz, PSR2 and MySource”

PHP-CS-FIXER

Optmizador de estándares de codificación:

Esta herramienta mejora la mayoría de los problemas que surgen del código, en especial cuando se quiere seguir los estándares de codificación de PHP tal y como los define los documentos PSR-1 y PSR-2.

De manera general, para minizar el caos, se recomienda realizar las mejoras de manera manual.

Instalación de PHP-CS-Fixer:

composer global require 'fabpot/php-cs-fixer=*'

php-cs-fixer self-update

cat ~/.composer/composer.json

{
    "require": {
        "drush/drush": "dev-master",
        "squizlabs/php_codesniffer": "*",
        "fabpot/php-cs-fixer": "*"
    }
}

PHPMD

PHPMD es un proyecto derivado de PHP Depend y pretende ser una herramienta equivalente a la herramienta de Java conocida PMD.

PHPMD puede verse como una aplicación frontend de uso fácil que permite ver el flujo de las métricas medidas por PHP Depend.

Instalación de PHPMD:

composer global require 'phpmd/phpmd=*'

cat ~/.composer/composer.json

{
    "require": {
        "drush/drush": "dev-master",
        "squizlabs/php_codesniffer": "*",
        "fabpot/php-cs-fixer": "*",
        "phpmd/phpmd": "*"
    }
}

phpmd

Instalación de Sublime Text

sudo add-apt-repository ppa:webupd8team/sublime-text-2

sudo apt-get update
sudo apt-get upgrade

sudo apt-get install sublime-text

Instalación del gestor de paquetes de Sublime Text

Se recomienda instalar el gestor de paquetes de Sublime: Package Manager.

Algunos paquetes interesantes para empezar:

  • AdvancedNewFile.
  • Auto Semi-Colon.
  • BracketHighlighter.
  • DocBlockr.
  • Drupal Project Autocomplete.
  • Drupal Snippets.
  • Git.
  • GitGutter.
  • Goto Documentation.
  • Goto Drupal API.
  • Phpcs.
  • Sass.
  • SublimeCodeIntel.
  • Terminal.
  • Theme – Soda.
  • TrailingSpaces.

Seguidamente, instale desde Sublime Text el paquete: Phpcs.

Agregar estándar de codificación Drupal

Por ejemplo, si se ocupa agregar el estándar de codificación de Drupal:

composer global require drupal/coder:\>7

cd ~/.composer/vendor/squizlabs/php_codesniffer/CodeSniffer/Standards

ln -s /home/USERNAME/.composer/vendor/drupal/coder/coder_sniffer/Drupal Drupal

Nota: Sustituir USERNAME por el nombre de usuario adecuado.

cat ~/.composer/composer.json

{
    "require": {
        "drush/drush": "dev-master",
        "squizlabs/php_codesniffer": "*",
        "fabpot/php-cs-fixer": "*",
        "phpmd/phpmd": "*",
        "drupal/coder": ">7"
    }
}
phpcs -i

“The installed coding standards are PEAR, PHPCS, PSR1, Drupal, Zend, Squiz, PSR2 and MySource”

Instalación del plugin PHPCS para Sublime Text

Por último configure el plugin PHPCS también desde Sublime Text. Por favor navegar a:

'Preferences' > 'Package Settings' > 'PHP Code Sniffer' > 'Settings - User'

y colocar el siguiente trozo de código de configuración:

{
    "extensions_to_execute": ["php","module","inc","install","test","profile","theme"],
    "phpcs_additional_args": {
        "--standard": "Drupal",
        "-n": ""
    },
    "phpcs_executable_path": "/home/USERNAME/.composer/vendor/bin/phpcs",
    "phpmd_executable_path": "/home/USERNAME/.composer/vendor/bin/phpmd",
    "php_cs_fixer_executable_path": "/home/USERNAME/.composer/vendor/bin/php-cs-fixer"
}

Se puede notar en la configuración:

"--standard": "PSR2"

que puede ser fácilmente configurable a algo como:

"--standard": "Drupal"

Nota: Recuerde sustituir USERNAME por el nombre de usuario adecuado.

'Preferences' > 'Package Settings' > 'PHP Code Sniffer' > 'Settings - User'

y colocar el siguiente trozo de código de configuración:


Configuración base para desarrollar para Drupal

'Preferences' > 'Settings - User'

y colocar el siguiente trozo de código de configuración:

{
	"color_scheme": "Packages/Color Scheme - Default/Monokai.tmTheme",
	"default_line_ending": "unix",
	"ensure_newline_at_eof_on_save": true,
	"fallback_encoding": "UTF-8",
	"font_size": 11.0,
	"ignored_packages":
	[
		"Vintage"
	],
	"rulers":
	[
		80
	],
	"shift_tab_unindent": true,
	"soda_classic_tabs": true,
	"soda_folder_icons": true,
	"tab_size": 2,
	"theme": "Soda Dark.sublime-theme",
	"translate_tabs_to_spaces": true,
	"trim_automatic_white_space": true,
	"trim_trailing_white_space_on_save": true,
	"use_tab_stops": true
}

Drush

Realmente no me gusta mucho Drupal, en lo personal me parece más simple e interesante WordPress. Pero me dió curiosidad experimentar, por ejemplo, con Drush:

Drush es un shell de línea de comandos y una interfaz de secuencias de comandos de Unix para Drupal. Si usted no está familiarizado con “shell scripting”, por favor consulte la documentación de su shell (por ejemplo, man bash) también puede leer un tutorial en línea (por ejemplo, la busque: “tutorial de bash”) esto sin duda le ayudará a sacar el máximo provecho de Drush.

El núcleo de Drush viene con una gran cantidad de comandos útiles para interactuar con código de módulos/temas/perfiles. De la misma manera, corre update.php, ejecuta consultas SQL y migraciones de Bases de Datos, además incluye utilidades misceláneas, por ejemplo, para correr cron o limpiar la memoria caché.

Instalación

composer global require drush/drush:dev-master

Sí y sólo sí $HOME/.composer/vendor/bin no se encuentra en $PATH:

echo $PATH

export PATH="$PATH:$HOME/.composer/vendor/bin"

source .bashrc

echo $PATH

Actualización

composer global update

drush status

PHP executable : /usr/bin/php
PHP configuration : /etc/php5/cli/php.ini
PHP OS : Linux
Drush version : 7.0-dev
Drush temp directory : /tmp

Limpiar todo el cache cuando estamos desarrollando:

cd /var/www/SITE/htdocs

drush cc all

Ambiente Educativo Virtual (aprendizaje en línea)

En toda organización o institución el activo más importante realmente no es el dinero o las donaciones, son el tiempo y el conocimiento (en un mundo ideal, diríamos: las personas son el activo más importante). Esto quiere decir que, el tiempo y el conocimiento bien administrados permiten generar dinero y otras iniciativas más importantes.

¿Por usted qué va a necesitar un Ambiente Educativo Virtual?

De las diversas respuestas que existen, las tres más importantes son para permitir la:

  • Educación a distancia o para gestionar una base de conocimiento que se pueda mejorar de manera continua.
  • Transmisión del conocimiento a sus coloboradores sobre los precesos internos y externos que conforman la razón de ser de su organización.
  • Formación de otras personas o grupos en diversos temas, por ejemplo: derechos humanos, cambio climático, protección del patrimonio, equidad y género, turismo rural, tecnologías libres, etc.

Un Ambiente Educativo Virtual, es un sistema de gestión de cursos, que ayuda a los Tutores a crear comunidades de aprendizaje en línea. Este tipo de plataforma tecnológica también se conoce como LMS (Learning Management System).

Basado en Moodle

Basado en Moodle

Es un Sistema de Aprendizaje en Línea (accesible en cualquier momento, desde cualquier lugar) diseñado sobre las ideas del constructivismo. Bajo la perspectiva constructivista, se ve a los Estudiantes participando activamente en la construcción de nuevas ideas y significados.

Constructivismo social

Una enseñanza con enfoque constructivista permite que los estudiantes puedan: analizar, investigar, colaborar, compartir, construir y generar conocimiento basándose en lo que ya saben.

Pedagogía

Algunos de los principios del constructivismo son:

  • Los estudiantes van a clases con una visión del mundo pre-establecida, formada por años de previa experiencia y aprendizaje.
  • A pesar de que lo envuelve, la visión del mundo de un estudiante filtra todas las experiencias y afecta sus interpretaciones adquiridas.
  • Cambiar la visión del mundo de estudiante requiere de trabajo.
  • Los estudiantes aprenden unos de otros, así como el profesor.
  • Los estudiantes aprenden mejor haciendo.
  • Permitir la creación de oportunidades para todos y todas tiene una voz. Una voz que promueve la construcción de nuevas ideas.

Características de la gestión de cursos

La creación de cursos es administrada por los Tutores. Los cursos se pueden configurar de manera:

  • Semanal (cada semana hay recursos y actividades nuevas).
  • Temática (comprender los tema no depende de una fecha determinada).
  • Social (un hilo de conversación, como un foro).

En el Aula Virtual existen : Recursos y Actividades.

Los recursos son los elementos que permiten a los estudiantes acceder a diversos tipos de contenidos (enlaces a páginas Web, documentos a bajar, textos a leer).

Mientras que las actividades requieren  que el estudiante realice algún proceso basado en los recursos que el Tutor haya compartido.

Actividades que se pueden administrar para un curso

Consultas

Son preguntas elaboradas por el tutor con una cierta cantidad de opciones, de las que el estudiante debe elegir una respuesta. Puede ser usado para conocer el sentimiento del grupo sobre el curso o para conocer lo que entiende el grupo sobre algún tema o idea.

Cuestionarios

Permite al estudiante responder a los temas diseñados por el tutor. Las posibles respuestas pueden ser de: opción múltiple, falso o verdadero y respuesta corta. Donde cada intento de respuesta puede ser calificado de manera automática.

Encuesta

Provee una serie de instrumentos que el tutor puede usar para analizar y estimular el aprendizaje en su curso. Puede ser utilizado para conocer el punto de vista de los estudiantes y para reflexionar sobre su práctica educativa.

Etiquetas

Es una anotación que los profesores realizan de forma intercalada entre el resto de las actividades y los recursos, con el objetivo de aclarar algún tema o aspecto.

Foros

Ideales para propiciar el debate dentro de un curso y alrededor de algún aspecto o tema. Si así lo considera necesario, un profesor puede evaluar la participación de sus estudiantes en la discusión.

Los estudiantes que se suscriben y participan de un foro, van a recibir mensajes de correo electrónico con el hilo de la discusión.

Si así lo considera necesario, un tutor puede inscribir de manera automática a todos los estudiantes de su curso en marcha.

Glosarios

Permite la gestión de un glosario de términos o significados, el cual puede ser construido tanto por los tutores, como por los estudiantes.

Materiales

Permite acceder a la información que el tutor quiere entregar a sus alumnos. Pueden ser documentos digitales, páginas editadas directamente en el Aula Virtual o páginas Web externas que se relacionen con los objetivos o temas del curso.

Talleres

Utiles para propiciar el trabajo en grupo. Permite evaluar los proyectos ya sea por parte del tutor o por parte de los estudiantes.

Tareas

Con este instrumento el tutor asigna los trabajos a realizar. Para que los estudiantes adjunten y presenten sus ensayos o proyectos. Las tareas típicas incluyen ensayos, proyectos, fotografías, etc. Este módulo cuenta con capacidad de calificación.

Lecciones

Son actividades que permiten al estudiante repasar los conceptos o temas que el profesor considere necesarios de reforzar. A medida que un estudiante responde de manera exitosa a las preguntas, podrá avanzar por un camino u otro.

Entrenamiento

Las personas administradoras adecuadas y de confianza dentro de su organización (tutores del Aula Virtual) reciben una capacitación presencial y constructiva de cuatro días, de tres horas cada día, sobre las características y herramientas del sistema. Más los materiales de apoyo esenciales para gestionar de manera segura y rápida, en cualquier momento y de forma organizada, las diversos cursos en línea que consideren necesarios.

Garantía

Un año de actualizaciones y mantenimiento de la seguridad y la alta disponibilidad del sistema. Más el acceso privado a respaldos semanales de todos los archivos y la base de datos que conformen todo el sistema.

Boletines electrónicos de alta distribución (newsletter)

¿Cómo difundir un mensaje de manera segmentada a una gran cantidad de personas?

Por favor imagine el siguiente escenario:

  • Usted gestiona dos listas de correo, una lista contiene en base de datos las direcciones de correo electrónico de las personas interesadas en temas relacionados al Medio Ambiente. La otra lista contiene en base de datos las direcciones de correo electrónico de las personas interesadas en temas relacionados a la Cultura.
  • En una lista tiene 5.000 personas suscritas y en la otra lista tiene 20.000 personas suscritas.

… y usted necesita enviar un mensaje a todas las personas:

  • Ubicadas geográficamente en Costa Rica y El Salvador.
  • Del género femenino.
  • Interesadas en los subtemas de: Cambio climático (Medio Ambiente) y de Turismo Cultural (Cultura).

El anterior, es el concepto de enviar el mensaje adecuado, a las personas adecudas, en el momento adecuado.

Por lo tanto, un mensaje puede ser enviado a la combinación de un segmento de las personas suscritas o simplemente, también puede ser enviado a todas las direcciones de correo electrónico de las personas suscritas a cualquier lista de correo, bajo cualquier atributo (nombre, país, género, temás de interés, gustos, etc).

Basado en PHPList

Basado en PHPList

La solución: Un sistema de boletín electrónico de alta distribución.

Como en una hora existen 3600 segundos, se puede calcular que: con 12 horas de antelación, usted podría enviar un mensaje a 43200 (aproximado) direcciones de correo electrónico. Por eso se llama de alta distribución, porque usted puede manejar una cola grande de direcciones de correo electrónico suscritas en su base de datos.
(12 horas X 3600 segundos = 43200 mensajes).

Las principales bondades y características del sistema

  • Es un sistema unidireccional para difundir y entregar boletines electrónicos de noticias, eventos, anuncios, publicidad y muchos otros usos más.
  • No es necesario que usted instale aplicaciones adicionales en su computadora. Solamente debe contar con un navegador Web actualizado y una conexión activa al Internet para escribir y enviar los mensajes masivos. De esta manera, usted podrá realizar los envíos masivos desde cualquier ubicación con acceso al Internet.
  • Con el envío programado usted decide en que momento (¿cuándo?) debe ser enviado el mensaje. El sistema se encargará de hacer el envío por usted, de una manera inteligente y automática.
  • Olvide el problema de los mensajes duplicados. El sistema gestiona la entrega de mensajes a través de una cola de mensajes automática e inteligente, asegurando que cada dirección de correo electrónico solamente recibe el mensaje del boletín electrónico una vez, incluso si está suscrito a más de una lista de correo.
  • Se pueden enviar una página Web como cuerpo del mensaje. Usted puede colocar la dirección de una página Web, y el sistema se encargará de enviar la página Web dentro del mensaje.
  • RSS Feeds. Se pueden enviar automáticamente a una lista de correo diaria, semanal o mensual.
  • El sistema permite ser configurado para permanecer enviando los mensajes aún cuando usted haya apagado su computadora.
  • Además permite importar direcciones de correo electrónico desde archivos en formato CSV. Si usted cuenta con archivos en formato CSV, con varias direcciones de correo electrónico, usted podrá importar los datos dentro del sistema de una manera fácil, siguiendo un simple y fácil proceso recomendado.

Varias páginas de suscripción y plantillas

  • Múltiples páginas de suscripción permiten que usted escoja varias combinaciones de plantillas, idiomas y atributos de personas usuarias y listas de correo.
  • Múltiples páginas de suscripción pueden integrar el sistema con uno o varios sitios Web.
  • Las plantillas que permiten hacer un mensaje más atractivo, son completamente personalizables. El sistema permite su integración de una manera fácil e intuitiva.
www.email-standards.org

www.email-standards.org

Mensajes atractivos (con estilo de texto e imágenes)

  • Al escribir mensajes de correo electrónico, estos se pueden crear con el editor incorporado del sistema, el cual presenta una interfaz amigable que permite asignar al texto un formato enriquecido (HTML).
  • Las personas suscriptoras pueden tener la posibilidad de elegir en que formato desean recibir los mensajes: Mensajes de texto, Mensajes en HTML (formato enriquecido). Usted decide si las personas suscriptoras pueden o no pueden elegir el formato.

Personalización y atributos

  • Se pueden configurar atributos como nombre, país, género, temas de interés y otra información que usted necesite obtener de las personas suscritas.
  • Contenido específico: usted puede usar los atributos para enviar mensajes personalizados, por ejemplo, usando el verdadero nombre de la persona suscrita (No al simple: Hola Usted).

Hechos reales

No existe una fórmula mágica que asegure al cien por ciento que un mensaje de correo electrónico masivo sea entregado a todas las direcciones de correo electrónico de las personas suscritas. Esto debido a que plataformas tecnologicas de terceros pueden estar llenas, suspendidas, mal configuradas o ya no existen. También debido a politícas de terceros con respecto a la cantidad de mensajes que permiten por hora y otras limitaciones que establecen al gusto en el momento que quieran. Además existen ciertas restricciones de red, filtros y software de anti-virus y anti-spam que pueden existir del lado de la persona receptora, que muchas veces pueden “perder” o clasificar mal mensajes que algunas veces no son spam o un virus.

Sin embargo el sistema instalado y configurado de la manera adecuada y recomendada, puede funcionar de una manera efectiva en el mejor de los casos.

Libertad de elección

No se debe de enviar mensajes de correo electrónico a las personas que no hayan solicitado y confirmado su suscripción a una lista de correo.

Es muy importante que su lista o conjunto de listas de correo electrónico sea óptima, esto quiere decir que sean direcciones de correo electrónico de las personas o conexiones que son:

  • Amistades o familiares.
  • Colaboran o trabajan con usted.
  • Cooperantes, patrocinadores o donantes de sus proyectos.
  • Afiliadas o asociadas a su razón de ser (organizacional o personal).
  • Suscritas porque así lo solicitaron con el sistema por Web y lo confirmaron por correo electrónico.

Por esta razón el sistema provee páginas de suscripción y también:

  • Preferencias al gusto para las personas suscritas. Cada mensaje de correo electrónico contiene direcciones para que las personas suscritas que reciben el mensaje puedan actualizar sus preferencias (datos personales) o cancelar su suscripción a una o varias listas de correo.
  • Si las personas suscritas pueden actualizar su propia información, entonces su base de datos base de datos estará al día. Además, las personas suscrita pueden cambiar su dirección de correo electrónico si así lo necesitan.

Cabe mencionar que hacer spam es algo considerado como “malvado”, además:

  • Es anti-ético, también viola la privacidad y la libertad de elección (habla mal de usted o su organización).
  • Hace que la confianza y alguna posible fidelidad en su marca o ideas sea puesta en duda.
  • Puede traerle problemas legales por invasión de la privacidad y otros temas.

Se llama spam, correo basura o sms basura a los mensajes no solicitados, no deseados o de remitente desconocido, habitualmente de tipo publicitario, enviados en grandes cantidades (incluso masivas) que perjudican de alguna o varias maneras al receptor. La acción de enviar dichos mensajes se denomina spamming.

Wikipedia dice: http://es.wikipedia.org/wiki/Spam

Aspectos de la gestión

  • Varias personas pueden administrar las listas de correo. Una persona con el rol de super-administración puede asignar a personas con el rol de administración a otras listas de correo. Cada persona con el rol de administración puede gestionar la información de la o las listas de correo electrónico bajo su gestión y la información de sus personas suscritas.
  • La persona con rol de super-dministración puede “preparar” de manera previa los mensajes que podrán enviar las otras personas con el rol de administración.

Lo que funciona de manera automática

  • Procesamiento de rebotes:
    Procura mantener su base de datos limpia de direcciones de correo electrónico que hayan dejado de existir.
  • Procesamiento por lotes:
    Establece el número máximo de mensajes enviados en un periodo de tiempo determinado. Aproximadamente entre 3000 y 3600 mensajes por hora (debido a que en una hora hay 3600 segundos).
  • “Throttling”:
    Se puede limitar la carga en el servidor para que este no desborde sus recursos.
  • “Throttling” de dominios:
    Limita el número de mensajes de correo electrónico a dominios específicos, esto para mantener una relación amable con otros servicios donde sus políticas así lo exigen (Google, Live, Yahoo!, etc).

Aspectos técnicos de la plataforma del servidor y del sistema

No se preocupe por los términos técnicos, con gusto se los podemos explicar y detallar de manera presencial. Todo lo siguiente en este punto, se instala y se configura para usted.

Servidor LAMP

Servidor LAMP

El sistema funciona bajo la plataforma de servidor LAMP conformada por:

  • Un servidor Web modular como HTTP Apache sobre un sistema operativo Unix o cualquier sabor de Linux.
  • El lenguaje de programación interpretado llamado PHP; ya sea como módulo o como fast-cgi de HTTP Apache.
  • La extensión IMAP y sus funciones en PHP.
  • Un sistema de gestión de base de datos relacional, multi-hilo y multi-usuario como MySQL.
  • El sistema de gestión de boletines electrónicos unidireccional y de alta distribucion a utlizar es conocido como: PHPList.

El sistema PHPList es de código abierto, bajo el tipo de garantía y de licencia GPL.

Debe existir una cuenta de correo electrónico llamada “postmaster”. Esta cuenta o alias de correo electrónico es indispensable para recoger mensajes de notificación o de advertencia cuando el propio sistema u otras personas consideren que experimentan algún problema con el servicio de correo electrónico o con el MTA utilizado.

Cuando una infraestructura, tecnología, organización o persona envía mensajes de correo electrónico masivos no solicitados a personas que nunca confirmaron de manera voluntaria el gusto por recibir esa información, están cometiendo un tipo de abuso en contra de la ética del uso del servicio de correo electrónico; por esta razón debe existir una cuenta de correo electrónico llamada “abuse” que permita a las personas afectadas realizar una queja y re-enviar el mensaje de correo que consideran no solicitado.

El envío de mensajes de correo electrónico se debe realizar mediante el protocolo de SMTP, el cuál debe contar con la configuración y la protección de SPF; esto para evitar falsas identidades.

Para recibir y procesar los mensajes de correo electrónico que no puedan ser entregados de manera satisfactoria en tres o más ocasiones a una misma dirección de correo electrónico, debe existir una cuenta de correo electrónico llamada “bounces” y debe existir un proceso que realice la desuscripción automática de la dirección de correo electrónico que supera los tres o más rebotes. Para que el proceso automático de desuscripción funcione con éxito, PHP va a usar la extensión IMAP.

Para realizar el envío masivo de mensajes debe existir una cuenta de correo electrónico llamada “no_reply” o “no_responder” la cual debe realizar el envío mediante el protocolo SMTP.

El nombre de dominio en el cual sirve el boletín electrónico debe ser distinto al del sitio Web principal (pero muy relacionado). Además debe estar asociado a un IP único y debe utilizar dos servicios de DNS (primario y secundario) totalmente distintos.

Cron de Unix – Como existe un límite de recepción y envío de mensajes de correo electrónico por hora (generalmente 3600), debe existir un proceso que cada hora retome y procese la cola de envío del boletín electrónico, y que lo haga de manera automática.

Entrenamiento

Las personas administradoras adecuadas y de confianza dentro de su organización (administradores de los boletines electrónicos de alta distribución) reciben una capacitación presencial y constructiva de  tres días de tres horas, sobre las características y herramientas del sistema. Más los materiales de apoyo esenciales para gestionar de manera segura y rápida, en cualquier momento y de forma organizada, los diversos boletines y envíos masivos que consideren necesarias.

Garantía

Un año de actualizaciones y mantenimiento de la seguridad y la alta disponibilidad del sistema. Más el acceso privado a respaldos semanales de todos los archivos y la base de datos que conformen todo el sistema.