Ir al contenido principal

Entradas

Mostrando entradas de 2011

Instalar Tomcat 7, JBoss AS 7 y Subversion en CentOS

Instalando Tomcat 7
Este artículo lo explica muy bien: http://davidghedini.blogspot.com/2011/02/install-tomcat-7-on-centos-rhel.html

Aunque el tutorial es para una de las primeras versiones de tomcat 7, también funciona con la mas reciente y les dejo el enlace:
wget http://www.gtlib.gatech.edu/pub/apache/tomcat/tomcat-7/v7.0.23/bin/apache-tomcat-7.0.23.tar.gz

Instalando JBoss 7
Primero recomiento leer una introducción a JBoss 7

Como no encontré un buen tutorial para JBoss 7, decidí seguir el de la version 6: http://davidghedini.blogspot.com/2011/03/install-jboss-6-on-centos.html y también este otro:
http://community.jboss.org/wiki/StartJBossOnBootWithLinux. También sería bueno seguir las mejores prácticas: http://jboss.ociweb.com/wiki/JBossSupport/BestPractices

Al intentar desplegar la aplicación me he encontrado con algunos problemitas.

Errores:
Cannot find scanner class. hibernate.ejb.resource_scanner=org.jboss.as.jpa.hibernate4.HibernateAnnotationScanner

JBoss AS 7 tiene una nueva …

MTI se vuelve mas ágil

En la Oficina de Ingeniería y Sistemas del Ministerio de Transporte e Infraestructura estamos trabajando en un proyecto piloto implementando la metodología SCRUM. Es apenas nuestro primer Sprint y nos falta mucho por aprender pero estamos haciendolo lo mejor posible. 




Desplegar proyectos JSF y JPA automáticamente desde eclipse

Recientemente pasé varios dias compilando y recompilando un proyecto JPA y luego copiando el jar generado a la carpeta de librerías del servidor. Todo esto para ejecutar otro proyecto JSF que dependía del primero y no lograba hacer que el eclipse hiciero esto automáticamente.

Al fin he dado con la configuración que hay que hacer en el eclipse, para que este lo haga automáticamente y es lo que presento a continación:

Click derecho sobre el proyecto JSF y elegir el item Properties 

Esto abrirá el cuadro de diálogo de propiedades, en la parte izquierda buscaremos el item Deployment Assembly, al clicarlo nos muestra la siguiente pantalla, de la cual eligiremos el botón Add que está en la parte derecha


A continuación nos muestra la ventana New Assembly Directive con una serie de opciones de la cual eligiremos Project y presionamos el boton Next

Finalmente seleccionamos el proyecto JPA que queremos enlazar y presionamos Finish


Con esto eclipse ya podrá compilar y enlazar nuestro proyecto JS…

Trabajando con Icefaces 2.X

Algo muy útil si habias trabajado con versiones de icefaces anteriores: Guía de migración de la versión 1.8 a 2.x

Error:
GRAVE: Excepción enviando evento inicializado de contexto a instancia de escuchador de clase com.sun.faces.config.ConfigureListener java.lang.RuntimeException: com.sun.faces.config.ConfigurationException: Parece que la versión JSP del contenedor es más antigua que la 2.1 y no se puede ubicar la fábrica de expresiones EL RI, com.sun.el.ExpressionFactoryImpl.  Si no utiliza JSP o EL RI, asegúrese de que el parámetro de inicialización de contexto, com.sun.faces.expressionFactory, esté definido correctamente.
Solución: Incluir en el class_path de la aplicación y dentro del servidor las siguientes librerías: el-impl-2.2.0-SNAPSHOT.jar y el-api-2.2.0-SNAPSHOT.jar. Estas librerías extrañamente no vienen incluidas en el bundle de icefaces.

Error:
El Backing Bean se crea cada vez que se realiza un request aunque está marcado con @ViewScoped

Solución: Agregar al web.xml
&l…

TecnoUNI 2011

Tips semanales #2

Suma de Entradas y Salidas

El problema reside en realizar una suma de dos campos en tablas distintas (entradas y salidas) con un enlace común (artículos), el DER correspondería a lo siguiente:
Pareciera fácil pero no lo es tanto pues tiene su truco. El código sería el siguiente:

SELECT tipo_articulos_nombre_tipo, articulos_descripcion,  SUM(cantidad) AS entradas, SUM(cantidad_salida) AS salidas FROM ( (SELECT tipo_articulos.`nombre_tipo` AS tipo_articulos_nombre_tipo, articulos.`descripcion` AS articulos_descripcion, detalle_entradas.`cantidad` AS cantidad, 0.0 as cantidad_salida FROM `articulos` articulos LEFT JOIN `detalle_entradas` detalle_entradas ON detalle_entradas.`idarticulo` = articulos.`idarticulo` INNER JOIN `entradas` entradas on entradas.identrada=detalle_entradas.`identrada` INNER JOIN `tipo_articulos` tipo_articulos ON articulos.`idtipo_articulo` = tipo_articulos.`idtipo_articulo` ORDER entradas.`fecha_entrada` DESC ) UNION ALL (SELECT …

Tips para desarrollo en Facebook

b is undefined
Este error ocurre al tratar de usar la versión antigua del api javascript de facebook junto con la nueva. Como pasa en el siguiente código:

<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php/en_US" type="text/javascript"></script><script src="http://connect.facebook.net/en_US/all.js"></script>; Comentariando o eliminando la primera fila corregirá el problema
FacebookApiException  :: CurlExceptionSSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
El problema es que cURL no ha sido configurado para confiar en el certificado HTTPS del servidor. Los conceptos de los certificados y PKI gira entorno a la confianza de los Certificados de Autoridades (Certificate Authorities (CAs))  y por defecto, cURL está configurado para no confiar en ningún CA, así que no confiará en ningún certificado de…

Error con Nimbus Look and Feel

java.lang.ClassNotFoundException: javax.swing.plaf.nimbus.NimbusLookAndFeel

No establecer el lookandfeel Nimbus explícitamente invocando el método UIManager.setLookAndFeel por que no todas las versiones o implementaciones de Java SE 6 soportan Nimbus. Además, la ubicación del paquete Nimbus cambió entre las versiones JDK 6 Update 10 y JDK 7. Iterar a través de todas las implementaciones de lookandfeel instaladas es un enfoque mas robusto por que si Nimbus no está disponible, se usará el lookandfeel por defecto. Para la versión JDK 6 Update 10 el paquete Nimbus está localizado en com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel


Agregar el siguiente código al hilo despachador de eventos antes de crear la interfaz gráfica de usuario:

import javax.swing.UIManager.*; try { for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { UIManager.setLookAndFeel(info.getClassName()); break; } …

Como Implementar Scrum en 10 pasos fáciles - Paso #10: Revisa, Reflexiona, Repite

Continuando con la serie: Como implementar SCRUM en 10 pasos fáciles. Creación de Kelly Waters y traducida con la autorización correspondiente por su servidor.


La entrada original de este artículo es: Step 10: Review, Reflect, Repeat


Paso #10: Revisa, Reflexiona, Repite

Así que tienes tu pila del producto en orden, has estimado la pila, esclarecido los requisitos, planeado tu sprint y has creado un espacio de trabajo colaborativo.

Estás haciendo un Sprint para alcanzar tus metas y estás haciendo reuniones diarias y estás midiendo el progreso con un gráfico.

Ahora vienes al final del Sprint y terminas cuando dijistes que lo harías. Todo lo quequeda por hacerahora,es la revisar, reflexionar yrepetir ...

Revisión del Sprint

Al final del Sprint haz una reunión para revisar el Sprint (Sprint Review) . Invita a todo el equipo. Invita a todos los tomadores de decisiones del negocio. Invita a tomadores de decisiones importantes incluyendo ejecutivos cuando sea apropiado. ¡Entre mas partes interes…

Como Implementar SCRUM en 10 pasos fáciles - Paso #9: Termina cuando dijistes que lo harías

Continuando con la serie: Como implementar SCRUM en 10 pasos fáciles. Creación de Kelly Waters y traducida con la autorización correspondiente por su servidor.


La entrada original de este artículo es: Step 9: Finish when you said you would!

Paso #9: Termina cuando dijiste que lo harías.

Así que tienes tu pila del producto en orden, has estimado la pila, esclarecido los requisitos, planeado tu sprint y has creado un espacio de trabajo colaborativo.

Estás haciendo un Sprint para alcanzar tus metas y estás haciendo reuniones diarias y estás midiendo el progreso con un gráfico.

Ahora solo necesitas terminar cuando dijistes que lo harías.

¡Que gran idea! ¡Que visión! Si solo hubiera pensado en eso, mis proyectos de desarrollo nunca hubieran sido tan dificiles.


Aunque seriamente, hay unos pocos principios de desarrollo ágil de software que ayudan con este paso. Aquí están:

'hecho' significa 'HECHO'

*Completa* cada característica antes de moverte hacia lo siguiente. En el desarr…

Tips y enlaces de la semana

json_encode y problemas con acentos.

Según la documentación de la función json_encode, esta solo funciona con caracteres codificados en utf-8, así que si trabajamos con caracteres con otra codificación podemos convertirlos con la función utf8_encode. Asi:

json_encode(utf8_encode($dato));

Si lo que queremos es pasar un arreglo a json, debemos pasar cada item del arreglo a utf8 y para esto usaremos la función array_map, quedando de la siguiente manera:

json_encode(array_map("utf8_encode",$arreglo));
Esta función está disponible desde la versión 5.2 de PHP, asi que si usas una versión anterior intentalo con la versión de json_encode y json_decode para PHP4
Este archivo se usa de la siguiente forma:

// create a new instance of Services_JSON require_once('JSON.php'); $json = new Services_JSON(); // convert a complex value to JSON notation $value = array(1, 2, ‘foo’); $output = $json->encode($value); print($output); // accept incoming POST data $input = $GLOBALS['HTT…

Como Implementar SCRUM en 10 pasos fáciles - Paso #8: Mide el progreso con un gráfico

Continuando con la serie: Como implementar SCRUM en 10 pasos fáciles. Creación de Kelly Waters y traducida con la autorización correspondiente por su servidor.


La entrada original de este artículo es: Step 8: Track Progress With A Daily Burndown Chart

Paso #8: Mide el progreso con un gráfico

Así que tienes tu pila del producto en orden, has estimado la pila, esclarecido los requisitos, planeado tu sprint y has creado un espacio de trabajo colaborativo. Estás haciendo un Sprint para alcanzar tus metas y estás haciendo reuniones diarias. Ahora estás listo para medir el progreso con un gráfico.

"¡Dios mío, parecía ir tan bien!"

A menudo en proyectos de desarrollo tradicionales, todo parece ir tan bien, hasta la finalización del 80% o incluso más tarde. Luego las cosas se vuelven más difíciles. Las cosas empiezan a parecer cada vez menos probable que cumplan con la fecha de finalización prevista. Hasta que finalmente reconoces que no puedes alcanzar la fecha porque ya es demasiad…

Como implementar Scrum en 10 pasos fáciles. Paso #7: Ponte de pie y a contar!

Continuando con la serie: Como implementar SCRUM en 10 pasos fáciles. Creación de Kelly Waters y traducida con la autorización correspondiente por su servidor.


La entrada original de este artículo es: Step 7: Stand Up And Be Counted!

Paso #7: Ponte de pie y a contar!

Así que tienes tu pila del producto en orden, has estimado la pila, esclarecido los requisitos, planeado tu sprint  y has creado un espacio de trabajo colaborativo. Estás haciendo el Sprint para lograr tus metas; ahora estás listo para el paso #7 – Ponte de pie y a contar!

Mantén una reunión diaria de pie. Todo el equipo debe estar presente. No es opcional. Todo el equipo debe estar involucrado. Incluyendo, es muy importante, el Propietario del Producto. Y cualquier representante del negocio, cliente o usuario que este activamente involucrado. Y cualquier otro especialista activamente involucrado en el Sprint, incluso si ellos no son parte del núcleo del equipo.

El equipo se mantiene en un semi-circulo alrededor de la piza…

Como implementar Scrum en 10 pasos fáciles. Paso #6: Sprint

Continuando con la serie: Como implementar SCRUM en 10 pasos fáciles. Creación de Kelly Waters y traducida con la autorización correspondiente por su servidor.


La entrada original de este artículo es: Step 6: Sprint!

Paso #6: Sprint

Así que tienes tu pila del producto en orden, has estimado la pila, esclarecido los requisitos, planeado tu sprint y has creado un espacio de trabajo colaborativo. Estás listo para el paso #6: el Sprint.

Scrum en realidad no prescribe como se debe hacer para la entrega de tus tareas en el Sprint. Scrum es una práctica de gestión ágil y no cubre realmente la ingeniería ágil. XP (Extreme Programming - Programación Extrema) por otro lado es una práctica de ingeniería ágil.

Personalmente pienso que esta es la belleza de Scrum.

Cualquier práctica de ingeniería que uses, desde vaquero a riguroso, desde RAD a RUP, desde XP hasta DIY, cualquiera, Scrum se puede colocar directamente en la parte superior. Ese es el porque digo que es fácil. Es un enfoque de gestión a…

Como implementar Scrum en 10 pasos fáciles. Paso #5: Crear un espacio de trabajo colaborativo

Asi que ahora tienes tu pila del producto en orden, has estimado tu pila del producto, has esclarecido los requisitos y planeado tu sprint.

Ya estás listo para el paso #5 - Crear un espacio de trabajo colaborativo

Se que llamé esta serie, "10 pasos fáciles", pero los primeros 4 pasos son en realidad de trabajo muy duro. Este es una brisa.

Haz que tus paredes sean pizarras

Cubre tus paredes con pizarras. No puedes tener demasiadas.

Una pizarra vence cualquier sistema de software y por muchos propósitos. Planes/hojas de ruta de alto nivel, fechas claves, discusiones de diseño, bosquejo de funcionalidad, lista de problemas, ideas, estadísticas, reportes de estatus, carteles de temáticos, etc, etc. Lo que sea pegalo en la pared.

Crea un lugar para la colaboración

El área de la pizarra será tu "centro de colaboración" para el equipo. Una pared visible. El centro de todas las discusiones de equipo. El lugar donde el equipo se reune todos los días(de pie). El lugar donde pu…

ForeignKeyName y el errno 121 en Doctrine

Primero analicen las siguientes clases:

 class HistorialExpedienteConciliacionIndividual extends Doctrine_Record   {       public function setTableDefinition()       {            $this->setTableName('HistorialExpedienteConciliacionIndividual');            $this->hasColumn('id_estado','integer');            $this->hasColumn('id_expediente','integer');                      $this->hasColumn('id_usuario', 'integer');       }             public function setUp()       {              $this->hasOne('EstadoExpediente as estado',array('local'=>'id_estado','foreign'=>'id'));            $this->hasOne('ExpedienteConciliacionIndividual as expediente',array('local'=>'id_expediente','foreign'=>'id'));                      $this->hasOne('Usuario', array('local'=>'id_usuario','foreign'=>'id…