viernes 23 de diciembre de 2011

Cuento de Navidad (proyectos del pasado, presente y futuro)

Pensando en mis planes para el 2012, se me ocurrió que lo mejor era revisar el 2011... de repente me dí cuenta que uno de esos propósitos que cada año se repetía ya no estaba allí... quería instruirme sobre:

Gestión de Proyectos


LascauxSiempre intento tener presente que me dedico a los servicios, mi trabajo no es un fin en si mismo sino una ayuda para conseguir el verdadero objetivo. Esto me ha llevado a hacer cosas como formarme en diseño CAD o a informarme sobre la vida de las urgencias hospitalarias...

En los últimos años la mayor parte de mi trabajo ha estado relacionado con proyectos, como parte, como el todo, dando soporte, reaccionando a... por lo que se me pasó por la cabeza que formarme en algo como PMBOK sería interesante. A principios de año lo logré.

PMBOK es algo así como la biblia del Project Management Institute y que luego a derivado en alguna ISO (10006 o 21500) o ITIL de forma específica para servicios TIC.

Creo que al principio pensaba mejorar mi día a día intentando gestionar como un proyecto ciertos encargos que me caían, pero...


Cuanto más conocía sobre PMBOK más me hacía a la idea de que no podría aplicar sus técnicas. Y es que tengo algunos indicios de que no estoy en el entorno más propicio para este tipo de cosas. Por ejemplo: observar de como un proyecto acumula 3 años de retraso... cuando solo duraba 2!!

Si mi objetivo era adaptarme mejor mi entorno, había fracasado estrepitosamente... #fail

Pero no podía quedarme así... ¿y si en lugar de un metodología para que todo sea perfecto, aplico una para cuando todo es "imperfecto"?


Artesanía de Sistemas

Supongo que cuando te mueves en profesiones con más historia, definir un proyecto, aunque no sea la panacea, será mucho más ágil. En informática los límites son difusos, las herramientas no suelen estar maduras, etc, etc... En definitiva, poner orden se me intuye complicado.

Slightly altered home working environment - P1050526

ITIL lo pretende, sobretodo agilizando la resolución de incidencias y creando la figura de los "problemas", a los que dedicaremos más tiempo. Pero, sinceramente, no he visto a ningún sysadmin tan "ilusionado" con ITIL como veo a algunos desarrolladores con SCRUM.

Quizás por eso pueda llegar a tener sentido trabajar con otra mentalidad, no una que logre que todo sea perfecto, sino la que nos prepare para cuando las cosas sean "imperfectas".

Últimamente podemos leer artículos sobre el trabajador del mañana, uno que ya no trabajará toda su vida en la misma empresa, se especializará, algo parecido a autónomos pero generalizado. Se acabó lo de tener un tiempo de aclimatación, conocer a los compañeros, aprender las formas, y todo a velocidad de vértigo...

Ahí entiendes que los proyectos, cada vez tendrán más papeletas para ser "imperfectos".

No pretendo reinventar la rueda, estoy seguro que si consigues llegar al nirvana del ITIL el mundo puede ser un lugar mejor. Puede que parezca algo pesimista o conformista (cuando dices que las cosas no serán perfectas, la gente se asusta), pero creo que intentar que algo mejore, no puede ser ni uno ni lo otro.

Lo dejaremos en que necesitaba una excusa para volver a escribir en el blog =)

Tengo escritos tres puntos, para empezar el 2012, por lo que solo falta desear Buenas Fiestas, y animaros a reflexionar sobre vuestros propósitos... para el que los tenga...


Imagen: Lascaux
Imagen: Slightly altered home working environment


Creative Commons License
Esta obra está bajo una licencia de Creative Commons.

martes 31 de mayo de 2011

Instalación de Sun JDK en Linux para "torpes"

Sencillo ¿¿no...??

Java Coffee House, Thamel, Kathmandu, NepalEs una tarea que seguramente todos hemos realizado: aplicaciones de escritorio, plug-in para el navegador, servidores J2EE...

Este último caso es al que me he enfrentado recientemente: Instalación de JDK 1.6 Update 18 para montar un Weblogic Server 10.3.2 para Grid Control 11g. Y me he encontrado con una situación, infinidad de manuales y ninguno que me guste.

Aunque es una tarea relativamente sencilla creo que se merece unas lineas.

Introducción
Cualquier aplicación escrita en Java debería poder ejecutarse si tenemos instalado el Runtime adecuado, que no es más que un entorno de ejecución Java donde nuestra aplicación encontrará todo lo que necesita para funcionar.

Eso implica instalar la versión correcta a nuestro sistema, ya que para que las aplicaciones sean "portables" es necesario una gran cantidad de versiones del Runtime de Java que se adapten perfectamente a nuestro sistema.

Ésto supone un primer problema:

¿Qué versión de Java descargo?
Varias aclaraciones, aunque las versiones de Java se nombran con números: 4, 5 y 6; el paquete que descarguemos añade un 1 delante: 1.4, 1.5 y 1.6. No he perdido mucho tiempo en buscar información sobres esto, pero si alguien conoce la explicación... encantado de añadirlo.

Hay multitud de ediciones diferentes, me voy a centrar en el JDK de la Java Platform Standard Edition (Java SE): Java SE Downloads

Pero como quizás no sea la adecuada para ti, puedes descargar cualquier versión desde el "archivo" de Oracle: Archive: Java[tm] Technology Products Download

A donde os redireccionará el antiguo enlace de Sun: http://java.sun.com/products/archive/ y donde se puede encontrar cualquier versión que necesites. En mi caso la recomendada para Grid Control es la JDK 1.6 Update 18.

coffee klatschInstalación
Hay dos opciones de instalación: RPM o auto-instalable. Si vuestro sistema utiliza packetes RPM, creo que no hay duda, y sobre la instalación tampoco creo que las tengamos:
  1. Una vez descargado el archivo jdk-6u18-linux-x64-rpm.bin lo convertimos en ejecutable con: $ chmod u+x jdk-6u18-linux-x64-rpm.bin
  2. Ejecutamos $ ./jdk-6u18-linux-x64-rpm.bin y seguimos las pocas indicaciones.
  3. Borramos los RPMs si queremos ahorrar espacio.
No dudo que esta parte la habréis hecho infinidad de veces, justo después ¿os encontráis con ésto?

# java -version
java version "1.5.0"
gij (GNU libgcj) version 4.4.5 20101112 (Red Hat 4.4.5-2)

Configuración
A partir del 2006 Sun liberaliza Java, por lo que nos encontramos varias alternativas lo suficientemente válidas para la mayoría de casos. En el ejemplo anterior GNU Compiler for Java pero también se puede optar por OpenJDK.

Para el caso que describo, Weblogic Server necesita el Development Kit de Sun, sin opciones, si configuramos el JAVA_HOME y el PATH con la nueva instalación, ya podríamos acabar, pero...

Gracias al comando "alternatives" podremos gestionar tanto los "runtimes" que tenga nuestro sistema como el nuevo que acabamos de instalar, evitando muchas de las confusiones que puede ocasionar la configuración "manual".

La instalación que hemos realizado la tenemos en /usr/java, además de dos enlaces latest y default que nos servirían en el caso utilizar solo el JDK de Sun. Los "runtimes" que vengan en el sistema seguramente estarán en /usr/lib/jvm, por lo que hacemos un enlace a la nueva instalación:

# ln -s /usr/java/jdk1.6.0_18 /usr/lib/jvm/java-1.6.0-sun

Averiguamos la prioridad de las instalaciones:

# alternatives --display java | grep priori

Lo siguiente será instalar nuestra nueva "alternativa" java con un nivel de prioridad superior al de las ya instaladas:

# alternatives --install /usr/bin/java java /usr/lib/jvm/java-1.6.0-sun/bin/java 16050 \
--slave /usr/bin/rmiregistry rmiregistry /usr/lib/jvm/java-1.6.0-sun/bin/rmiregistry \
--slave /usr/lib/jvm/jre jre /usr/lib/jvm/java-1.6.0-sun/jre/ \
--slave /usr/lib/jvm/jdk jdk /usr/lib/jvm/java-1.6.0-sun

Si nos interesa, podemos hacer lo mismo con el kit de desarrollo completo:

# alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-1.6.0-sun/bin/javac 16050 \
--slave /usr/lib/jvm/java java_sdk /usr/lib/jvm/java-1.6.0-sun \
--slave /usr/bin/javadoc javadoc /usr/lib/jvm/java-1.6.0-sun/bin/javadoc \
--slave /usr/bin/javah javah /usr/lib/jvm/java-1.6.0-sun/bin/javah \
--slave /usr/bin/jar jar /usr/lib/jvm/java-1.6.0-sun/bin/jar \
--slave /usr/bin/rmic rmic /usr/lib/jvm/java-1.6.0-sun/bin/rmic \

Por último, volvemos a configurar la alternativa basándonos en la prioridad:

# alternatives --auto java
# alternatives --auto javac

Y por último, la configuración del man obtenida del siguiente blog:

# (cd /usr/lib/jvm/java-1.6.0-sun; txt="alternatives --install /usr/share/man/man1/java.1 \
man-java.1 /usr/lib/jvm/java/man/man1/java.1 1421 "; \
for f in man/man1/*; do f=`basename $f`; if [ "x$f" != "xjava.1"]; \
then txt="$txt --slave /usr/share/man/man1/$f man-$f /usr/lib/jvm/java/man/man1/$f"; fi; done; `$txt`);

El resultado debería ser parecido a:

# java -version
java version "1.6.0_18"
Java(TM) SE Runtime Environment
Java HotSpot(TM) Server VM

Coffee #2
Entorno
No, no podemos obviar las variables de entorno. Para ello crearemos un archivo en /etc/profiles.d llamado java.sh con el siguiente contenido:

#!/bin/sh
export JAVA_HOME=/usr/lib/jvm/jdk
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

Oracle
Solo a modo anecdótico, os dejo las recomendaciones de Oracle para el JDK de una instalación de Weblogic Server, digo anecdótico porque creo que para temas no "estrictamente" relaciondos con sus productos no siempre es la mejor fuente de información:
  • No se debe actualizar el JDK, es importante seguir la matriz de versiones certificadas.
  • Instalar en un lugar seguro (¿WTF?), Oracle recomienda ubicarlo bajo el
    directorio $ORACLE_HOME/Middleware, incluso a costa de recibir mensaje de error durante la instalación de WLS (totalmente en desacuerdo, si somos capaces de instalar un Grid Control, deberíamos serlo de mantener el JDK "a salvo"!!)
  • Recomendable jdk 1.6.0_18,  parecen haberse "estancado" en la versión 10.3.2 de WLS, por lo que la versión de JDK queda también condicionada.
Referencias

Imagen: Java Coffee House, Thamel, Kathmandu, Nepal
Imagen: coffee klatsch
Imagen: Coffee #2

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.

domingo 22 de mayo de 2011

Un Fantasma en el Cascarón

La #SpanishRevolution bien se merece un #offtopic ... y de los grandes:

Hace 16 años Mamoru Oshii, director japones, se inspiró en un manga para crear Ghost in the Shell.

A Fuchikoma, a Tachikoma Type 1 and a Tachikoma Type 2¿Sorprendidos? si, estoy hablando de anime, animación Japonesa y para colmo con ambientación Cyberpunk!! Y... ¿Qué pinta esto aquí? Dejarme cuatro lineas para explicarlo:

Los personajes del manga y la trama de un thriller político, sirven al director como excusa para plantear una pregunta: ¿Cómo definimos la vida?

No, no voy a ponerme a filosofar, pero aunque la he visto varias veces (y la recomiendo), había un punto que nunca acababa de entender.

Por fin lo he logrado, y ha sido durante esta semana, ha sido durante la #spanishrevolution.

Como toda película futurista plantea dos avances tecnológicos, y os puedo asegurar que nunca habría acertado el orden en el que llegarían:
  • La población modifica sus cuerpos convirtiendose en cyborgs, "cascarones", por lo que es necesario un escáner para diferenciar a las personas "vivas" de simples IA's.
  • Se muestra el futuro de Internet, cerebros conectados a la red 24h al día...

Y entonces empieza lo difícil, el punto que me costaba más de lo normal: de semejante Red nace una "consciencia", un fantasma imposible de distinguir con el resto de personas.

El concepto Inteligencia Colectiva ha evolucionado.

A los que se dedican al Social Media y al Marketing les encanta esto... ¿cómo puedo Ghost in the Shell: Laughing Manutilizar la opinión de la opinión en Internet, la Inteligencia Colectiva para mejorar mi producto? ¿puede la la IC contarme que nuevos servicios necesita? ¿puedo preguntarle si tiene buena opinión sobre mi empresa? ¿y cambiar su opinión? ¿puedo manipularla para que compre mi producto?

Evidentemente muchas empresas y "gurus" han salido escaldados... y es que, para mi, el tema es mucho más complejo que la visión simplista del párrafo anterior. La IC se auto-regula, corrige fallos evolucionando y por fin, ha tomado consciencia de ella misma, ha nacido el "fantasma"...

Ha nacido un fantasma en la red y se ha instalado en los cascarones de muchos de nosotros...

(y yo que pensaba que la cibernética evolucionaría más rápido =D)


Imagen: A Fuchikoma, a Tachikoma Type 1 and a Tachikoma Type 2
Imagen: Ghost in the Shell: Laughing Man

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.

domingo 15 de mayo de 2011

#Virtathon

Hoy toca hablar de: Conferencias.

Conferencias, Seminarios, ferias... cuando empiezas a especializarte, descubres que no todo es estar detrás de la pantalla, también puedes asistir a una serie de eventos que organizan las marcas, empresas o incluso organizaciones de usuarios.

En España tenemos a CUORE que celebró en Marzo su XX Congreso, y al que por desgracia no pude asistir. Y esa es una gran constante, no se a vosotros, pero ir a los congresos es COMPLICADO.

Fechas, precio, viaje, hotel... es muy posible que la empresa cubra los gastos de alguno de los que lea estas lineas, pero otros no tendrás esa suerte. Y es por eso que me ha gustado tanto la iniciativa que pretendo presentar (como siempre - Aviso: no gano nada con ésto).


Virtathon organizada por BrainSurface, para que os hagáis una idea pretender concentrar en una web a usuarios de Oracle, Java y MySQL ofreciendo herramientas de colaboración: chat, vídeo, documentos, foros... hasta gestión de proyectos. Y ahora, lo último, una Conferencia Virtual.


Del 16 al 21 de Julio, bajo un precio reducido, sin viajes, hoteles... se puede asistir a decenas de sesiones, de varios niveles y de multitud de temas. Pero la parte innovadora no queda ahí, las sesiones puedes darlas tu o proponer que se hagan o incluso recomendar a alguien, los conferenciantes pagan una suma de dinero y después reciben otra en función de como ha ido su sesión.


A mi la idea me ha sorprendido, diría que es la primera vez que se organiza y aunque estas cosas pueden salir no tan "bien" como uno espera, yo ya me he apuntado.

Dejo también el enlace de uno de los "conferenciantes" explicando la experiencia en su blog, Arup Nanda: Speaking at a Virtual Conference #VirtaThon

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.

domingo 8 de mayo de 2011

En el Nombre de la Interfaz (VLAN NAME TYPE)

Durante mucho tiempo las única razón para configurar 802.1Q en las interfaces de un equipo fueron:
  • No tenemos dinero para un Cisco y estamos montando un router en un equipo viejo
  • El Administrador de la Red nos cae mal y vamos a montar un equipo con una IP de cada segmento...
Ahora con los Blades compartiendo infraestructuras y con la virtualización, quizás nos vemos obligados a marcar nuestros paquetes con el 'sello' correcto.

802.1Q es el estándar de la IEEE para etiquetado de paquetes, que permite que, aunque compartamos infraestructuras, no existan interferencias entre las diferentes redes. Básicamente lo que llamamos: trunking.

Pero, pasemos a la práctica. Para configurar una interfaz dot1Q, lo más sencillo es:
  • copiar el script de inicio de nuestra interfaz, por ejemplo /etc/sysconfig/network-scripts/ifcfg-eth0 a /etc/sysconfig/network-scripts/ifcfg-eth0.105
  • cambiar el parámetro "VLAN DEVICE" para reflejar el cambio de nombre eth0.105
  • añadir VLAN=yes al final
¿Demasiado fácil? vamos a complicarlo un poco más...

Y si resulta que estamos montando un sistema de alta disponibilidad, (por ejemplo Oracle RAC) que utiliza IP's virtuales (vip's). En Linux al añadir otra ip a la interfaz se añaden dos puntos y un identificador numérico. El resultado final será algo parecido a ésto:

eth0.105:1

¿Alguién ha visto alguna vez una interfaz así? ¿Os imagináis el quebradero de cabeza para los scripts en bash?

Rack @ WorkPor suerte en Linux tenemos dos formatos para las interfaces con vlan's:
  • DEV_PLUS
  • VLAN_PLUS
El método más habitual es DEV_PLUS, pero si utilizamos VLAN_PLUS obtendremos interfaces del estilo vlan105, vlan609 y si añadimos IP's secundarias vlan105:1 o vlan609:1. Otra ventaja se que independizamos el nombre de la interfaz física, que en algunos casos puede sernos de utilidad.











Para configurar este método de nombrar interfaces utilizaremos los parámetros:
  • DEVICE, con el nombre en formato vlan###
  • VLAN_NAME_TYPE, con el valor VLAN_PLUS_VID_NO_PAD para indicar que utilizaremos interafaces del tipo 'vlan###'
  • PHYSDEV, para indicarle al sistema la interfaz física asociada, ya que no podrá deducirla del nombre de la interfaz
  • VLAN, con el valor 'yes' como antes

El resultado es un archivo como éste "ifcfg-vlan240":

DEVICE=vlan240
VLAN_NAME_TYPE=VLAN_PLUS_VID_NO_PAD
PHYSDEV=eth0
BOOTPROTO=static
BROADCAST=10.0.0.255
HWADDR=00:01:02:03:04:05
IPADDR=10.0.0.33
NETMASK=255.255.255.0
NETWORK=10.0.0.0
ONBOOT=yes
GATEWAY=10.0.0.1
VLAN=yes

También se puede configurar "online" con el comando vconfig, pero los cambios no son persistentes y a menos que ocurra algo raro (no tenemos claras las vlan's de nuestra red, o nuestro networker particular está jugando con ellas) no creo que sea necesario conocer demasiado ese comando.

Imagen: Rack @ Work

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.