Cómo instalar PL/Java en debian lenny


En este post voy a explicar la instalación de pljava sobre debian lenny. Para hacer este como me base en la mayor parte de la instalación de openxpertya para ubuntu, solo modificando unas cosas para que sea para debian

Es claro decir que debo tener instalado debian lenny en mi maquina, asumo que sirve para otras versiones y puede servir de guía para otras distribuciones, así como me sirvió a mí

Los pasos a seguir serán los siguientes:

  • Instalación de java
  • Instalación de postgresql
  • Configuración de las variables de entorno
  • Instalación y configuración de pl/java

Instalación de java
El primer paso es instalar Java5, que esta en los repositorios non-free de debian, entonces hay que editar el archivo /etc/apt/sources.list. Yo estoy usando como editor vim, pero puede ser en cualquier editor de texto


$ sudo vim /etc/apt/sources.list

Buscamos la línea que hace referencia a los repositorios de debian y la dejamos así


deb http://ftp.debian.org/debian lenny main contrib non-free

Primero se debe actualizar los repositorios, y luego se instala Java


$ sudo aptitude update
$ sudo aptitude install sun-java5-jdk

Tras la instalación, los paquetes de Java estarán en la ruta /usr/lib/jvm/java-1.5.0-sun-1.5.0.15 Ahora, para hacer más fácil su acceso, crearemos un enlace simbólico:


$ sudo ln -s /usr/lib/jvm/java-1.5.0-sun-1.5.0.15 /usr/lib/java

A continuación, comprobaremos que la versión de Java que estamos utilizando es la que hemos instalado. Como hemos empezado este artículo con una instalación limpia de Ubuntu Server, seguramente sólo tendremos una versión, pero lo comprobaremos igualmente por si acaso.


$ java -version
java version "1.5.0_15"
Java(TM) 2 Runtime Environment. Standard Edition (build 1.5.0_15-b04)
Java Hotspot(TM) Client VM (build 1.5.0_15-b04, mixed mode, sharing)

Primero descargaremos los binarios a nuestro servidor. Es recomendable utilizar, en este caso, la descarga desde Source Forge, ya que así podremos acceder al enlace de descarga directa. Una vez tengamos el enlace, ejecutaremos en nuestra consola:
Variables de Entorno


$ sudo export JAVA_HOME=/usr/lib/java
$ sudo env # para verificar que estén las rutas creadas.

Instalación de PostgreSQL 8.3

Para la instalación de la Base de Datos PostgreSQL se deben realizar los siguientes pasos.


$ sudo apt-get install postgresql postgresql-contrib

Podemos instalar el paquete “pgadmin3” (PgAdmin III) para administrar las bases de datos en un entorno gráfico. Para ello, ejecutaremos desde el terminal:


$ sudo apt-get install pgadmin3

Ahora, le indicamos a PostgreSQL de la ruta de la JVM.


$ sudo vim /etc/postgresql/8.3/main/environment

Añadimos la linea:


JAVA_HOME='/usr/lib/java'

Instalación y configuración de PL/Java

Antes de importar la base de datos de OpenXpertia, debemos habilitar el soporte PL/Java en PostgreSQL. El paquete que hay en los repositorios está preparado para gcj, pero no para la VM de Sun. Además, debido a un bug, imposibilita la ejecucción de la aplicación de manera correcta.

Debemos descargar, entonces, el PL/Java e instalarlo. Para ello haremos:


$ sudo wget http://pgfoundry.org/frs/download.php/1598/pljava-i686-pc-linux-gnu-pg8.3-1.4.0.tar.gz

Descomprimimos y copiamos los archivos donde deben ir. En esta instalación estamos suponiendo que el directorio donde se descargan los archivos es /root, así que crearemos primero una carpeta dentro de /root que se llame pljava/ para contener los archivos de PL/Java:


$ sudo mkdir pljava
$ sudo mv pljava-i686-pc-linux-gnu-pg8.3-1.4.0.tar.gz ./pljava/
$ cd pljava
$ sudo tar zxfv pljava-i686-pc-linux-gnu-pg8.3-1.4.0.tar.gz
$ sudo cp pljava.jar pljava.so /usr/lib/postgresql/8.3/lib/
$ sudo mkdir /usr/share/postgresql-8.3-pljava/
$ sudo cp install.sql uninstall.sql /usr/share/postgresql-8.3-pljava/

A continuación, procederemos a instalar PL/java. Antes de nada, hay que modificar el archivo pg_hba.conf para que las aplicaciones se conecten con la base de datos sin problemas. El archivo se encuentra en: /etc/postgresql/8.3/main/


$ sudo vi /etc/postgresql/8.3/main/pg_hba.conf

Para que no tengamos problemas de acceso a la base de datos, el archivo debe estar de la siguiente manera en las últimas lineas:


# Database administrative login by UNIX sockets
local all postgres trust

# TYPE DATABASE USER CIDR-ADDRESS METHOD

# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host all all 0/0 trust
# IPv6 local connections:
host all all ::1/128 trust

Además, modificaremos el archivo /etc/postgresql/8.3/main/postgresql.conf para indicar que escuche desde cualquier dirección ip:


listen_addresses = '*'

Y le añadimos al final:


dynamic_library_path = '$libdir:/usr/lib/postgresql/8.3/lib/'
custom_variable_classes = 'pljava' # list of custom variable class names
pljava.classpath = '/usr/lib/postgresql/8.3/lib/pljava.jar'

A continuación, modificaremos el archivo /etc/ld.so.conf y le añadimos las siguientes lineas:


/usr/lib/java/jre/lib/i386
/usr/lib/java/jre/lib/i386/client
/usr/lib/java/jre/lib/i386/native_threads
/usr/lib/java/jre/lib/i386/server

Ejecutamos ldconfig para volver a cargar la configuración y reiniciamos el servidor de PostgreSQL:


$ sudo /etc/init.d/postgresql-8.3 restart

Seguimos creamos un enlace simbólico para libjvm.so:


$ sudo ln -s /usr/lib/java/jre/lib/i386/server/libjvm.so /usr/lib/libjvm.so

Para finalizar, instalamos la base de datos:


$ sudo -u postgres psql < /usr/share/postgresql-8.3-pljava/install.sql

Anuncios

Configurando un entorno chroot para empaquetar en debian con acceso a X11 con lxde en una terminal virtual


Antes de empezar el camino a ser Desarrollador Debian, me decidi a probar sid, y lo tome como mi sistema principal, pero todo estuvo bien, me acostumbre perfectamente y sobrevivir con sid, aprendí mucho sobre debian.
El problema vino cuando en mi tarea de administrador de servidores y desarrollador de paga, debí pasar una aplicación php y otra de python construidas en mi debian sid a un servidor con lenny, la actual versión estable, y no funcionó. Hubieron problemas con las librerias que no eran la misma versión.
Ante este problema y luego de revisar algunas cosas decido, luego de consultar y pedir consejos en el canal irc.debian.org#mentors y irc.debian.org#mentors-es, ademas de irc.debian.org#debian, un poco de google, reinstalar mi sistema e instalar lenny, con sid en chroot, pero tb estaba lxde que lo probe y me encanto y pense en proponer apoyar en el mantenimiento de este paquete a Andrew Lee, encargado de este paquete.

La ventaja de usar chroot es poder trabajar completamente en otro sistema de ficheros sin salir del actual, de esta forma no debo reiniciar la máquina si deseo pasar a sid o de sid deseo retornar a lenny, todo lo hago desde lenny.

Antes de empezar debo mensionar que esto lo hice en una partición separada, y que se encuentra montada en el directorio /sid, ademas debo tener instalado debootstrap

Aqui los pasos que segui hasta tener configurado sid en lenny, en chroot y con acceso a lxde en un terminal virtual

Preparar el entorno de chroot

Primero instalo debootstrap


$ sudo aptitude install debootstrap

Ahora instalo sid en el directorio que usaré como chroot


$ sudo debootstrap sid /sid/ http://ftp.debian.org/debian/

Aqui le digo a debootstrap que instale sid en la particion /sid/ y que utilize http://ftp.debian.org/debian/ como espejo de instalación de debian

Ya está listo mi entorno chroot, ahora ingreso de la siguiente manera


$ sudo chroot /sid /bin/bash

Con esto le digo a chroot que cargue la raiz de directorios que se encuentra en /sid y que que lo haga con el Bourne Again Shell

Cargar el chroot en el boot

Ahora voy a hacer que mi nuevo debian sid instalado en /sid se cargue al inicio del sistema. para esto hare unas cuantas cosas mas como montar el proc de este nuevo entorno, establecer la interfaaz de red lo y cargarlo en el inittab

Primero voy a montar hacer que el proc de sid se levante al incio del sistema. Para esto agrego unas líneas en el fstab, y luego lo monto


sudo echo proc-sid /sid/proc proc none 0 0 >> /etc/fstab
sudo mount /sid/proc

Establezco la interfaz de red local


sudo echo 127.0.0.1 localhost $(hostname) > /sid/etc/hosts

Ahora configuro las terminales virtuales. Esto lo hago ediando el archivo inittab


sudo vim /etc/inittab

Busco en el archivo las lineas:


1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6

Agrego al final la siguiente línea


8:23:respawn:chroot /sid/ /sbin/getty 38400 tty8

Quedando de la siguiente manera


1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6
8:23:respawn:chroot /sid/ /sbin/getty 38400 tty8

Para finalizar reinicio el init


init q

Para ver que esta funcionando presiono F8 y ahi esta sid corriendo en el terminal virtual 8

Instalar LXDE

Una vez funcionando ya mi entorno chroot en una terminal independiente, agrego las siguientes lineas desde el entonro chroot (desde la ventana que empeze cargando chroot en lenny) para poder actualizar mi sistema


(echo deb http://ftp.debian.org/debian/ sid main; \
echo deb-src http://ftp.debian.org/debian/ sid main ) \
> /etc/apt/sources.list

Ahora actualizo mis distribución con los nuevos repositorios


aptitude update
aptitude dist-upgrade

Ahora me voy a la terminal y me logueo como root


Debian Gnu/Linux squeeze/sid Linux tty8
Linux login : root
#

Solo queda instalar lxde


$ aptitude install lxde

…. lamanetablemente este no cargo 😦

En cuanto logre hacer correr el x en el chroot, lo publico, si alguien lo ah logrado hacer, me avisa para poder probarlo y hacerlp

Ahora ya teneoms un entorno chroot listo para usar

El mejor equipo


Habia ya empezado mi primier scrum, con un equipo de desarrollo, según yo optimo, aun creo en ello, el dia planificado para el demo de sprint fue el día viernes 21 de noviembre, y llegó pues el día, y no habiamos culminado. Mi equipo solicitó entre otras cosas, trabajar de noche, horas extras, retrazar la fecha, todo con tal de poder completar nuestras metas y poder finalizar el sprint.
No tuve el valor de decirles: no chicos, el sprint terminó y terminó, simplemente espere la llegada del lunes siguiente para el sprint diario, creyendo que el sprint se aplazaría, los sente al rededor de la mesa de reuniones y les expliqué el por que no podiamos extender el sprint, y debió ser asi, simplemente no culminamos lo trazado, la pregunta fue ¿Que hicimnos mal?, Scrum no sirve para nada, desechemos Scrum!!
Luego de asimilar que el sprint terminó analizamos que pasó. Conluimos que Scrum si sirvio, no fracasamos, nuestro primer Sprint, simplemente estuvo mal planificado y con muchas fallas. Nuestros roles estuvieron terribles, mal concepto de responsabilidades a nivel de roles y funciones, la falta de un arquitecto especialista, entre otras tantas fallas, leí un poco más, al menos eso hice, y junto a mi equipo analizamos todo aquello que salió mal y que retardo el proyecto. Fue una gran lección que nos trajo muchas ideas claras al final del día sobre como habíamos trabajado y como debemos intentar trabajar, a mi me sirvió para entender que encontré al equipo ideal.
Hoy planificaremos un nuevo Sprint!!.

Scrum y UML


Siempre he sido un creyente de la importancia de UML, pero hablkar de UML me lleva a pensar en metodologías predictivas, que ademas de ser pesadas y aburridas, no daan muchos resultados del todo óptimos. Pero UML, según entiendo, UML es tan solo un lenguaje de modelamiento, independiente de la metodlogía de desarrollo, entonces debe adaptarse a cualquier metodología.
Moddelar bases de datos relacionales en metodlogías orientadas a objetos, ya es un reto, pero es importante que todo el equipo sepa lo que debe hace, como y sobre que arquitectura trabajar, bueno apostaremos por ello y veré que sucede al final de este sprint.
Hoy dia tendremos nuestro segundo sprint, en el cual incluiremos el modelado de sistema y el modelado de la arquitectura de base de datos, sin descuidar la documentacion. Vaya que suena a metodología predictiva, pero si se mantiene una adecuada documentación y modelos de trabajo, pienso que no estaremos lejos de realizar algo con calidad.

No such file or directory


Hace unos dias, en mi centro de vtrabajo desarrollaba una aplicacion en php, bueno nuestros terminales son windozes, y trabajo es trabajo y ni vuelta que darle, y bueno cuando mis companheros de equipo de desarrollo, actualizaron su directorio de trabajo desde el servidor svn les salio un error medio extraño:

Error [2, unlink(C:/wamp/sites/myapp/templates_c/\512a83e34504f5109048256d707838fe^%%4B^4B0^4B01E7AD%%UserLayout.tpl.php) [function.unlink]: No such file or directory, C:\wamp\sites\myapp\include\smarty\internals\core.write_file.php, 45]

Luego de buscar un poco en google, y habia paginas que daban la solucion y hablaban de un tal core.write_file y bueno, yo me preguntaba: si bueno, ya… pero donde esta este archivo core.write_file.php, bueno si leen en la ultima linea del mensaje de error, aparece la ruta de este archivo, lo editan de manera que la linea que dice:

@unlink($params['filename']);

quede de la siguiente manera:

if (file_exists($params['filename'])) {
@unlink($params['filename']);
}

Y listo, ya esta funcionando sin problemas

Importancia de la Ingenieria de Software en los procesos de desarrollo


Conversaciones con programadores expirementados y muchos que recien incursionan, toman las herramientas para el modelamiento y planificacion como algo que no sirve y solo hara demorar su trabajo, sin sentido, mas que la misma perdida de tiempo en algo que ellos consideran sin importancia, ya que la programacion, según dicen, no tiene nada que ver con Administracion.

Muchas de las empresas que he concido, y las cuales he trabajado, algunas con trayectoria, otras que recien incian, adolecen de este mal.

El resultado, trabajos planificados para dos meses, que luego de los seis meses no se terminan, debo reconocer que yo tambien padeci este mal, y cuando este software se termina, se desea revisar, es dificil reconcer que hacia cada parte del codigo, incluso para su autor; claro si es que se llego al final del desarrollo, sobre tareas que nunca se planificaron y solo se hecharon a andar, sin un norte definido.
Pero todo esto no es nuevo, es un problema que trae muchos años desde que se inicio la industria del desarrollo de software, y que pase a haber pasado ya bastante tiempo y existir herramientas para poder planificar todo esto de alguna forma, muchos de los actuales desarrolladores, aun se resiten a usar estas herramientas, excusandose en distintos argumentos, ya sea que la programacion no es administracion, o que no es documentacion, o la documentacion no sirve, en fin….

Cuando los programadores se resisten y no quieren hacer las cosas bien, existen muchos argumentos, hasta los mas pintorescos o irritrables como “Las metodologias no sirven”. Y cuando los trabajos no salen como realmente se quiere.. también existen argumentos, como: El desarrollo de software no es como uno piensa, o era mas complicado de lo que pense, en fin, yo también los use, y en realidad, suele ser asi, pero la unica rázon, la falta de estudio del problema y su posterior planificación.

Las Ingeniería de Software es la rama de la ingeniería que crea y mantiene las aplicaciones de software aplicando tecnologías y prácticas de las ciencias computacionales, manejo de proyectos, ingeniería, el ámbito de la aplicación, y otros campos.

La Ingeniería de Software entonces nos ayuda a prevenir todos estos males, pero más importante que usar la Ingeniería de Software para ayudar en los procesos de desarrollo de software, es que los programadores entiendan la importancia de esto.

Además de la importancia de esta rama, es importante saber que existen también certificaciones a la calidad de software como por ejemplo CMMI, que evalua la capacidad de madurez de los procesos de desarrollo de software, el cual hace que un producto desarrollado por empresas con esta certificacion tenga un valor mucho mayor que las que nolo tienen.

También tenemos normas que contratantes exigen antes de decidir a que empresa desarrolladora confiaran sus necesaidades de software, normas como la ISO/IEC 12207 o la ISO/IEC 15504, que hablan sobre procesos desarrollo de software, que no es mas que Ingeniería de Software.

En conclusion, si queremos ser competitivos en la industria del desarrollo de software, produciendo software de calidad, debemos valernos de la Ingeniería de Software para conseguir este objetivo, las reglas estan dadas, las normas también, entonces, no hay que ser esquivos; pero si lo unico que buscamos es desarrollar software a corto plazo que nos rinda ganancias instantaneas, sin garantias y calidad para el consumidor, entonces tomemos el camino facil, y mantengamonos en la parte de los malos programadores, pero si lo que buscamos es producir software de calidad…. ¿Será mas dificil?, no, sólo será cuestión de doctrina y buen hábito, y nuestro producto será de calidad.

¿Qué lenguaje debo escoger para mi trabajo?


Hace un par de dias, un muchacho solto una pregunta en la lista de python en
español, que lenguaje debería usar para una aplicación web, esta persona tenía conocimientos de PHP, pero ninguna en python, mensionó que había escuchado que python era un lenguaje sencillo y muy completo, y tal vez este podía ser el
momento para empezar a desarrollar con Python.

Pienso que cualquier momento es bueno para empezar a desarrollar en un lenguaje nuevo, excepto, cuando este momento implica trabajo, creo que la respuesta es simple, en cuestion de trabajo, lo que importa es el dominio del lenguaje, para facilitar el trabajo, por esta razon, por mas sencillo que sea el lenguaje, el dominio del mismo implica una inversion de tiempo, tiempo el cual retrasara los plazos de entrega, sin contar ademas de esto, que la falta de dominio, creará una falta limitación de herramientas, que lo mas probable es que se desconozcan en un principio, las cuales podemos conocer de un lenguaje que ya hemos usado con anterioridad.

Definitivamente Python es un lenguaje sencillo y completo, y cualquier momento es el perfecto para empezar a aprenderlo, y mejor aún si este momento esta acompañado de un proyecto, pero no existe la perfección, y por lo tanto el momento imperfecto también existe, el que le dice a un desarrollador que tiene un plazo para presentar un determinado trabajo.

Claro esta que este ejemplo es tan solo una condicional a la hora de escoger el lenguaje, en cuanto a la habilidad del desarrollador se refiere, pero existen otras tantas, como la arquitectura en la que se desarrollara la aplicacion, los equipos que se cuentan, si la aplicacion sera para un usuario o multiusuario, si será cliente servidor o no, la plataforma sobre la que corre, en fin, antes de escoger un lenguaje, hay que estudiar todo esto, pero un factor principal es la habilidad del desarrollador sobre un determinado lenguaje.