lunes, 20 de abril de 2015

Objetos implícitos en portlets Liferay

En la anterior entrada (Primer portlet con Eclipse y Liferay) vimos cómo hacer un portlet muy simple, un "Hola, Mundo". Hoy veremos cómo acceder a algo de información útil, relativa al usuario que ha iniciado la sesión en el portal de Liferay.

Si recordáis, el fichero view.jsp es el que contiene la vista del portlet, o sea, lo que se va a mostrar en el "recuadro" que contenga al portlet en la página web, la cual puede contener varios portlets. En esta ocasión, veremos qué hay que añadir a ese fichero para mostrar información del usuario.

El código que vimos en el último ejemplo, se limitaba a mostrar un mensaje de saludo.


Fig. 1. "Hola, Mundo" en todo su esplendor


 Ahora, para mostrar información del usuario, utilizaremos dos objetos: request y user.

El objeto request es un objeto implícito que tenemos disponible para acceso en nuestra página JSP y que representa la solicitud de página que hace el navegador a nuestro servidor. En esa solicitud viene, entre otras cosas, información del usuario que la ha pedido, y podemos acceder a ella a través del método getRemoteUser:

<br>Usuario autenticado: <%=request.getRemoteUser() %>

Este objeto request (y otros como response) están disponibles en todos los portlets y servlets, independientemente de que estemos utilizando Liferay o no. El tipo del objeto request es javax.servlet.http.HttpServletRequest y podéis ver todos sus métodos y atributos aquí:

http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html

Una vez hecha tecleada la línea de arriba en nuestra página view.jsp, podemos observar la salida en nuestra página web:
 
Fig. 2. El usuario tiene un identificador numérico. Hmm... esto no nos dice mucho

 Como se ve, el identificador es un número que no nos es (en principio) demasiado útil. La buena noticia es que Liferay nos da otras variables con las que sacar información interesante, como el nombre del usuario (su login, por ejemplo) y otras. Para tener disponibles estas variables de Liferay debemos incluir estas dos líneas en nuestro código:

<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme" %>
<liferay-theme:defineObjects />

Y una vez tecleado eso, ya podemos acceder al login del usuario y su nombre:

<br>Nombre: <%= user.getScreenName() %>
<br>Login: <%= user.getLogin() %>

Así pues, el código comleto nos quedaría así:


Fig. 3. Accediendo al nombre y login del usuario



Lo pongo aquí en modo texto por si alguien quiere copiar y pegar:

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme" %>
<liferay-theme:defineObjects />
<portlet:defineObjects />


This is the <b>Hola, Mundo</b> portlet.

<br>Usuario autenticado: <%= request.getRemoteUser() %>
<br>Nombre: <%= user.getScreenName() %>
<br>Login: <%= user.getLogin() %>

Ahora ya podemos ir a la página y ver la salida:


Fig. 4. La información del usuario en un formato más legible

Bien. Ahora ya podríamos tomar decisiones en función del usuario que se conecte (por ejemplo, mostrar una información u otra en función del usuario, gestionar permisos... en fin, todo lo que se nos ocurra y que pueda depender del usuario).

miércoles, 15 de abril de 2015

Primer portlet con Eclipse y Liferay

Bueno, siguiendo con la serie de entradas sobre Liferay, veamos hoy cómo hacer nuestro primer portlet. Un portlet es como un "trozo" de una página, un componente web que funciona como una miniaplicación independiente. O no tan mini, ya que la funcionalidad del portlet puede ser tan compleja como se desee. El ejemplo típico es una página que puede contener varios portlets (que no se deben solapar), aunque cada uno de ellos no tiene asociada una URL independiente, sino que están concebidos para funcionar dentro de la página contenedora. Si queréis más info, sobre los portlets, podéis mirar aquí para los conceptos básicos o, como siempre, preguntarle a cualquier buscador.

De acuerdo, pues. Veamos cómo realizar nuestro primer portlet, poco más que un "Hola, mundo", lo cual significa que no aportará mucha funcionalidad, pero nos valdrá para adquirir la idea básica de cómo hacer un portlet.

1. Configurar el Liferay SDK

Antes de poder crear ningún portlet, hemos de configurar el SDK de Liferay. Para ello, en Eclipse, elegimos el menú Window / Preferences, y en el diálogo que se nos abre, ir a Liferay / Installed Plugin SDKs / Add... y poner la ruta del SDK que nos descargamos.

Fig. 1. Configurar el SDK de Liferay


2. Crear el proyecto de portlet.

En la barra de herramientas de Eclipse, si hemos instalado el IDE de Liferay para Eclipse (como se describía aquí) tenemos un botón que, al desplegarlo, nos da varias opciones para crear portlets. Aquí nos surge la primera duda: ¿cuál de ellas utilizar?


Fig. 2. ¿Qué opción nos interesa para crear el primer portlet?

Como ya he dicho en otras ocasiones, yo estoy aprendiendo en estos temas, así que tampoco lo tengo claro. Por eso, para empezar voy a utilizar la opción que me explicaron en un curso que hicimos hace poco. Con el tiempo, espero ir conociendo las diferencias y, si viene al caso, contarlas aquí.

Así que elegiremos la primera opción "New Liferay Plugin Project" y le pondremos nombre al proyecto
Fig. 3. Dando a nuestro proyecto un nombre original donde los haya

Al pulsar Next, en el siguiente formulario dejaremos las cosas como están, para trabajar con el framework MVC de Liferay, aunque ya vemos que hay otras opciones que tendremos que explorar en el futuro. Tengamos en cuenta que lo que ahora nos interesa es construir un "Hola, mundo" básico con las mínimas complicaciones.

Fig. 4. Dejamos el framework Liferay MVC, la opción por defecto

Al pulsar Finish, tras unos segundos (a mí se me hacen eternos) veremos en la consola un mensaje como este

BUILD SUCCESSFUL
Total time: 2 seconds


y también veremos que en el Package Explorer, a la izquierda, se ha creado el proyecto de nuestro portlet con varias carpetas y ficheros. La que ahora nos interesa es la carpeta WEB-INF y lo que cuelga de ella.

Fig. 5. La carpeta WEB-INF contiene la chicha de nuestro portlet

Este portlet hace más bien poco, pero es lo que tienen los ejemplos "Hola, Mundo", así que no le añadiremos de momento ninguna funcionalidad, y lo que haremos será publicarlo sin más. Ya analizaremos más adelante los ficheros, las rutas... y añadiremos un poco de funcionalidad.

3. Publicar el portlet

Esto se puede hacer de manera gráfica muy fácilmente: bastará con arrastrar el porlet (nodo raíz "HolaMundo-portlet" en el Package Explorer) al servidor que hay abajo, como se ve en la figura 6.


Fig. 6. Arrastrar y soltar para publicar el portlet

También se puede publicar el portlet pulsando con el botón secundario del ratón sobre el servidor y elegir la opción "Add and remove..." del menú contextual.

Fig. 7. Publicar el portlet desde el menú contextual

En el diálogo que se nos abre, vemos los portlets disponibles (en este caso, sólo el que acabamos de hacer) y ya lo podemos publicar

Fig. 8. Seleccionamos el portlet a publicar y pulsamos Finish

En cualquier caso, una vez publicado el portlet, ya podemos ver que colgando del servidor, en la parte inferior izquierda de Eclipse, tenemos el porlet, y junto a él la leyenda [Synchronized]. Esto nos indica que está publicado y listo para ser utilizado en nuestras páginas web.


Fig. 9. El portlet publicado en el servidor

4. Incluir el portlet en nuestra página

Vayamos ahora a la página que creamos en el tutorial anterior (Primeros pasos con Liferay), aunque, si lo preferimos, también podemos crear una página nueva, naturalmente. Si hacemos clic en el signo "+" debemos abrir el grupo de componentes "Ejemplos" y dentro de él encontraremos el nombre que hemos dado a nuestro porlet (el "Display name"). Así que simplemente tenemos que pulsar "Añadir" (aparece al pasar el cursor junto al nombre del portlet, como se ve en la fig. 10)

Fig. 10. El porlet "Hola, Mundo" está en el grupo "Ejemplos", 
y al lado de su nombre el botón "Añadir"

Tras añadirlo, ya podemos ver que el portlet aparece en la página web


Fig. 11. El portlet ya incluido en nuestra página. De momento, no podemos añadir más instancias

Como se ve en la fig. 11, el nombre en el bloque "Ejemplos" ahora aparece en gris. Esto se debe a que es un portlet definido para que sólo se pueda incluir una vez en la página, o sea, un portlet de instancia única (un Singleton). En otra ocasión veremos cómo definir que el porlet puede aparecer más de una vez (multiinstancia).

Bueno, pues ya hemos visto cómo hacer el portlet más básico, "Hola, Mundo", cómo publicarlo y cómo incluirlo en nuestra página web. Con esto terminamos este pequeño tutorial.

lunes, 13 de abril de 2015

Primeros pasos con Liferay

En una entrada anterior vimos cómo instalar Liferay. Veamos ahora el aspecto que tiene y cómo podemos empezar a realizar las tareas más básicas, como crear una página web simple y publicar una noticia en ella. Este será un paso previo antes de comenzar a desarrollar nuestros propios portlets y poder publicarlos.

1. Explorar el perfil del usuario test

Iniciaremos sesión con el usuario que configuramos la primera vez que abrimos el portal. En mi caso, dejé el usuario de prueba, con dirección de email "test@liferay.com" y clave "test".


Fig. 1. Inicio de sesión en Liferay

Una vez autenticados, veremos la página principal de nuestro portal. Esta página tiene de título "Welcome" y consta de dos elementos:
  • una caja con el título "Login" donde se muestra nuestro nombre de usuario. El nombre de usuario tiene un enlace
  • una caja de texto de título "Hello world" donde se muestra la versión de Liferay

Fig. 2. Página principal del usuario Joe Bloggs
   
En la caja "Login", si hacemos clic sobre el nombre del usuario, podemos ver el perfil de nuestro usuario y modificar los datos apropiadamente. En mi caso, me limitaré a cambiar la contraseña, cosa que podemos hacer en la segunda opción del menú de la derecha.

Fig. 3. Perfil del usuario. Aquí podemos consultar y cambiar datos, contraseña...

En la opción "Roles" podemos ver que este usuario tiene, entre otros, el rol "Administrator". Bueno, parece que con esto podremos hacer todas las tareas que deseemos. Ya veremos más adelante si es así.

Fig. 4. El usuario "test" tiene varios roles: Administrator, Power User, User, Power Ranger...

Bueno, toda esta información se guarda en una BD que Liferay lleva configurada por defecto y que, de ser necesario, podemos cambiar (de hecho, SE RECOMIENDA que se cambie para sistemas en producción). Habrá que investigar esto más adelante.

2. Crear una página "Hola, Mundo"

No quiero modificar la página por defecto, así que comenzaré por crear una nueva página en blanco a la que le iremos añadiendo "cosas". Estas "cosas" pueden ser desde simples cuadros de texto hasta complejas aplicaciones que podrían acceder a bases de datos, hacer cálculos complejos, etc... todo ello encapsulado en un portlet.

Para crear nuestra página, haremos clic en el botón con el símbolo "+" a la izquierda

Fig. 5. Crear nueva página

Le ponemos un título imaginativo como "Página 1" (¡qué creatividad!) y decidimos si queremos que se vea con una columna, dos columnas... y cómo se distribuye el espacio entre ellas.

Fig. 6. Especificaciones de la nueva página: título y formato visual

Tras pulsar "Añadir página" ya podemos ver la nueva página.

Fig. 7. La nueva página en blanco. Con la cara lavada y recién peiná

Ahora ya podemos empezar a añadir componentes, elementos o portlets (lo que antes llamé "cosas") a esta página. Uno de los portlets más simples es un visor de texto donde podemos poner un mensaje, por ejemplo, una noticia para nuestro sitio web. Para hacer esto, pulsamos de nuevo en el botón "+" (Añadir) y nos vamos al apartado de "Aplicaciones". Ahí elegimos el "Visor de contenidos web" y pulsamos añadir (número 1 en la fig. 8). Tras eso, aparece en la página el visor (número 2) y para modificar el texto pulsamos en el enlace "Añadir" dentro del Visor (número 3 en la fig. 8).

Fig. 8. Añadir un porlet "Visor de contenido web"

Ahora podemos editar el texto de la noticia

Fig. 9. Redactando una noticia importantísima para la Humanidad

Y ahora, al pulsar "Publicar", ya podemos ver nuestra página flamante mostrando la noticia que hemos creado.
 Fig. 10. Nuestra importantísima noticia, lanzada al mundo

Buen punto para cortar aquí. En una próxima entrada veremos cómo hacer nuestro propio portlet.

miércoles, 8 de abril de 2015

Configurar Eclipse para desarrollar para Liferay

Esta entrada podría verse como un complemento a la entrada que publiqué hace unos días sobre instalación y configuración de Liferay. Esta explicación que sigue es la que a mí me hubiera gustado tener cuando tuve que configurar Eclipse para trabajar con Liferay.

Una vez instalado Liferay, lo que queremos es prepararnos un entorno adecuado para comenzar a desarrollar portlets para publicarlos en nuestro portal. El entorno ideal para esto (aunque no tiene por qué ser el único, claro) es Eclipse. ¿Y cómo lo dejamos listo para esto? Veamos cómo hacerlo en tres pasos. Vamos allá.

Paso 1. Descargar e instalar Eclipse

Dirección de descarga: https://www.eclipse.org/downloads/
Ten la precaución de elegir la versión acorde con tu sistema: 32 o 64 bits.

Descomprime el ZIP descargado en la carpeta que quieras. En mi caso, lo descomprimiré en c:\bin\eclipse. Iniciando el ejecutable, debería verse una pantalla como esta.

Fig. 1. Desvirgando Eclipse

Pulsando en Workbench (arriba a la derecha) se accede a la zona de trabajo.

Paso 2. Instalar la perspectiva para Liferay

Eclipse puede trabajar con perspectivas, que son agrupaciones de vistas y editores. (Más info, aquí [http://www.comscigate.com/cs/valle/vistas.htm] o aquí [http://www.tecgurus.net/foro/19-eclipse/616-perspectivas-en-eclipse.html]), por ejemplo.

Si nos fijamos, recién instalado Eclipse sólo vemos la perspectiva típica para el desarrollo en Java.

 Fig. 2. Perspectivas en Eclipse

Vamos a instalar el soporte para la perspectiva de desarrollo para Liferay y veremos cómo cambia la cosa. Para ello, hay que ir al menú Help de Eclipse, y elegir la opción Install new software.... Pegar en Work with la dirección siguiente http://releases.liferay.com/tools/ide/latest/stable/
y seleccionar "Liferay IDE" (contiene 3 subopciones, que dejamos marcadas).

Fig. 3. Seleccionando el IDE de Liferay para integrar en Eclipse

Tras pulsar Next (2 veces) y aceptar los términos de la licencia, comienza la descarga. Puede ser que a mitad de la misma os pregunte si queréis descargar contenido no firmado. Lo descargamos y continuamos adelante.
 Fig. 4. Descargando complementos Liferay para Eclipse

Al terminar (en mi caso, la descarga dura unos 5 minutos), nos pedirá reiniciar Eclipse para que los cambios tengan efecto.

Fig. 5. Reiniciar, la eterna solución

Tras reiniciar, aparentemente todo está igual, pero no es así. (Por cierto, si por un casual alguien intenta instalar por segunda vez el plugin de Liferay, verá algo como esto)

Fig. 6. ¿Ande vas? Que eso ya está instalaaaaaadooooo

El caso es que ahora ya podemos pulsar en el botón que abre las diferentes perspectivas, y podemos ver una para Liferay


Fig. 7. Abrir la perspectiva para Liferay

Y podemos ver algunos puntos interesantes, como el botón para activar la perspectiva para desarrollo Liferay, y la vista de Servidores donde (por el momento) aún no tenemos ningún servidor configurado (todo se andará, tranquilos).

Fig. 8. Perspectiva Liferay instalada en Eclipse

Paso 3. El servidor de Liferay

Lo único que nos falta es configurar nuestro servidor para tener un entorno de desarrollo y pruebas para empezar a desarrollar portlets con Liferay. Para configurar el servidor, utilizaremos el que instalamos en la anterior entrada.

Pulsamos sobre el enlace para crear un nuevo servidor (esquina inferior izquierda) y elegimos el tipo de servidor dentro del grupo Liferay. En mi caso, Liferay v6.2 CE Server (Tomcat 7)

 Fig. 9. Elegir el tipo y versión del servidor Liferay

Al pulsar siguiente, nos pregunta que dónde está instalado el Tomcat. Se lo decimos

Fig. 10. ¿Dónde está el gatito Tom?

Si nos hemos descargado los Javadocs y los fuentes de Liferay, podemos configurarlos en la siguiente pantalla. Si no, podemos darle directamente a Finish, y ya veremos que nos aparece el servidor disponible para que lo arranquemos y podamos hacer cosas con él. Para iniciarlo, sólo hay que darle al play.
Fig. 11. El servidor Liferay disponible y a punto de ser iniciado

El arranque del servidor no es rápido. En mi equipo se lleva casi dos minutos, durante los cuales se van viendo diferentes mensajes en la consola, y junto al nombre del servidor aparecen las palabras "Starting, Synchronized". Cuando termina, se lanza automáticamente una ventana del navegador y en Eclipse se ven junto al servidor las palabras "Started, Synchronized". En la consola, deberéis ver entre los últimos mensajes algo así como

INFORMACIÓN: Server startup in 70733 ms

(En mi caso, tras este mensaje de "Server startup" tengo alguno más, de warning, pero creo que se debe a que para hacer esta pequeña guía he hecho varias instalaciones / desinstalaciones y seguramente he dejado algo de basurilla por ahí.)

Bueno, creo que éste es un buen sitio para dejar aquí el asunto de momento. Ya tenemos un entorno disponible; lo siguiente sería hacer nuestro primer portlet. Pero eso es cosa para otra entrada.

lunes, 30 de marzo de 2015

Instalar y configurar Liferay (Windows 7)

Pues resulta que por motivos laborales he de trabajar con Liferay a partir de ahora. Así que, por si os sirve de algo, aquí os dejo una mínima guía de los primeros pasos que, no es que sean complicados, pero que a mí me hubiera gustado tener a mano en su momento, ya que me hubiera ahorrado algo de tiempo. Por si le sirve a alguien. Ya sabéis que, como suelo decir, lo explico para enterarme yo.

1. Descargar Liferay

Hay que elegir la versión con la se necesite trabajar. Si uno no está condicionado por desarrollos anteriores, debería descargar la última disponible, pero a veces (es mi caso), esto no es posible, y te tienes que descargar alguna versión anterior.

Existen dos ediciones, la Community (gratuita) y la Enterprise (de pago). En mi caso, la más reciente versión Community disponible a día de hoy (marzo 2015) es la que está en el fichero liferay-portal-tomcat-6.2-ce-ga3-20150103155803016.zip. Así que la descargo y descomprimo el fichero en la carpeta C:\bin\liferay-portal-6.2-ce-ga3.


2. Arrancando Liferay

Para comprobar que funciona, hay que lanzar el ejecutable startup.bat (en mi caso, en la ruta C:\bin\liferay-portal-6.2-ce-ga3\tomcat-7.0.42\bin\startup.bat). Iniciado el script startup.bat desde una ventana de comando, esto hace que se abra una segunda ventana en la que van saliendo varios mensajes (figura 1)

 Fig. 1. Arrancando Liferay

3. Configurar Liferay

Al cabo de un rato y después de salir muchos mensajes en la ventana de comando, debería lanzarse automáticamente un navegador web abriendo la dirección http://localhost:8080/, que es la ventana de configuración inicial de Liferay. Tras rellenar los datos (en mi caso dejo todo por defecto, salvo el idioma que pongo en español) y pulsar "Finalizar configuración", me sale una pequeña animación para indicar que Liferay está actualizando (figura 2, "Liferay se está instalando...").


Fig. 2. Liferay guardando la configuración inicial

Después de un minuto o así, me indica que ha terminado, dejando grabadas las opciones de configuración en C:/bin/liferay-portal-6.2-ce-ga3/portal-setup-wizard.properties.
 Fig. 3. La configuración fue guardada con éxito.

Si tenéis curiosidad, podéis comprobar que existe ese fichero, y si lo abrís con un editor de texto veréis algo parecido a esto:
 Fig. 4. Configuración de Liferay guardada.

Pulsando en el botón "Ir a mi Portal" (fig. 3) se os abrirá en primer lugar un acuerdo de Licencia. Tras pulsar "Acepto" os pedirá un recordatorio de contraseña (fig. 5)

Fig. 5. Pon alguna pregunta original

y, una vez establecido, ya veremos la pantalla principal de Liferay (figura 6)
 Fig. 6. ¿Tanta historia para terminar llamándonos "Joe Blogs"? ¡Ains, qué vida más triste!

4. Las variables de entorno de Java

Pudiera pasar que al iniciar el script startup.bat indicado antes os diera algún problema. De hecho, a mí me dio en alguna instalación anterior un error debido a que no había establecido ningún valor para las variables de entorno de Java, JAVA_HOME y JRE_HOME. Pare evitar esto podéis hacer dos cosas: o bien establecer su valor en las variables del sistema, o bien incluirlas en el propio script startup.bat. Para hacer lo primero, deberéis abrir el Panel de Control / Sistema y Seguridad / Sistema / Configuración avanzada del sistema / Variables de entorno. En la figura 7 os pongo un resumen visual de los cuatro pasos.

Fig. 7. Establecer la variable JAVA_HOME si no tiene ya un valor asignado.

La segunda opción, si no queréis establecer la variable de entorno a nivel del sistema, es incluir esta variable al principio del fichero startup.bat, como he dicho antes. Para eso, lo editáis y añadís al principio estas dos líneas:



Bueno, con esto ya tenemos Liferay casi listo para empezar a hacer cosicas. El siguiente paso será instalar y configurar Eclipse para desarrollar algún portlet e instalarlo en Liferay. Pero esto ya lo veremos en una entrada posterior.

lunes, 9 de marzo de 2015

Buscando desesperadamente a Susan... digoooo... un gestor de BD Oracle

Resulta que últimamente en el curro tengo que lidiar con bases de datos Oracle, cosa que había hecho hasta ahora muy poco (algún contacto puntual sin mayor trascendencia, algún cursillo básico enseñando SQL básico sobre Oracle y... poco más).

Pero ahora se trata de trabajar a diario con algunas BD Oracle. Para ello, el primer paso es proveerme de una buena herramienta de administración de Oracle. Hasta hace unas semanas, la única herramienta que conocía era TOAD que, a pesar de haberla utilizado de forma esporádica, hay que reconocerle que es muuuuuy, pero que muuuuy completa. Tiene una cantidad de características impresionante. Sólo tiene una pega... es de pago. No obstante, si alguien quiere probarla, podéis descargar una versión de evaluación por 30 días.
http://software.dell.com/products/toad-for-oracle/software-downloads.aspx

Si tu organización puede permitírselo, mi recomendación es comprarla. Me parece muy bien pagar por un buen software (ahora bien, no he mirado el precio, así que no sé si se pasan o no).

Sin embargo, en mi caso esto no era una opción. Así que yo busco una aplicación gratuita (si ya fuera libre, miel sobre hojuelas, pero tampoco me obsesiona esto). Tras el habitual proceso de googleo, investigación, descargas, instalaciones, configuración y desinstalaciones, me he quedado con tres candidatas. Bueno, quedado no es la palabra, ya que aún no me he decantado por una:

  • TORA [http://torasql.com/]: tiene buena pinta "la publi", pero, lamentablemente, no he conseguido hacerla funcionar. Al parecer, no soy el único, parece que no es tan fácil hacerla funcionar [http://sourceforge.net/p/tora/discussion/52737/thread/bc088bb4/]. Será cuestión de dedicarle más tiempo. Pero cuando le has dedicado un rato y no le has sacado punta, la verdad es que te aburres y te apetece dejarla y probar otra. Probablemente vuelva a dedicarle algún rato más, ya veremos. Si alguien ha conseguido hacerla funcionar en un Windows7 64 bits, por favor, que me diga cómo.



- SQuirreL SQL [http://squirrel-sql.sourceforge.net/]. Esta he conseguido hacerla funcionar rápidamente, y tiene buena pinta. Aún no la he probado mucho, pero ya veremos. Está hecha en Java, lo que se le nota un poco en rendimiento (algunas exportaciones de tablas gordas han sido un poco lentas), pero tampoco pienso andar moviendo grandes bloques de datos frecuentemente, así que probablemente me valga. Una ventaja es que sólo ocupa 56MB, que no es una barbaridad para los tiempos que corren. Como podéis ver en el menú contextual de la imagen, un montón de opciones para exportar a CSV, Excel, HTML... y otras cosas útiles.


- Y por último, SQL Developer. Esta herramienta, recomendada por un compañero, la proporciona Oracle gratuitamente [http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html] y también va sobre la JVM, así que (los prejuicios pesan mucho, pero es que cuando son fundados...) será cuestión de evaluarla y ver qué tal. Un poco mamotreto sí que es (casi 500MB una vez descomprimida), pero mi intención es probarla.



Bueno, ¿hay alguna herramienta que conozcáis y que me recomendariais en lugar de estas? Cualquier información será muy bienvenida.

lunes, 16 de febrero de 2015

Oracle, no me gusta que intentes colármela

Que una empresa proporcione actualizaciones es algo meritorio, algo a valorar positivamente, pues demuestra que se preocupan por mantener en un buen estado su software, que éste está vivo y que en la empresa no son unos dejaos. Cierto que a veces las actualizaciones son tan frecuentes que pueden llegar a ser algo molestas (¿seguro que son necesarias con taaaanta frecuencia?), pero bueno, podríamos decir que es un mal menor. Si hay que actualizar, porque es bueno para la seguridad y/o funcionalidad, pues se actualiza y punto.

Ahora bien, que en esas actualizaciones intenten colarme otras aplicaciones que nada tienen que ver con el software principal, me molesta, pues es una falta de respeto y un intento de engañarme. Es como si el fontanero viene a mi casa a arreglarme el grifo y de paso, en cuanto miro para otro lado, intenta ponerme un filtro o una alcachofa en el grifo del baño que yo no le he pedido. No lo quiero ni aunque sea "gratis" (normalmente estas cosas tampoco es que sean gratis, como mínimo te tocará comerte tu buena ración de publicidad). Ese software va a repercutir en mi sistema, de diferentes maneras. ¿Por qué no me preguntas y decides que yo tenga que marcar el "SÍ, QUIERO", en vez de darme la opción ACEPTADA por defecto y que sea yo quien tenga que estar atento a desmarcarla? ¿De verdad una empresa seria ve bien este juego sucio?

Esto ocurre con las actualizaciones de Java que hace Oracle, que así, como quien no quiere la cosa, prueban a ver si cuela y por despiste le doy a "siguiente, siguiente..." y me trago la barra Ask del navegador que, yo no sé si alguien la utiliza, pero yo desde luego no la quiero.


Para mí, es un truco sucio. Y que lo utilice Oracle, una de las grandes de la informática, me molesta. Punto negativo para ellos.

jueves, 5 de febrero de 2015

La importancia de leer código fuente

Me pregunta mi amigo E que si le puedo dar algún consejo para seguir completando su formación en el campo de la programación. E es un informático que ha terminado hace poco sus estudios. Aparte de su formación académica, últimamente ha realizado varios cursos en los que ha conocido distintos paradigmas de desarrollo y diferentes tecnologías y lenguajes.

Hemos intercambiado varias ideas durante una fructífera conversación, y al final, como suele ser habitual, creo que el que supuestamente tenía que dar los consejos (yo) ha salido más enriquecido de la conversación que mi amigo, gracias a la cantidad de información e ideas que me ha dado él a mí.



Sin embargo, no quiero dejar que se pierda un consejo que, este sí, le he dado yo a él y sobre el que le he insistido mucho, y que considero muy importante. Lo voy a poner en letras gordas porque me parece muy importante:

LEE CÓDIGO FUENTE ESCRITO POR OTRAS PERSONAS

Muchas veces, debido a las limitaciones inherentes al tiempo disponible (cursos) o al espacio (libros), cuando nos explican una técnica, lenguaje o herramienta, los ejemplos que nos presentan son "de juguete". Esos ejemplos suelen ser suficientes para ilustrar alguna característica concreta que se quiere destacar, pero en la mayoría de las ocasiones no son realistas. Si pusiéramos ese código en producción, posiblemente nos despedirían al día siguiente (y de manera justificada, seguramente). Lo más probable es que tropezáramos con muchos problemas, ya que en esos ejemplos "de clase" o "de libro" no suelen incluirse cosas que sí se dan en el mundo real.

Por ejemplo, el control de entradas de usuario. En la vida real, un programa debe estar preparado por si en un cuadro de entrada de texto un usuario teclea cualquier dato con basura o, peor aún, con intenciones dañinas (como inyectar código SQL, provocar desbordamiento de buffers...). Los controles necesarios o más habituales en ese tipo de casos norlamente no se explican en los ejemplos de libro, ya que muchas veces lo que se quiere es ir rápidamente al meollo de alguna otra cuestión. Excepción hecha de aquellos temas del libro o curso en los que se quiere ilustrar, precisamente, cómo "sanear" las entradas del usuario antes de proceder a procesarlas.

Por todo ello, y ya que tenemos la suerte de tener chorropocientillones de líneas de código de casi cualquier lenguaje disponibles en Internet en cientos de proyectos grandes, medianos o pequeños (que también los hay interesantes), ¿por qué no sacarles partido? LEE CÓDIGO DE OTROS.

Quizás sea mejor comenzar con proyectos pequeños, pues te puedes hacer una idea global de todas las partes del proyecto con una o dos horas de lectura del código, y seguramente veas estilos y formas de hacer las cosas diferentes de tus costumbres. No quiere decir que sean mejores, pero a lo mejor te dan ideas que no se te hubieran ocurrido antes. A mí me ha pasado: viendo cómo otros han organizado datos o han creado estructuras o han hecho una clase o una función para llevar a cabo una tarea, me he inspirado para hacer algo parecido en mi código, refactorizándolo para dejarlo más eficiente, más legible, más mantenible o, simplemente, más bonito, lo que también tiene implicaciones en cuanto a mantenibilidad, legibilidad y, en última instancia, autosatisfacción (a ver si sólo los artistas van a poder buscar la belleza).

No es necesario tener controlado totalmente el hábito de leer proyectos pequeños para pasar a leer código de proyectos más grandes. Un buen recurso son los proyectos de código abierto (open source) más exitosos, donde su propio éxito es una garantía de que encontraremos código escrito de manera profesional, y seguramente bien estructurado y modularizado. Esa modularidad nos permitirá dedicarnos a leer una parte pequeña de ese proyecto y encontrarle utilidad "per se", sin tener que leer y mucho menos comprender el proyecto entero. Así que, insisto: lee (trozos de) código de proyectos grandes.

--

¿Y tú, has aprendido mucho leyendo código fuente de proyectos reales, o todo lo que sabes se lo debes a los ejemplos "de juguete"?

lunes, 2 de febrero de 2015

Cómo saber la versión de ORACLE

Resulta que me han dado las credenciales de acceso a una BD Oracle, pero no sé qué versión del motor del SGBD de Oracle se está utilizando. ¿Cómo puedo saberlo?

Pues así (gracias a mi compañero M por esta información):



select * from sys.v_$version

También se puede saber con una versión ligeramente distinta, tecleando algunos caracteres menos, lo cual siempre viene bien para los "gandules" como yo:

select * from v$version



Según veo, v$version y sys.v_$version son sinónimos para una vista que sólo tiene una columna (de nombre BANNER) donde hay 5 líneas con información no sólo de la versión del motor, sino de otros componentes de la Base de Datos:  entorno de desarrollo PL/SQL, protocolo TNS (conexión a la BD), la biblioteca de soporte de idioma (NLSRTL = National Language Support Runtime Library), etc.

En la versión "larga", se puede ver que la vista pertenece al usuario "SYS", uno de los usuarios especiales del sistema. El esquema (usuario) SYS contiene las vistas y tablas básicas del diccionario de datos de la base de datos, y las tablas de este esquema se manipulan con las operaciones que se van realizando en la base de datos.

Las dos vistas indicadas para consultar la versión del motor tienen permiso de SELECT para todos los usuarios (PUBLIC)



Pues nada, ahí queda la cosa, por si alguien lo necesita.

Related Posts Plugin for WordPress, Blogger...