jueves, 13 de octubre de 2011

Ha fallecido Dennis Ritchie


En 1972 Dennis Ritchie creó el lenguaje de alto nivel C con el que desarrolló posteriormente el sistema operativo Unix junto con Ken Thompson.
Podría decirse que Dennis Ritchie fue el padre de la informática moderna puesto que C sirvió como base de otros lenguajes modernos como Java y Unix fué el pie para desarrollar los sistemas operativos actuales.
Richie falleció hoy a los 70 años de edad a causa de una enfermedad.
DEP.

jueves, 6 de octubre de 2011

Ha fallecido Steve Jobs

Esta mañana al encender mi Mac me he encontrado con esta imagen. Es cierto eso que dicen que una imagen vale más que mil palabras. Se me cortó la respiración al verla.


Tan solo un día después del lanzamiento del nuevo iphone 4s, Steve Jobs nos deja. Al final el cáncer le venció.
Es una de las pocas personas de las que se podría decir que ha hecho grandes cosas en la vida. Deja un gran legado y una marca muy onda en el mundo de las tecnologías.
Se ha ido un genio. ¿Qué será ahora de Apple sin el?

sábado, 25 de junio de 2011

Cómo instalar Oracle 10g Express Edition

A la hora de elegir una base de datos tenemos muchas alternativas: MySQL, Oracle, PostrgreSQL, etc. Como se suele decir, para gustos hay colores.

Si alguna vez habeis usado Oracle es posible que hayais tenido dificultades a la hora de instalarla, si no lo habíais hecho nunca antes. Para los que os interese esta base de datos, pero no la hayais usando antes, yo os recomiendo una versión mucho más sencilla, tanto de instalar como de manejar, que es la 10g Express Edition. Evidentemente no es tan profesional como pueden ser otras versionesm ni tan potente, pero si os estais iniciando en este mundillo de las bases de datos y os interesa Oracle, sin duda esta versión es la idónea.

Para conseguirla os la podeis descargar de la pagina de Oracle. Al colocar el cursor sobre la pestaña Downloads se desplegará un menú con todos los productos que Oracle permite descargar clasificados por categorías. Dentro de Bases de Datos encontraremos la que nos interesa.


En la siguiente pagina os dejará elegir el sistema operativo (Windows o Linux).


Tras haber seleccionado la opción apropiada para nuestro sistema tendremos que aceptar el acuerdo de licencia para poder descargarla.


Y posteriormente seleccionaremos la base de datos que nos interesa según nuestras necesidades. La primera opción solo está en inglés, la segunda tiene más idiomas (entre ellos el español, está será la que seleccionemos) y la ultima es un cliente para poder acceder a nuestra base de datos desde otras maquinas.


Una vez elegida la base de datos llega una parte que no nos suele gustar, pero que Oracle obliga a hacer en todas sus descargas: Registrarnos. Es obligatorio, sino no podremos bajar nada de la pagina de Oracle. Si ya tenéis una cuenta, como es mi caso, no es necesario el registro, bastará con iniciar sesión. Si no la tenéis registraros y después iniciad sesión.


Una vez iniciada la sesión comenzará automáticamente la descarga. Pulsaremos en guardar para que se descargue en la ubicación que le indiquemos.


Tras seleccionar el directorio donde queremos que se guarde comenzará la descarga que tardará algunos minutos


Una vez descargada, ya podemos comenzar la instalación. Buscamos el archivo que se ha descargado y hacemos doble click en el. Si os ocurre lo que me ha pasado a mi, que no me dejaba abrirlo porque no sabía con que programa asociarlo, cambiadle en nombre y añadir al final .exe, con eso sería suficiente. Después de abrir el archivo pincharemos en ejecutar en la ventana que se nos abre.


Comenzará a cargar el asistente de instalación, tardará unos segundos


Los pasos para instalar son muy sencillos, prácticamente siguiente, siguiente, siguiente...
La primera ventana que nos aparece es el mensaje de bienvenida al asistente de instalación. Pulsaremos en siguiente.


Después nos aparecerá el contrato de licencia. Lo aceptaremos y pulsaremos siguiente.


El siguiente paso es seleccionar el directorio donde queremos instalar Oracle. Podeis dejar por defecto el que viene o poner vostros el que querais. Yo dejaré el que viene por defecto que es C:\oraclexe\. Pulsamos siguiente.


Este paso es muy importante, probablemente el más importante de toda la instalación. Aquí debéis elegir una contraseña para el administrador de la base de datos. Elegid una contraseña que luego recordéis puesto que sin ella no podréis conectaros cuando vayáis a usar la base de datos. Recordad que el administrador es SYS o SYSTEM. Tras elegir la contraseña pulsamos siguiente.


Antes de comenzar la instalación nos mostrará la información de los puertos necesaria para administrar la base de datos (8080 por defecto) y establecer las conexiones (1521 por defecto). Es posible que el puerto 8080 ya lo esté usando otra aplicación como puede ser un servidor web. Si esto nos llegase a ocurrir podremos cambiarlo.
Pulsamos instalar.


Comenzará la instalación. No suele tardar mucho, eso ya depende de vuestro ordenador.


Una vez instalado nos aparecerá un mensaje que así lo indique. Si nos fijamos aparece un tick en Iniciar la página inicial de la base de datos. Podemos dejarlo activado y al dar a terminar se arrancará el explorador donde se abrirá la pagina de administración de la base de datos.


Siempre que necesitemos realizar alguna tarea de administración tendremos que abrir esta página en el explorador. Podremos acceder a ella escribiendo http://localhost:8080 y una vez en ella podremos entrar con el usuario SYSTEM y la contraseña que configuramos durante la instalación de Oracle.


En un post posterior os explicaré con más detalle la administración de la base de datos.

viernes, 6 de mayo de 2011

Cómo configurar un objeto DataSource con GlassFish

Si estáis trabajando con aplicaciones web con servlets y bases de datos os puede resultar muy útil usar con contenedor de datos. En posts anteriores os expliqué como utilizar el Apache Tomcat. Existen otros contenedores como Weblogic de Oracle o GlassFish, entre otros.

En esta ocasión explicaré como configurar un Objeto DataSource con GlassFish server 3, que será muy útil a la hora de utilizar bases de datos en nuestra aplicación web.

Para acceder a la consola de administración* de GlassFish basta con escribir en el explorador: http://localhost:4848 (El puerto 4848 es el que se asigna por defecto cuando se instala, si lo habéis cambiado tendréis que poner el que definieseis).

Os aparecerá algo como esto:

En la parte izquierda aparece un menú con todas las opciones de administrador que ofrece GlassFish. En nuestro caso nos interesa configurar un recurso nuevo (un objeto DataSource) que usaremos con el API JDBC de Java por lo que seleccionaremos Recursos y dentro JDBC. Nos aparecerán dos directorios: Recursos JDBC y Conjunto de conexiones:


Conjunto de conexiones
El primer paso es crear un Conjunto de conexiones nuevo, por lo tanto seleccionaremos el segundo directorio. Nos aparecerán en el lado derecho todos los conjuntos de conexiones configurados en el servidor:


Para crear una nueva pulsamos en Nuevo... Nos aparecerá el primer paso de la configuracion:


En el campo nombre escribiremos el nombre que queramos darle al conjunto de conexiones y que más tarde usaremos para inicializar el DataSource.
En el Tipo de recurso seleccionaremos javax.sql.DataSource
Y por ultimo el Proveedor de la base de datos será el que vayamos a usar para nuestra aplicación web (Ej: Oracle, MySql, Postgresql, etc.)
Una vez fijados los campos, en la esquina superior derecha pincharemos en Siguiente y nos aparecerá el paso 2 para continuar con la configuración del conjunto de conexiones:

Configuración general:


Activaremos el Ping y lo demás quedará como está.

Configuración del conjunto:

Dejaremos los valores por defecto.

Transacción:
También dejaremos la configuración por defecto.

Propiedades adicionales:
El ultimo apartado nos servirá para indicar los datos de conexión con nuestra base de datos. Este paso se puede hacer de diferentes formas y funcionaría a la perfección. Os voy a contar dos alternativas:
  • Rellenar campos de la url por separado:
Para establecer una conexión con nuestra base de datos nos hacen falta tres cosas: url de la base de datos, el usuario y la contraseña. La url está compuesta por una serie de elementos (puerto, servidor, base de datos, etc.) que variarán en función de la base de datos que usemos (oracle, mysql, etc.). Si no conocemos o no sabemos como escribir la url pero si conocemos la información de la que está compuesta bastará con indicarle a GlassFish ésta información por separado.


  • Rellenar la url completa:
Si conocemos la url o sabemos como definirla, en lugar de incluir los elementos por separado podemos pulsar en agregar propiedad (en el caso de que no exista la propiedad url) y añadirla junto con los campos user y password.


Puede que GlassFish os añada propiedades adicionales a las anteriormente citadas. En principio no serían necesarias por lo que las podéis eliminar.

Una vez hecho todo esto le damos a finalizar y nos creará el conjunto de conexiones que aparecerá en la lista con todos los demás. Para comprobar si lo hemos configurado bien basta con abrirlo pinchando en el y el la pestaña General pinchamos en Sondeo. Si todo ha ido bien deberá aparecer el pensaje "Ping realizado con exito".


Recurso JDBC
Llegados a éste punto ya tenemos el DataSource creado. Ahora nos tendremos que crear un recurso JDBC para poder usarlo desde nuestra aplicación. Para ello entraremos en el menú de la parte izquierda mencionado anteriormente entraremos en Recursos JDBC.

Seleccionaremos Nuevo..


Para crear el nuevo recurso son necesarios dos simples pasos:

Primero le pondremos nombre al recurso (Nombre JNDI) con la siguiente sintaxis: jdbc/nombreDataSource
nombreDataSource tendrá que ser el del DataSource creado en el apartado anterior.

El segundo paso es indicar el nombre del conjunto de conexiones, que será el de nuestro DataSource.

El resto de campos que aparecen los dejaremos por defecto como están.


Y ya está. Ya tenemos un DataSource configurado y listo para usar en nuestras aplicaciones web con java y servlets.

*NOTA: Para poder acceder a la consola de administración previamente tendréis que haber arrancado GlassFish

jueves, 24 de febrero de 2011

Como usar MASM y debug

El Microsoft Macro Assembler (MASM) es el ensamblador de Microsoft para la familia de microprocesadores x86. Este ensamblador fue pensado para sistemas de 16 y 32 bits, no se desarrollaron dos aplicaciones separadas para estos sistemas. Más tarde se desarrollaron versiones que permitían crear aplicaciones para Windows, pero la versión que os voy a explicar yo solo sirve para MS-DOS. A nivel académico es una buena opción.
Para todo el tutorial usaré el código del programa suma.asm que muestro a continuación. Podéis bajarlo desde aquí.

Este programa suma dos vectores de hexadecimales y guarda el resultado en otro vacío.
Antes de empezar podéis descargaros el MASM aquí y descomprimir los dos archivos ejecutables (MASM.EXE y LINK.EXE) en el mismo directorio donde guardéis el código .asm.
MASM
Entramos en el directorio donde esté nuestro fichero .asm (en nuestro caso suma.asm) y el ensamblador (MASM.EXE y LINK.EXE)
Una vez ahi, procedemos a ensamblar el archivo con la herramienta MASM escribiendo en la linea de comandos masm (para nuestro ejemplo masm suma.asm)
A continuación nos pedirá el nombre del fichero .obj, por defecto se llamará igual que el fichero .asm (le damos a intro porque queremos que se llame igual)
Le volveremos a dar dos veces más a intro puesto que nos pedirá otras dos cosas que nos interesan. Si todo ha ido bien el ensamblado nos devolverá 0 errores y 0 warnings (los warnings en ensamblador también son errores por lo que no puede haber ninguno) y se generará el código .obj en el mismo directorio en el que estamos.
Una vez que hemos ensamblado hay que linkar el código .obj que se habrá generado en el paso anterior. Para ellos usaremos la herramienta LINK escribiendo en la línea de comandos link (en nuestro caso link suma.obj). Nos pedirá el nombre del archivo .exe que nos generará (por defecto nos pondrá el mismo nombre que el .obj, en nuestro caso suma.exe). Como queremos que se llame igual simplemente le damos a intro.
A continuación le volveremos a dar otras dos veces a intro puesto que nos volverá a pedir otras dos cosas que no nos interesan.
Una vez que hemos terminado el linkado se habrá generado el archivo .exe. para ejecutarlo simplemente escribimos el nombre del archivo en la línea de comandos (suma.exe). En nuestro caso no se mostrará nada por pantalla puesto que el ejemplo suma.asm solo suma vectores y no imprime nada por pantalla.
Con esto no sabemos con seguridad si ha salido todo bien o no, lo que tenemos que hacer es usar la herramienta DEBUG de MS-DOS.

DEBUG
Para comprobar si el ensamblado y linkado han salido bien utilizaremos el debuger de MS-DOS escribiendo en la línea de comandos debug (en nuestro caso: debug suma.exe). Después de darle a intro nos aparecerá un guión para que pulsemos una de las opciones del debuger.
si escribimos ? y pulsamos intro nos aparecerá el menú con todas las opciones que nos permite el debuger. Las que nos interesan son t, g y q. A continuación las veremos con más detalle.
Si elegimos t ejecutará una instrucción de nuestro código .asm mostrando el estado de todos los registros del microprocesador 8086 antes de la ejecución de la misma. Cada vez que pongamos t ejecutara una instrucción por orden mostrando el estado de los registros antes de la misma, es decir, el estado de los registros de la instrucción anterior. Es recomendable tener el código delante para asegurarnos que hace lo que queremos y darnos cuanta de lo que está mal en caso contrario.
Si queremos ejecutar más de una instrucción a la vez y ver sus registros pulsaremos t seguida de un numero (en la imagen siguiente he pulsado t3)
Si queremos terminar la ejecución de nuestro programa pulsaremos g. Esto terminará las instrucciones que quedan pero no mostrará el contenido de los registros. Si todo va bien nos mostrará un mensaje: "El programa ha terminado de forma normal"
Para salir del debuguer pulsaremos q y volveremos a la línea de comandos de MS-DOS
Como ya expliqué anteriormente podremos ejecutar nuestro programa escribiendo en la línea de comandos suma.exe

domingo, 23 de enero de 2011

Cómo se usa el paso por valor y por referencia en C

Retomando el post anterior, os voy a explicar como se usan funciones en C.
Como ya dije en el post anterior, una función se compone de dos partes (cabecera y cuerpo) que más o menos expliqué en el post anterior, pero queda aclarar un "pequeño" detalle bastante importante.

  • Parámetros formales
Como ya explique, las funciones puedes recibir parámetros en el momento de la llamada. Estos parámetros son variables de algún tipo definido en C.
Hay dos formas de pasar parámetros a una función, bien pasando el valor de la variable o bien pasando la dirección de memoria de la misma. A estas formas de pasar parametros se las conoce como paso por valor y paso por referencia respectivamente.

  • Paso por valor
En el paso por valor se pasa directamente el valor con el que queremos trabajar, en este caso solo se tendrá acceso a dicho valor y en el caso de cambiarlo dentro de la función, al terminar esta y volver al punto del programa desde donde se invocó, la variable que se pasó como parámetro no se habrá modificado.

int suma (int a, int b){
a=4;
return a+b;
}

La función suma recibe dos parámetros de tipo int y devuelve la suma de ambos, que también es un dato de tipo int (se especifica al principio de la cabecera).

void main(){
int a=2;
int b=3;
printf("%d",a); -> ¿Cuánto vale a?
printf("%d", suma(a,b)); ->¿Cuál es el resultado devuelto por suma?
printf("%d",a); -> ¿Cuánto vale a?
}

En la función main se declaran dos variables enteras a y b con valores 2 y 3 respectivamente.
En el primer printf se imprime el valor de a que, como no ha sido modificada desde su inicialización, será 2.
En la siguiente linea se imprime el valor retornado por la función suma definida antes. Si analizamos la función suma veremos que el valor de a se ha cambiado, por lo que la función devolverá 4+3 (o lo que es lo mismo, 7).
En la última linea se muestra de nuevo el valor de a pero, ¿cuál es? Dentro de la función suma se modificó el valor y esto afectó a la operación pero, una vez que la función termina y volvemos al lugar de la llamada ese cambio deja de tener efecto sobre a ya que se le pasó a suma por valor, por lo que el valor de a sigue siendo el mismo que cuando se inicializó: 2.

  • Paso por referencia
En el paso por referencia lo que recibe la función ya no es un valor, sino una dirección de memoria.
Veamos el ejemplo anterior.

int suma (int *a, int *b){
*a=4;
return *a+*b;
}

Si os fijáis, hay una pequeña variación con respecto a la función suma anterior. Ahora los parámetros tienen un *. Esto significa que son punteros (se verán con mas detalle).
Al pasar punteros las modificaciones que se realicen dentro de la función permanecerán cuando esta termine y retorne al lugar de la llamada, porque ahora lo que se está modificando no es el valor, sino el contenido de la dirección de memoria donde apunta el puntero. Pero ¿qué pasa si se quita el *?

int suma (int *a, int *b){
a=4;
return a+b;
}

Si no pusiésemos el * lo que estamos haciendo es modificar las direcciones de memoria de las variables, lo que producirá resultados inesperados. El * nos indica que accedemos al contenido de la dirección de memoria, es decir, al valor de la variable. Hay que tener mucho cuidado con esto.

void main(){
int a=2;
int b=3;
printf("%d",a); -> ¿Cuánto vale a?
printf("%d", suma(&a,&b)); ->¿Cuál es el resultado devuelto por suma?
printf("%d",a); -> ¿Cuánto vale a?
}

En la llamada a la función también hay una pequeña variación. Hay que incluir un & antes de los parámetros pasados por referencia. Al poner el & lo que estamos haciendo es pasar la dirección de memoria de la variable. De este modo la salida por pantalla será la siguiente:
En el primer printf se mostrará un 2, que es el valor de inicialización de a.
En el segundo printf se mostrará el valor retornado por la función suma: 7
El ultimo printf mostrará de nuevo el valor de a pero, en este caso, el valor habrá cambiado puesto que en la función se modificó, y al pasar a por referencia, el cambio se hace permanente, por lo tanto esa linea imprimirá un 4.

NOTA: Los arrays siempre se pasan por referencia por lo que no hay que especificarlo poniendo * y & (más adelante se explicará con más detalle).