Feed
Posts
Comentarios

QuickHowTo: Instalar Jenkins en CentOS 5.5

Aquí les dejo una crónica de la instalación de Jenkins en CentIOS 5.5 por si les interesa empezar a utilizarlo para sus soluciones de CI.

Acá pueden encontrar las instrucciones oficiales, yo decidí instalarlo standalone, es decir sin tener un Tomcat corriendo.

El primer paso es agregar los repositorios de Jenkins y su firma a nuestro yum, para ello ejecutamos los siguientes comandos como root:

# wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
# rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
# yum update && yum install jenkins

El siguiente paso es configurar el servicio en caso de que no nos sirva alguno de los parámetros por defecto del mismo, para eso necesitamos editar el archivo/etc/sysconfig/jenkins

En mi caso cambie el puerto por defecto de 8080 a 5353 ya que tengo el 8080 ocupado por otros servicios. Esto lo hice modificando la variable JENKINS_PORT de la siguiente manera:

JENKINS_PORT="5353"

El siguiente paso es arrancar el servicio, para ello como root corremos

# /etc/init.d/jenkis start

Es muy común que en este paso se produzca una excepción similar a la siguiente:

Starting Jenkins Exception in thread "main" java.lang.reflect.InvocationTargetException
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:616)
 at Main._main(Main.java:127)
 at Main.main(Main.java:96)
 Caused by: java.lang.UnsatisfiedLinkError: /tmp/jna/jna7112420072244666734.tmp: /tmp/jna/jna7112420072244666734.tmp: failed to map segment from shared object: Operation not permitted
 at java.lang.ClassLoader$NativeLibrary.load(Native Method)
 at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1750)
 at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1646)
 at java.lang.Runtime.load0(Runtime.java:787)
 at java.lang.System.load(System.java:1022)
 at com.sun.jna.Native.loadNativeLibraryFromJar(Native.java:745)
 at com.sun.jna.Native.loadNativeLibrary(Native.java:674)http://blog.mibanez.com.ar/wp-admin/post.php?post=193&action=edit
 at com.sun.jna.Native.<clinit>(Native.java:115)

El problema se debe a que jenkins crea una librería en el directorio temporal /tmp y trata de ejecutarla, pero generalmente dicha partición esta montada con el bit noexec por seguridad.

La solución es muy simple, lo que tenemos que hacer es instruir a la maquina virtual de java para que use un directorio temporal diferente, en mi caso decidí usar

/usr/local/java/tmp

Para crearlo y darle los permisos adecuados ejecutamos:

# mkdir -p /usr/local/java/tmp
# chmod 777 /usr/local/java/tmp

Y luego modificamos el script que arranca Jenkins para que use esta nuevo directorio como temporal. Para ello editamos el script /etc/init.d/jenkins y modificamos la variable JENKINS_JAVA_CMD para que quede de la siguiente forma:

JENKINS_JAVA_CMD="$candidate -Djava.io.tmpdir=/usr/local/java/tmp"

Con esto ya deberíamos poder arrancar el servicio y configurarlo yendo con el navegador a http://miserver.com:5353

Una ver que hacemo esto Jenkins se va a autoconfigurar. Noten que en ningun momento configuramos usuarios o privilegios, para crear un usuario y que solamente ese usuario se pueda loguear vamos a Manage Jenkins, luego a Configure System. Una vez en esa pantalla elegimos Enable Security luego en Security Realm pueden elegir el sistema que prefieran, en mi caso elegi Jenkin’s own user database. Una vez hecho esto, guardamos los cambios con el boton Save.

En ese momento tendremos que crear un usuario, y recien ahi tenemos seguridad habilitada para nuestro Jenkins.

En proximos posts, vamos a ir configurando la pequeña bestia que es este sistema de Continuous Integration.

Share

Resulta que he tenido que construir parte de un sitio que envíe correos electrónicos en formato HTML con css e imágenes recientemente. El tema de las imágenes lo resolví fácilmente gracias a swiftmailer, en un post próximo comentaré como. Pero con las css no había caso. Llegué a incluir completos los archivos de css con sus correspondientes tags <style> y no había caso, en el correo que se recibía eran ignorados.

Fué por ello que decidí googlear el problema (debería haber hecho esto antes de siquiera ponerme a desarrollar) y descubrí que la mayoría de los clientes de correo electrónico ignoran las css que están en el header, pero encontré un sitio muy bueno en el que nos presentan un script de conversión de HTML+CSS a HTML con los estilos en línea automáticamente.

Funciona de manera trasparente, podemos ingresar tanto el código HTML cómo la url de la página en la que queremos basar nuestro correo electrónico y haciendo click en el botón “Do it do it!” se genera el HTML que necesitamos enviar en los correos para que se reciban correctamente.

El sitio se llama Premailer y pueden acceder haciendo click aquí.
Saludos y suerte con sus emails!

Share

Les dejo una pequeña guía para renombrar una aplicación en Symfony y no morir en el intento:

  1. Renombramos la carpeta de la aplicación. p.e. apps/frontend a apps/miapp
  2. Renombramos los test funcionales de manera similar. p.e. test/functional/frontend a test/functional/miapp
  3. Opcionalmente renombramos el controlador frontal. p.e. web/frontend.php a web/miapp.php y web/frontend_dev.php a web/miapp_dev.php
  4. Actualizamos los controladores frontales, cambiando el nombre de la aplicación en la linea que tiene el mismo. p.e. en web/miapp.php cambiamos $configuration = ProjectConfiguration::getApplicationConfiguration(‘frontend’, ‘dev’, true); por  $configuration = ProjectConfiguration::getApplicationConfiguration(‘miapp’, ‘dev’, true);
  5. Renombramos el archivo de configuración del proyecto al nuevo nombre. p.e. apps/frontend/config/frontendConfiguration.php a apps/frontend/miapp/config/miappConfiguration.php
  6. Editamos el archivo de configuración del proyecto y cambiamos el nombre de la clase. p.e. en apps/miapp/config/miappConfiguration.php cambiamos class frontendConfiguration extends sfApplicationConfiguration por class miappConfiguration extends sfApplicationConfiguration
  7. Borramos manualmente la carpeta cache/frontend
  8. Limpiamos la caché y listo!

Esta guía está basada en la que escribió Fabian Potencier acá , pero actualizada a symfony 1.2.x

Acá va la versión en mi burdo inglés para el que la necesite:

Here is a litte how to to rename a Symfony application and don’t die trying:

  1. Rename the application folder. i.e. apps/frontend a apps/myapp
  2. Rename the functional test in the same fashion. i.e. test/functional/frontend a test/functional/myapp
  3. Optionally rename the front controllers. i.e. web/frontend.php a web/myapp.php y web/frontend_dev.php a web/myapp_dev.php
  4. We update the front controllers, changing the applicattion name within them. i.e. in web/myapp.php we change $configuration = ProjectConfiguration::getApplicationConfiguration(‘frontend’, ‘dev’, true); for  $configuration = ProjectConfiguration::getApplicationConfiguration(‘miapp’, ‘dev’, true);
  5. Rename the project’s configuration file to the new name. i.e. apps/frontend/config/frontendConfiguration.php to apps/frontend/miapp/config/myappConfiguration.php
  6. We change the class name within the project’s configuration file. i.e. in apps/myapp/config/myappConfiguration.php we change  class frontendConfiguration extends sfApplicationConfiguration for class myappConfiguration extends sfApplicationConfiguration
  7. Manually delete the folder cache/frontend
  8. Clear the cache and voilá!

This howto is based on the one written by Fabian Potencier here , but updated to symfony 1.2.x

Share

Nueva versión de hyHelpers – 0.0.9

Gente les cuento las últimas funcionalidades que he incorporado en el hyHelpers:

  • 0.0.7:  Se corrigió un error que impedía el correcto funcionamiento de los botones editar y borrar de los datos precargados cuando la tabla tenía más de una columna.
  • 0.0.8:  Se corrigió un error que se presentaba cuando los datos precargados compartían valores en el cual se perdían varios datos. Por ejemplo si precargabamos un idPersona 15 y un idFactura 15, el idFactura se “perdía”.
  • 0.0.9: Agregué el parametro $general_params[‘show_only’]. Si este parametro está en true, no se generan ni el javascript ni los botones.

Los invito a que se bajen la última versión del la página del proyecto y comenten al respecto de la misma. Si alguien quiere que se agregue alguna funcionalidad, soy todo oidos.
Saludos!

Share

hyHelpers 0.0.6 listo!

Gentes, hacé minutos nada más subí la versión 0.0.6 del hyHelpers que lanzamos anteriormente esta semana.

Estuve conversando con Agustín Casiva, quien me comentó un par de cosillas:

1. El codigo es imposible de entender.

2. Con ExtJS podés hacer lo mismo, pero ya está todo testeado y soportado por una empresa.

Igualmente les comento que pensamos seguir desarrollando el proyecto, e invito a toda la comunidad a que le peguen una hojeada, por ahí le sirve a alguno.
Ah, otra cosa es que la documentación es, a este punto, inexistente, pero si puedo el fin de semana próximo me escribiré un pequeño howto de como usarlo y para que sirve.

Saludos!

Share

SG1 – Grilla jQuery dinámica

Por medio de este sencillo pero emotivo acto, presentamos de Hydra Consultoría y Servicios el paquete hyHelpers.

La url del proyecto en Google Code es https://code.google.com/p/hyhelpers

El proyecto cuenta hoy por hoy con 2 archivos php listos para usar como helpers en symfony.  Se desarrollaron y funcionan bajo la versión 1.2.8 del framwork pero son fácilmente utilizables como librerías en cualquier proyecto PHP.

En el archivo hyJqueryHelper.php encontrarán una función watch_and_show que genera el código jQuery necesario para ocultar parte de un formulario html basado en su id dependiendo del valor de un componente html, también por id.

En el archivo hyFormHelper.php encontrarán dos funciones: wizard_navigation_buttons que básicamente se usa para generar la cantidad de controles <input> que quieran y generate_sg1 que es la vedette del paquete. SG1 es una tabla construida en html + jquery que permite hacer ABM contra los controles html que nosotros queramos.

Por ahora la única documentación existente es la de phpdoc que encontrarán en el interior de ambos archivos.

Espero que a alguien le sirvan los helpers y sepan que se encuentran bajo desarrollo pesado y constantemente se están depurando y agregando funcionalidades.

Stay tunned!

Share

Pringao HowTo. Revisitando un clásico.

Les dejo un link a una de las tantas versiones del Pringao HowTo. Es un texto humorístico que anda dando vueltas por la red hace mucho tiempo, pero nunca pierde su vigencia.

Espero que les haga largar un lagrimón de la risa.


Pringao HowTo
visto en sromero.org

Share

Calores Infernales? Que mejor que un AC

Hace ya más de 3 días que me es imposible casi dormir debido a los terribles calores que hacen en la ciudad de Resistencia donde vivo actualmente. Por ese motivo se hizo imperativo el conseguir un acondicionador de aire.

El tema es que para instalarlo debo esperar hasta el lunes al menos, pero el calor y la desesperación fueron tales que me vi obligado a realizar una implementación de testing mientras tanto.

Aquí les dejo las fotos:

AC sobre mesa de luzMesa de luz sobre cajoneraCarton superior para tapar resto de la ventana

Después les cuento como funcionó el invento, pero hasta ahora va casi una hora funcionando y salvo pequeñas gotas de agua que se filtran está todo en orden.
Saludos!!

Share

Estos no son los Captchas que estás buscando

Les comparto este genial comic. La traducción más abajo.

Traducción:

Viñeta 1:

“Estos Captchas realmente evitan que el software automatizado acceda a las cosas?”

“Sip”

Viñeta 2:

“Entonces todo lo que necesitas para congelar un robot es unas cuantas palabras deformadas?”

“Aparentemente”

Viñeta 3:

“Por que preguntas?”

Viñeta 4:

“Usted está deshabilitando todos los compactadores de basura de la Estrella de la Muerte. Por favor retipee Honeydew thights para continuar

“Mierda”

Visto en DorkTower

Share

Jason Statham no existe!

Esta semana tuve la oportunidad de mirar Crank y Crank 2, dos películas protagonizadas por el inglés Jason Statham. En ambas pelis la trama es similar: el pesonaje principal debe encontrar un elemento en un período muy corto de tiempo ya que su muerte es inminente.

Pero el truco está en que para retrasar su muerte puede realizar una serie de actividades de los más variopintas y extrañas como tener sexo en la vía pública, frotarse contra extraños, electrocutarse, inyectarse epinefrina y un largo etc.

El tema es que, como en toda buena película de acción, el héroe, si se lo puede llamar así, es sobrehumano, tiene una actitud de kickass terrible, se levanta todas las minitas, nunca le pegan, etc, etc.

Y ahí fue cuando me di cuenta de que en todas las peliculas de dicho actor, la actitud y maneras son las mismas, así que llegué a la conclusión de que así como Bruce Willis siempre es Jhon McLane, Jason Statham en realidad no existe, es Chev Chelios quien actúa. Acá les dejo una lista de sus pelis mas recordadas, y como deberían llamarse en realidad:

“Lock Stock and Two Somking Barrels” -> “Chev Chelios se roba dos pistolas viejas con sus amigos”

“Snatch” – “Chev Chelios es manager de un boxeador malo y se mete en problemas con gitanos”

“The One” – “Chev Chelios es un policia de la Autoridad Multiuniverso”

“Mean Machine” – “Chev Chelios preso en Inglaterra con unos que juegan futbol”

“The Trasporter” – “Chev Chelios maneja autos alemanes en Europa”

“The Italian Job” – “Chev Chelios y sus amigos se vengan de un ex amigo”

“Collateral” – “Chev Chelios se mudo a Estados Unidos y le lleva un maletín al vaguito de Top Gun que ya esta viejo”

“Transporter 2″ – Chev Chelios maneja autos alemanes en Estados Unidos”

“Crank” – “La historia real de Chev Chelios”

“The Bank Job” – “Chev Chelios viajo en el tiempo para robar un banco en Inglaterra”

“Transporter 3” – “Chev Chelios se fue a manejar de vuelta sus autos alemanes en Francia”

“Crank: High Voltage” – “Chev Chelios empieza a transformarse en cyborg”

Bueno, la idea era un poco de humor. Ayer cuando se me ocurrio la idea no podía parar de reirme, espero que ustedes sí puedan reirse un poco.

Share

Older Posts »