martes, 28 de septiembre de 2010

java.lang.UnsupportedOperationException: This parser does not support specification "null" version "null"

Estaba montando JCS en mi proyecto web donde tengo Strut 1.3 agregando la dependencia de Maven:
<dependency>
<groupId>jcs</groupId>
<artifactId>jcs</artifactId>
<version>1.3</version>
</dependency>

Y de repente comencé a tener la siguiente excepción al inicializar la aplicación en Tomcat:

2010-09-28 10:44:36 ERROR [ContainerBackgroundProcessor[StandardEngine[Catalina]]] (Digester.java:789) - Digester.getParser:
java.lang.UnsupportedOperationException: This parser does not support specification "null" version "null"
at javax.xml.parsers.SAXParserFactory.setXIncludeAware(SAXParserFactory.java:448)
at org.apache.commons.digester.Digester.getFactory(Digester.java:534)
at org.apache.commons.digester.Digester.getParser(Digester.java:786)
at org.apache.commons.digester.Digester.getXMLReader(Digester.java:1058)
at org.apache.commons.digester.Digester.parse(Digester.java:1887)
at org.apache.struts.action.ActionServlet.initServlet(ActionServlet.java:1144)
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:328)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4187)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4496)
at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3228)
at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:403)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1309)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
at java.lang.Thread.run(Thread.java:619)

Después de investigar un poco en Google descubrí una dependencia de JCS estaba causando este conflicto: Xerces

Así que aprendí algo nuevo del pom.xml, cómo agregar una exclusión:
<dependency>
<groupId>jcs</groupId>
<artifactId>jcs</artifactId>
<version>1.3</version>
<exclusions>
<exclusion>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
</exclusion>
</exclusions>
</dependency>

viernes, 24 de septiembre de 2010

Aplicación portable gratuita para creación de diagramas

Hace poco me topé con esta aplicación portable llamada Dia para crear todo tipo de diagramas como Entidad-Relación, UML, de flujo, etc. Digamos que es como una versión más "light" de Office Visio pero muy funcional para crear diagramas rápidos.

Un par de ejemplos:




Exportado:



Diagrama UML (clases)


Exportado

viernes, 17 de septiembre de 2010

10 tips para conducir tu carrera como desarrollador de software

Recientemente leía un artículo interesante acerca de tips profesionales para desarrolladores y diseñadores web , así que comencé a reflexionar acerca de mi propio conjunto de tips que recomendaría para conducir la carrera como un típico desarrollador de software. Muchos puntos podrían agregarse a esta lista, pero solamente es mi percepción personal en esta etapa de mi desarrollo profesional, contextualizado en un país llamado “tercer mundista”.

  1. Disfruta lo que haces. Este punto estará probablemente presente en toda lista de tips profesionales para cualquier carrera. Es realmente tedioso tratar de ser mejor en algo en lo cual odias con todo el corazón. Si no te gusta programar, y nada relacionado con ello, entonces no lo hagas. Existen otros campos de las ciencias de la computación e informática en los cuales se puede uno enfocar, o inclusive no tan relacionados pero donde se pueden aplicar los talentos “computínes”.
  2. Toma riesgos. El tip anterior podría llevarnos a este. Hace tres años atrás, tuve que tomar la decisión de si renunciar a una gran compañía multinacional, donde no estaba muy a gusto hacia donde estaba tomando rumbo mi carrera profesional. Estaba haciendo prácticamente 0 desarrollo en mi trabajo en un área muy especializada del negocio de la compañía. Es difícil renunciar al gran ambiente laboral que te puede ofrecer una compañía enlistada en las 100 más exitosas del mundo, pero tenía que determinar si valía la pena continuar evaluando cuales eran mis expectativas profesionales. Al final me moví a una empresa más pequeña de desarrollo donde he aprendido mucho más del campo en el cual quiero crecer.
  3. Cela tu tiempo. El tiempo es una de las cosas más importantes de nuestras vidas. Por esa razón no deberíamos dejar que otras personas, o circunstancias, mal gasten nuestro tiempo en cosas sin importancia. Muchas de las compañías en Costa Rica funcionan con proyectos a corto y mediano plazo. Eso significa que cuando el proyecto termina (algunas veces abruptamente) las personas del proyecto, si no tienen otro proyecto a donde ser relocalizadas, son puestas en la poco popular “banca”. Un grupo de personas se sienten cómodas por tener un lugar en la banca (especialmente las instituciones gubernamentales donde pareciera haber un estado perpetuo de banca :/) porque se siente bien malgastar nuestro tiempo en actividades poco productivas como Youtube o Facebook. Pero así como la comida basura, nada realmente bueno resulta de solamente sentirse rico. ¿Cuál es mi consejo? Ser más proactivo durante el tiempo de banca, actualízate en una nueva tecnología, trabaja en un proyecto personal, y sobre todo, hazle saber a tu superior que no estás contento con tu estado actual. Esto le hace saber al resto de personas que te consideras una pieza valiosa de la compañía y que no te gusta estar sin hacer nada.
  4. Escribe un blog. Sí, sabemos que tu novi@ va a reforzar tu estatus de geek, pero verdaderamente he aprendido que vale la pena tener como pasatiempo esta saludable actividad. Primeramente uno aprende a escribir bien. Seamos honestos, como ingenieros de software, en promedio tendemos a apestar en redacción. Un blog es una buena manera de afinar nuestras habilidades en redacción. Inclusive nos sentimos aún más motivados cuando sabemos que nuestros artículos están creando atención en la blogosfera. Así que con esta motivación intentamos ser más claros con los conceptos que queremos explicar, inclusive buscando nuestro propio estilo de escritura. Intentamos ser más creativos, graciosos e interesantes. El blog es también un repositorio histórico de todas nuestras luchas técnicas. ¿Cuántas veces no has sentido ese “déjà vu” al enfrentarte a un problema pero no puedes recordar cómo fue que lo resolviste? Precisamente el blog puede ser útil en esas ocasiones, que además se puede utilizar para dejar de referencia a otras personas, especialmente si tienes una posición de liderazgo en tu equipo. Te ahorras el tiempo de tener que explicar la misma respuesta a una pregunta sobre un tema recurrente. Podrías hacer todo un artículo acerca de las ventajas de mantener un blog, pero solo quiero terminar mencionando que los conceptos quedan más claros en nuestra mente y son más fáciles de recordar cuando los escribimos.
  5. Manténte en lo ultimo en tecnologías y noticias. Hoy en día, resulta ser más sencillo estar al tanto de lo más reciente del campo. Simplemente podemos suscribirnos a toda una gama amplia de feeds, escogiendo aquellos que más nos interesen y consideramos útiles. Los podcast son otra excelente opción que podemos usar para escuchar acerca de las noticias del momento. Podemos oírlos de regreso a casa o en una sesión de ejercicios. Son simples y prácticos.
  6. Seamos “pura vida” con la gente. Ciertamente, la mayoría de nosotros no trabajamos como mercenarios. Normalmente trabajamos en equipos donde existen otras entidades inteligentes llamadas “compañeros de trabajo”. Si no podemos funcionar en equipo, nos veremos limitados a los proyectos que solo podemos finalizar por cuenta propia. Casi todos los proyectos significativos requieren tener un grupo de personas trabajando juntas para llegar a un producto final. Así que seamos buena gente.
  7. Ve fuera de tus fronteras. No te limites solamente a lo que puedes hacer en tu trabajo. Forma parte de una comunidad o grupo de usuarios. Y no tengas miedo, no significa que vayas a gastar todo tu tiempo en computadoras y por tanto ser percibido como un nerd antisocial. Una reunión regular cada cierto tiempo no duele mucho. Otros profesionales de otros saberes tienen toda la disposición de ir a reuniones con colegas, inclusive pagando sumas de dinero significativas. Así que tomemos ventaja de las oportunidades que se nos presentan, sobre todo si son gratuitas, y hagámonos notar. Nunca se sabe cuando una buena oportunidad puede venir fuera de nuestro hábitat.
  8. Da la milla extra. Sé que este puede ser un slogan algo gastado, especialmente cuando algunas compañías lo utilizan para “motivar” a sus empleados a trabajar horas extras sin pago extra. Pero podemos utilizarlo correctamente para decir que debemos ir más allá de las expectativas. Una aplicación práctica es tener el principio de intentar siempre terminar tu trabajo lo más pronto posible sin afectar la calidad del mismo. Conozco por experiencia de observar el comportamiento de otros colegas, que es común para muchas personas jugar con las fechas de entrega. Un programador con colmillo podría rápidamente escanear la descripción de la tarea, determinar que puede terminarla en la mitad de lo estimado y básicamente gastar la otra mitad en diversas actividades; digamos que menos productivas. Yo considero esto una actitud poco ética. Uno puede estar bien con las fechas de entrega y aun así ser un empleado mediocre.
  9. No juegues al guru. Deja que otras personas te traten como un guru si es el caso, pero no lo promuevas tu mismo. ¿Qué significa esto? Significa que deberías permanecer con mente abierta para las sugerencias de otras personas, y no pretender que sabes la mejor manera de resolver todo. Esto se vuelve cada vez más difícil a medida que crece nuestro “seniority”. Hay mucho orgullo envuelto, especialmente cuando lidiamos con el código de otras personas. No podemos pretender que todo mundo codifique al mismo estilo que nos gusta. Lo que si podemos hacer es sugerir buenas prácticas, pero siempre recordando usar la amabilidad para no jugar de “sabelo-todo”. Recordemos mantenernos moldeables.
  10. Aprende inglés. Desafortunadamente para algunos, las academias de inglés no están bromeando cuando muestran puertas que se cierran a las personas que no dominan tan importante idioma. Muchas de las compañías de desarrollo en Costa Rica interactúan con clientes del Norte. La frase anti yanqui “Gringos Go Home” no aplica mucho en nuestro contexto. Se recomienda comenzar el estudio serio y constante del inglés en época universitaria para estar listo una vez que se comience aplicar en el mercado laboral.