martes, 30 de agosto de 2011

Programación en Java: Definiciones e instalación del JDK


En los próximos días y por motivos profesionales voy a tener que meterme (después de 10 años sin tocarlo) al mundo Java por lo que voy a preparar de vez en cuando algunos documentos sobre este lenguaje que aprovecharé para colgarlos por si a alguien más le sirve de ayuda. Hoy uno sobre la instalación del JDK, la base para programar. Primero unas definiciones (las podéis encontrar más desarrolladas en la Wikipedia).

Java SE: Standar Edition.
Java EE: Enterprise Edition. Enfocado al mundo empresarial. Para trabajo con arquitecturas cliente-servidor entre otros.
Java ME: Micro Edition (dispositivos móviles). Reducido y muy optimizado para equipos con bajos recursos.
JRE: Java Runtime Environment. Es el conjunto de elementos básicos para poder ejecutar una aplicación Java. Al menos se compone de la JVM (Máquina virtual Java) y una serie de paquetes con clases (API). Tanto la JVM como la API deben estar en la misma versión para que no haya inconsistencias. Por supuesto con el JRE sólo se pueden ejecutar aplicaciones, para construirlas es necesario el JDK.
JDK: Java Development Kit. Conjunto de paquetes que permiten crear aplicaciones en Java. Además de incluir el JRE dispone también del compilador (javac), del depurador (jdb) y del creador de documentos (javadoc).
Servlets: Componentes de un servidor para servir peticiones (en Java EE).
Applets: Aplicaciones incrustadas en clientes (navegadores) Web. Podrían incrustarse en otras aplicaciones.
MIDlet: Aplicación similar al applet pero realizada con el Java ME.
JSP: Java Server Pages: Tecnología similar a los servlets pero más cómoda a la hora de generar páginas web dinámicamente del lado del servidor. Viene incluido también en el Java EE y requiere, lógicamente, de un servidor capaz de gestionar las JSP (como el Tomcat). Es una alternativa al ASP o al PHP.
AWT: Abstract Window Toolkit. El primer paquete de componentes gráficos para realizar aplicaciones en Java. Hoy se usa para tareas de bajo nivel de otras clases gráficas. Algunos programadores la siguen usando porque produce que las aplicaciones tengan el aspecto gráfico del sistema nativo. Pero sigue siendo muy limitado pues dispone de aquellos elementos comunes en todos los sistemas operativos. Además no funciona bien del todo.
Swing: El sistema actual que mediante Java 2D realiza sus propios dibujos (en lugar de hacerlo el SO con el awt). Al ser independiente del SO, las aplicaciones tienen el mismo aspecto independientemente del equipo en el que se ejecuten.
SWT: Standart Widgets Toolkit. Sistema gráfico que busca la eficacia y mejora de Swing pero a su vez intenta que en cada plataforma se vean las aplicaciones como nativas. Esto provoca que las SWT son distintas para cada plataforma. Además SWT no pertenece a Oracle, está desarrollado por el grupo de Eclipse y lleva un ritmo distintos y además funciona de forma más o menos eficiente dependiendo de la plataforma.
JIT: Just In Time compiler. Para compilar a código máquina nativo y que la aplicación sea más eficiente.

 

Instalación del JDK

Linux (Ubuntu)
Si ya tenemos el JRE instalado debemos comprobar la versión del mismo para instalar el mismo JDK. Para ello:
$ java -version
la salida será algo similar a esto:
java version "1.6.0_22"
OpenJDK Runtime Environment (IcedTea6 1.10.2) (6b22-1.10.2-0ubuntu1~11.04.1)
OpenJDK Server VM (build 20.0-b11, mixed mode)
La primera línea es la versión geérica de Java.
La segunda la versión y “modelo” del JRE. En este caso se puede ver que no es el JRE de Java si no que es el OpenJDK que es un “Java alternativo” que cumple todas las especificaciones de Java pero es Open Source.
Finalmente la tercera línea es la JVM usada. También existen varias tanto de código abierto como privativo.
Debemos instalar la misma versión del JDK, es decir, la 1.6 ó, quitando el 1, la versión 6 que es como se suelen denominar a las versiones de Java.
Por tanto:
$ sudo apt-get install openjdk-6-jdk
Si fuera otra versión habría que sustituir el número correspondiente.
Si por algún motivo no estuviera instalado el JRE, al instalar el JDK ya instalaría el JRE automáticamente.
Windows (válido también para Linux si se desea la versión de Oracle)
En la web http://java.com/es/download/ se puede bajar la versión recomendada del JRE o comprobar si ya se tiene instalado. También abriendo una consola y usando el comando:
c:\>java -version
nos dirá la versión instalada.
Si además queremos instalar el JDK podemos acceder a la página:
y bajarnos la versión en concordancia con el JRE que tenemos instalado. Si no tuviéramos ninguno desde esta Web también se puede descargar.
Una vez descargado se ejecuta (son necesarios permisos de administración) y se siguen los pasos de instalación.
Finalmente para poder ejecutar el compilador desde cualquier directorio del disco duro es necesario cambiar las variables de entorno. Para ello se pulsa en
Inicio → Panel de Control → Sistema.
Si estás en Windows 7 además debes pulsar en Configuración Avanzada de Sistema (a la izquierda).
En la nueva ventana se pulsa en
Opciones Avanzadas → Variables de entorno
Se edita la variable de entorno Path del sistema (las inferiores) y se le añade:
;C:\Program Files\Java\jdk1.6.0_27\bin
o el directorio equivalente según donde se haya instalado y la versión instalada.
Mac OS X
No es necesario instalar nada. Ya viene por defecto tanto el JRE como el JDK





sábado, 6 de agosto de 2011

Migración Moodle a servidor de hosting

En ocasiones es necesario migrar el servidor moodle pero a un servidor externo al nuestro. Por ejemplo al servidor donde tenemos contratado el hosting. Esto tiene grandes ventajas en cuanto a que no hay que preocuparse de un montón de tareas de mantenimiento pero tiene la problemática de que no tenemos permisos para hacer lo que nos de la gana. Voy a citar y explicar brevemente los pasos que he seguido a la hora de realizar la migración del aula virtual que gestiono. Mi servidor origen es Ubuntu Server 9.04 y uso Apache y MySql. El destino es similar: también Linux con MySql.

En la parte de backups me basé esencialmente en el blog
http://jgdu.blogspot.com/2008/08/migrando-moodle-otro-servidor.html

Lo primero es avisar a la comunidad del aula virtual que se va a hacer la migración y que durante la misma va a estar inhabilitado moodle. En el caso de no hacerlo y no inhabilitarlo, el problema es que si alguien hace algún cambio posterior este no va a verse reflejado en la migración.

Lo primero es conocer la situación en nuestro servidor origen. Hay dos directorios implicados:
/var/www/moodle
/var/moodledata

o los equivalentes si en la instalación original usamos otros. Además tendremos también la base de datos bajo MySql. Realizaremos pues la copia de seguridad de los directorios y la base de datos (puede ser necesario aplicar sudo al realizar algunas de las siguientes acciones dependiendo de cómo estén configurados los permisos).

tar cvvf moodle.tar /var/www/moodle
tar cvvf moodledata.tar /var/moodledata
mysqldump -pXXXX -u NombreUsuario NombreBDMoodle > moodledb.sql

En el último caso, para la base de datos, el parámetro -p es la password de la base de datos, el -u es el nombre de usuario de la base de datos y finalmente NombreBDMoodle el nombre de la BD que hayamos dado en MySql. Estos datos se pueden ver en el archivo moodle/config.php. El nombre del backup (en este caso moodledb.sql) es indiferente.

Si algunos de los archivos de backup lo hemos creado con sudo puede que no tengamos permisos para copiarlo por lo que conviene hacer un chown para ser nosotros el propietario de dicho archivo.

Ya tenemos los tres archivo. Ahora, a continuación, hay que llevarlos al servidor donde tenemos contratado el hosting. Aquí las posibilidades son varias, se puede usar ftp o scp dependiendo de nuestras preferencias y de las posibilidades que nos de el hosting que tenemos contratado. En este texto voy a explicarlo todo mediante scp y ssh. Si la empresa que mantiene el hosting no tiene este servicio activado hay que pedirle que lo activen o que nos den otras opciones para subir, descomprimir los archivos y volcar la base de datos.

Para copiar los archivos (suponiendo que moodle.tar, moodledata.tar y moodledb.sql son los únicos que empiezan por la palabra moodle) realizamos la copia:

scp moodle* usuario@servidor_hosting:~

Esta operación puede ser lenta si nuestro curso ocupa varios gigas (esto ocurre principalmente en el archivo moodledata.tar) y nuestra conexión de subida es lenta.

Antes de hacer esto hay que tener en cuenta el espacio que tengamos en nuestro servidor de hosting y contratar más si fuera necesario o en previsión del futuro uso que se le vaya a dar.

Una vez que tenemos en el servidor remoto estos archivos hay que descomprimirlos y volcar la base de datos. Empezamos por esto último. Para volcar la base de datos primero tiene que existir en el servidor MySql. Por tanto mediante la herramienta que nos den en el hosting se debe crear una nueva base de datos con su usuario y contraseña. Aquí podemos encontrar el primer problema si en su día usábamos nombres "estándar" para la base de datos y para el usuario ya que como en el hosting se comparten un montón de bases de datos puede que ya existan y nos de ese error. No hay problema simplemente se le da otro nombre a la base de datos (Por ejemplo moodle_nombre_curso) y al usuario (por ejemplo: user_curso).

Si ya le hemos creado nos vamos al terminal y conectamos al servidor de hosting mediante ssh. Una vez conectados escribimos el siguiente comando:

mysql -u user_curso -pXXXXXXX moodle_nombre_curso < moodledb.sql

Esto vuelca nuestra base de datos antigua en la nueva. Hemos cambiado nombres pero lo reconfguraremos en nuestro moodle.

Un problema que nos podemos encontrar es que nuestra versión de MySql sea más nueva que la del servidor de hosting. Un error típico que da el comando anterior en este caso es que cierta variable no existe. En este caso no queda otro remedio que pedirle a nuestro servicio de hosting que nos actualice MySql a una versión más reciente. Existen otras formas de volcado pero o no las he investigado o no me han funcionado (por ejemplo volcar con mysqldump en versión 4.0), aunque quizá lo hice mal. En cualquier caso si el hosting es serio os hará este cambio de versión en poco tiempo (en mi caso tengo que agradecer al personal técnico de dinahosting que lo hicieron fenomenal).

Lo siguiente es descomprimir los archivos moodle.tar y moodledata.tar. El primero no es problema, hay que descomprimirlo en ~/www/moodle (o el directorio deseado o que nos haya cedido el servicio de hosting). El segundo no podemos descomprimirlo en su directorio habitual /var/moodledata porque lo habitual es que no tengamos permisos. Pero no es problema, vamos a descomprimirlo en ~/moodledata y luego ya reconfiguraremos moodle. Los comandos estando en el directorio de usuario:

tar xvvf moodle.tar
tar xvvf moodledata.tar

Al descomprimir es posible que haya mantenido la estructura original de directorios por lo que podéis usar mv para recolocar. Al final interesa que en ~/www/moodle/ esté el contenido del moodle.tar y en ~/moodledata/ el de moodledata.tar.

Lo siguiente es modificar el archivo moodle/config.php por los cambios que hemos hecho en la base de datos y en los directorios. Así que lo editamos con vim, nano, emacs o el editor que dispongamos y tendremos que actualizar las lineas:

$CFG->dbname    = 'moodle_nombre_curso';
$CFG->dbuser    = 'user_curso';
$CFG->dbpass    = 'XXXXXXX';  //Esta sólo si la habéis cambiado, si no  pues nada
$CFG->wwwroot   = 'http://nombrehosting/moodle';
$CFG->dirroot   = '/home/usuariohosting/www/moodle';
$CFG->dataroot  = '/home/usuariohosting/moodledata';

Por supuesto esto es orientativo y dependerá de como está configurado vuestro hosting y de qué directorios hayáis usado, pero os debería valer de guía.

En el caso de que cometiérais el error de tener moodle en el servidor viejo en hhtps y ahora queréis dejarlo normal y no os deja entrar podéis ir a la base de datos con phpMyAdmin y buscáis la tabla mdl_config, allí la entrada loginhttps estará a 1, simplemente la ponéis a 0 y listo.  En este caso es importante que $CFG->wwwroot esté con http y no con https.

Y si no me he olvidado de nada, poniendo en el navegador

http://nombrehosting/moodle

debería de funcionar todo tal cual lo teníais en el servidor original. Siempre podéis hacer la redirección de alguna dirección web que os interese.

Si habéis tenido problemas de permisos quizá tengáis que hacer cambios de usuario en los archivos.

Todo esto es orientativo y basado en mi caso particular, aunque creo que es relativamente fácil adaptarlo a otros casos. Siempre debéis de tener copia de seguridad de todo y estar en contacto con el servicio técnico del hosting para solucionar cualquier problema/duda.

martes, 31 de mayo de 2011

Zoom en iPhone

Supongo que muchos ya lo sabrán pero yo llevaba unos meses con el iPhone y usando la cámara de forma totalmente estándar. Es decir, activo cámara-saco foto. Punto. Pues resulta que puedo hacer un par de cosas la mar de interesantes:

- Zoom: acercar o alejar la imagen. No deja de ser zoom digital, ojo.
- Selección del punto de luz de referencia: si la cámara selecciona automáticamente un punto de luz para regular la lumnosidad y no nos gusta como queda (sobreexpuesta o subexpuesta) se puede seleccionar otro punto.

Para hacer ambas cosas simplemente lo que hay que hacer es pulsar en la pantalla y sale por un lado una barra de Zoom en la parte inferior y por otro si toco con el dedo en un punto de la pantalla se pone ahí el famoso cuadrado dónde se toma la referencia para regular automáticamente la luminosidad.