Búsquedas de texto completo en objetos de dominio

16/05/2022
Artículo original

Hibernate
Si hace un tiempo hablaba de un problema muy común que nos encontramos al desarrollar una aplicación como los es internacionalizar los textos de algunos campos de una entidad de dominio, el hacer búsquedas de texto completo sobre esos campos más allá del like que nos ofrece el lenguaje SQL de las base de datos también es un problema a resolver.

La primera solución que se nos puede ocurrir es hacer las búsquedas empleando el like del lenguaje SQL de la base de datos relacional que usemos. Sin embargo, el like de SQL tiene varias limitaciones y además es lento, supone una carga para la base de datos y las coincidencias son muy limitadas no teniendo en consideración peculiaridades del idioma como tildes y aproximaciones. Para tratar de resolver estos problemas podemos usar la librería Hibernate Search que a partir de las clases de dominio y de las propiedades sobre las que queramos hacer búsquedas creará un indice de Lucene para realizar búsquedas más rápidamente y con mejores resultados.

Hibernate Search
Con Hibernate Search que se apoya en Lucene podemos obtener resultados que son aproximaciones a la palabra búsqueda, por ejemplo, si buscamos «refactor» podemos obtener coincidencias para las palabras «refactors», «refactored» y «refactoring» en el lenguaje inglés. Cada lenguaje tiene sus propias reglas de análisis para buscar estas aproximaciones y hay analizadores para la mayoría de lenguajes. Además, podemos obtener una aproximación de las coincidencias encontradas totales al estilo de como hace Google.

Continuando el ejemplo de como usar Hibernate en una aplicación «standalone» vamos a ver que hay que hacer para crear el índice y como realizar una búsqueda empleando Hibernate Search.

SQL
Otra alternativa a Hibernate Search es si la base de datos soporta «full text search», es decir, el motor de la base de datos soporta en la sintaxis de las sentencias SQL búsquedas de texto completo. En MySQL es posible pero hasta la versión 5.5 solo si la tabla está definida con MyISAM aunque a partir de la versión 5.6 es posible hacerlo con InnoDB que es el modelo de almacenamiento recomendado. La sintaxis de la sentencia SQL para MySQL sería:

En PostgreSQL la sintaxis «full text search» es diferente:


Aunque con soluciones específicas del motor de la base de datos como esta perdemos la abstracción de la base de datos que proporciona Hibernate nos evitamos el tener que mantener el índice de Lucene con Hibernate Search.

Elasticsearch
Otra posibilidad muy interesante y tan buena o mejor que las anteriores es utilizar elasticsearch aunque al igual que con Hibernate Search debamos mantener e índice y los datos sincronizados pero eso probablemente sea tema para otra entrada :).

Referencia:
Código fuente búsqueda con Hibernate Search
Internacionalización (i18n) de campos con Hibernate
http://wiki.apache.org/solr/LanguageAnalysis
http://eraunatonteria.wordpress.com/tag/full-text-search/
http://dev.mysql.com/doc/refman/5.0/es/fulltext-search.html

Libro sobre desarrollo de aplicaciones con Apache Tapestry

16/05/2022
Artículo original

Recientemente he publicado PlugIn Tapestry, un libro acerca del desarrollo de aplicaciones web en el lenguaje Java y con el framework Apache Tapestry.

PlugIn Tapestry
Apache Tapestry es un framework orientado a componentes para crear aplicaciones web rápidas, dinámicas, robustas y altamente escalables en la plataforma Java. Al basarse en componentes es distinto de los muchos basados en acciones similares en esencia a Struts que podemos encontrar en la plataforma Java como SpringMVC, Grails y Play! y también de los muchos otros en los que la principal diferencia es el lenguaje como Django (Python), Symfony (PHP), .NET MVC (C#) o Ruby On Rails (Ruby).

Incluyendo la descripción de las características del framework el libro trata la mayoría de aspectos que puede necesitar una aplicación o página web, entre ellos:
  • Introducción, principios y características
  • Inicio rápido
  • Páginas y componentes
  • Contenedor de dependencias (IoC)
  • Assets (imágenes, estilos, javascript) y módulos RequireJS
  • Formularios
  • Internacionalización (i18n) y localización (l10n)
  • Persistencia web
  • Persistencia en bases de datos
  • Ajax
  • Seguridad (autenticación, autorización, XSS, Inyección SQL)
  • Librerías de componentes
  • Pruebas unitarias, de integración y funcionales (JUnit/Mockito, Spock, Geb)
  • Y algunas cosas más

El libro está basado en la siguiente versión de Tapestry, la 5.4, que actualmente está en estado alpha (aunque la mayoría servirá para la versión final y para la versión 5.3 actual). Esta versión tiene como principal novedad la parte cliente de las aplicaciones con la inclusión de RequireJS y la definición de los archivos Javascript mediante módulos. También incorpora una capa de abstracción que permite usar cualquier librería como apoyo a la funcionalidad que necesita proporcionar ya sea Prototype, jQuery, cualquier otra que prefiramos o nueva que se desarrolle en un futuro.

Además del libro he desarrollado una pequeña aplicación (disponible en mi repositorio de GitHub) con unos pocos ejemplos que puedes probar en tu equipo sin necesidad de instalar nada previamente, salvo Git y el JDK. Más de 200 páginas de documentación que permitirán al lector descubrir mucha de la magia que puede ofrecer este framework. Además en mi blog puedes encontrar varias entradas sobre muchos de los temas tratados de forma individual y que he utilizado para escribir el libro.

Puedes descargarlo desde la página que he preparado para ello de forma totalmente libre y al inmejorable precio de 0,00€ impuestos incluidos. Tienes mi permiso (es más, animo a ello) para compartirlo, distribuirlo en redes P2P, subirlo a cualquier página web o «piratearlo» cuantas veces quieras, siempre que respetes la licencia Creative Commons bajo la cual lo he publicado.

Apache Tapestry

Algunas características destacadas de Apache Tapestry son:

Java
Normalmente se usa el lenguaje Java con lo que el compilador y el asistente de código de tu IDE te ayudarán.

Políglota
Si prefieres puedes utilizar Groovy, Scala o cualquier otro lenguaje soportado por la JVM.

Productivo
La recarga de clases en caliente evitará que tengas que reiniciar el servidor para ver tus cambios aplicados. Simplemente actualiza el navegador.

Rápido
El framework está programado en Java sin hacer uso de reflection. Incorpora varias optimizaciones que harán tu aplicación más eficiente sin trabajo por tu parte como compresión gzip, minificación y agregación css/javascript, cacheo agresivo en el cliente de assets, supresión de espacios en blanco innecesarios, ...

Basado en componentes
Los componentes son piezas autónomas y resusables de código. Para usar uno simplemente necesitarás conocer sus parámetros todo lo demás como archivos javascript, hojas de estilo y mensajes localizados son proporcionados por el componente. Los componentes pueden lanzar eventos y diferentes contenedores comportarse de diferente forma ante el mismo evento.

Informe de error avanzado
El informe te proporciona mucha más información que simplemente la traza de la excepción, verás que se estaba haciendo, que fué mal y como coregirlo. Con toda esta información solucionar las excepciones será mucho más rápido y fácil. El informe de error también es presentado en caso de errores en las peticiones AJAX.

Testable
Puedes probar los componentes de forma unitaria, el html generado o hacer pruebas de integración y funcionales. Los componentes son POJOs que no necesitan heredar ni implementar ninguna clase del framework. Podrás utilizar la herramienta que desees JUnit/Mockito, Spock, Geb, ...

Extensible, adaptable y modular
Gracias al contenedor de dependencias y a que los servicios están programados en base a interfaces puedes definir una nueva implemetación que modifique el comportamiento del framework. Todo servicio en el contenedor de dependencias puede ser redefinido, la mayoría de las cosas son servicios. Exiten módulos para Hibernate, Apache Shiro, Quartz, ... y si no existe puedes usar cualquier librería como RESTEasy, JasperReports, EHCache, JFreeChart, RestFB...

i18N y l10N
Puedes tener catálogos de mensajes por componente o de manera global en la aplicación. Los assets (imágenes, css, ...) tanbién son localizables y tener una plantilla con un contenido totalmente diferente según el idioma del usuario.

Convención sobre configuración
Las convenciones permiten evitar la configuración y los posibles errores que podemos cometer al realizarla. Pero más importante, hace que cualquier programador que conozca las convenciones sepa inmediatamente como están organizadas todas las cosas con lo que el tiempo de aprendizaje se reduce considerablemente.

Librerías de componentes
Los componentes comunes a varios proyectos pueden ser agregados en una librería de componentes (no es más que un archivo jar) para ser reutilizados. Nuevamente para usar los componentes solo tendrás que preocuparte de los parámetros, todos los recursos que necesiten serán extraídos de la librería. No necesitarás copiar y pegar archivos de un proyecto a otro, solo agregar una dependencia o jar a tu proyecto.

Según su principal desarrollador (Howard Lewis Ship, que obtuvo el premio Java Champion en 2010 [1] y Duke's Choice Award por el framework [2] en la categoría open source), y modestia aparte, piensa que Tapestry ha sido un líder desde una perspectiva puramente tecnológica. Estas son algunas cosas que cree que hizo primero y todavía piensa que lo hace mejor que nadie:
  • Componentes reusables (2001)
  • Informe de excepción detallado y útil (2001)
  • Instrumentación invisible en las plantillas (2002)
  • Informe de error con precisión de linea (2004)
  • Metaprogramación y modificación de bytecode (2005)
  • Recarga de clases en caliente (2006)
  • Informe de error completo para peticiones Ajax (2012)

¿Te ha parecido poco? ¡Descubre más en el libro!. Que lo disfrutéis, usar el siguiente enlace para ¡descargarlo!

Acceso a base de datos con Hibernate y JPA

16/05/2022
Artículo original

Hibernate
Si usamos Hibernate como la capa de persistencia de nuestra aplicación es muy probable que lo usemos a través de una aplicación web. Sin embargo, en algún caso como una migración de datos, la generación de algún informe o extracción de datos que no queramos o no nos sea posible hacerla en la aplicación web por el tiempo que tarda o la carga que supone para la aplicación web nos puede interesar usar Hibernate desde una aplicación Java normal lanzada desde linea de comandos.

Para ello deberemos obtener el objeto Session si usamos hibernate directamente o el EntityManager si usamos hibernate a través de JPA. La API de JPA es una capa de abstracción para varias librerías de persistencia, ORM, similares a Hibernate. Si Hibernate nos abstrae de la base de datos, JPA nos abstrae del framework de persistencia que vayamos a usar de forma que podamos reemplazarlo por otro sin realizar ninguna modificación al código JPA. Si ya sabemos usar Hibernate usar JPA no nos supondrá mucha dificultad ya que JPA se basa en gran medida en Hibernate.

En el siguiente ejemplo se puede ver como obtener un EntityManager, eliminar todos los objetos y hacer una búsqueda.

En el ejemplo he usado un dao genérico que nos puede servir para cualquier tipo de entidad, aunque el dao contenga operaciones básicas como probablemente sean comunes a todas las entidades que tengamos nos será de gran utilidad. A continuación las anotaciones que debemos usar para la entidad a persistir, nada distinto de lo que haríamos en una aplicación web.

Si JPA no tuviese alguna funcionalidad que si tuviese hibernate desde JPA podemos obtener el objeto Session con el que acceder a la API de hibernate.

Ejecutando la aplicación HibernateJPA obtendremos lo siguiente en la consola:

Como comentaba usar Hibernate en una aplicación Java normal no será lo habitual pero este ejemplo es el primer paso para que explique con un ejemplo simple como resolver otro de los problemas que suele ser habitual en muchas aplicaciones que es como hacer búsquedas sobre los objetos de dominio y no me refiero a usar likes de SQL que tienen varias limitaciones aparte de ser lentas si la tabla de búsqueda tiene muchos registros sino usando Hibernate Search.

Para probar los ejemplos en tu equipo puedes hacerlo con los siguientes comandos:

Si te ha interesado esta entrada quizá también te interese como hacer internacionalización (i18n) de campos con Hibernate y como hacer búsquedas de texto completo en objetos de dominio.

Referencia:
Código fuente acceso a base de datos con Hibernate y JPA
http://docs.jboss.org/hibernate/core/3.6/quickstart/en-US/html/hibernate-gsg-tutorial-jpa.html
http://www.manning.com/bauer2/
http://www.apress.com/9781430219569

JavaHispano Podcast - 079 - Noticias Marzo 2010 (a)

16/05/2022
Artículo original


¿Programar en español o en inglés? - Opinión

16/05/2022
Artículo original


En una ocasión me encontré con un proyecto en el que el responsable había decidido hacer el proyecto en inglés. La cuestión es ¿es ventajoso programar en inglés?. Con programar en inglés me refiero a declarar todos los nombres de las tablas, métodos y ciertas variables totalmente en inglés. A primera vista puede parecer una gran idea. Acostumbrarse a desarrollar en inglés puede facilitarnos a participar en proyectos de software libre que podemos ver en sourceforge, perfeccionar el inglés y quizá en un futuro nuestro proyecto pueda ser desarrollado en el extranjero.

Sin embargo, esas ventajas se volvieron totalmente en contra del proyecto por los siguientes motivos.
  • Empleo de términos incorrectos. Aunque sepamos inglés y hayamos estudiado bastantes años, nos podemos encontrar un término asociado a un tipo de negocio que no conozcamos. En ese caso, lo primero que haremos es utilizar un diccionario o utilizar un traductor. Lo más probable es que el término en concreto tenga varios significados y elijas el incorrecto.
  • Ampliación el grupo de trabajo. Un problema siempre ha sido la incorporación de personal en un proyecto. Si utilizas términos en ingles perjudicarás en su incorporación ya que puede que no todo el mundo tiene el mismo nivel de ingles. Lo que ocurrirá es que estas personas intentarán escribir en español y finalmente quedará un batiburrillo de conceptos en inglés y español.
  • Poca probabilidad de ser un proyecto internacional. Salvo que el proyecto tenga un enfoque internacional, pocas veces he visto que un programa se desarrolle mitad en España y mitad en extranjero. No digo que no haya pues si conozco algún caso, pero en general, los proyectos que tienen proyección de desarrollo en España no pasan fronteras (refiriendonos en el desarrollo)
  • Pocas personas hacen software libre. Quizás una de las ideas que tenias era practicar para familiarizarte en proyectos internacionales o participar en proyectos sourceforge. Sin embargo, existe un porcentaje muy pequeño que estén interesados en participar en este tipo de proyecto. Por ello, lo único que has hecho es hacer algo que te divertía pero al grupo quizá no.
Además de estos problemas, creo que tenemos una ventaja también al escribir en Español frente a desarrolladores en Inglés y es poder detectar en un momento que código es nuestro y que código pertenece a una librería externa. Por ejemplo, en algún tutorial escrito en inglés a veces he copiado una función que a su vez hacía referencia a otra pero como esta estaba en inglés no sabía que también la tenía que incluir y luego me daba fallos. Sin embargo, cuando leo un tutorial con funciones en español, al ver la llamada ya sé que eso no pertenece a la librería y debe estar en otro sitio o la debo crear.

Finalmente, también es perjudicial pensar solo en español pues gran parte de documentación técnica está en inglés. En mi opinión hay que saber inglés para entender la documentación técnica pero en el día a día, donde no todo es perfecto, hay que facilitar las cosas.

Caso Spanair, ¿puede el sistema informático tener parte de responsabilidad en el accidente del JK5022?

16/05/2022
Artículo original


Precisamente ayer 20 de agosto, hace dos años en España se sufrió un trágico accidente aereo en la términal T4 de barajas.

A día de hoy se sigue el secreto de sumario sobre la investigación de las causas del accidente, pero los tentaculos de la prensa son muy amplios y existen filtraciones. Una de las noticias con las que nos levantamos es precisamente un artículo del país:
http://www.elpais.com/articulo/espana/ordenador/Spanair/anotaba/fallos/aviones/tenia/virus/elpepuesp/20100820elpepinac_11/Tes

En este artículo comenta que además de los fallos técnicos del avión, el sistema informático no estaba disponible por software malicioso. Por ese motivo los técnicos no pudieron apuntar las incidencias y como consecuencia no saltó la alarma a control para revisar más profundamente el problema. A pesar de ser prensa escrita (que muchas veces lanzan rótulos o noticias partidarias o exageradas) me gustaría comentar que hoy en la radio han entrevisado al presidente de la asociación de dagnificados por el accidente JK5022 y ha dicho que eso era secreto de sumario pero que era una cosa que se había solicitado.

El famoso "sistema caido" son causas que nos encontramos cada vez más en puntos de venta, gestiones o administración. En este caso, ha coincidido con una tragedia y, por supuesto, hay que revisar absolutamente todo. En ningún momento se dice que esta sea la principal causa ya que es una cadena de circunstancias pero si puede ser un eslabón más. Sin embargo si es interesante analizar como de responsable es el sistema, los técnicos informáticos o los gerentes y directores.

Sistema informático, ¿crítico o no crítico?.
El primero de los temas que nos debemos plantear es, ¿es el sistema informático crítico para la vida de las personas?. Un sistema informático puede ser muchas cosas, desde una simple extensión de lo que gestionabamos antes con bolígrafos y papel, hasta sistemas de control de máquinas. Determinar ese nivel de responsabilidad de cada sistema y poner recursos y presupuesto en función la responsabilidad depende de la parte gestora y dirección. Cuando de un sistema puede ser responsable de vidas humanas, es necesario que exista una regulación al respecto, ¡pero ojo!, no vale con decir si has estudiado 3-5 años una ingeniería vales o no. Los ingenieros informáticos no tenemos control de, por ejemplo, el código que se implanta en las actualizaciones de Windows o si un runtime o actualización de software funcionará para todas las operaciones que se hagan. Si pueden evitar y probar el sistema para minimizar el error pero a diferencia con otros campos de ingenieria que trabajan con medidas y valores invariables, en la informática se trabaja sobre el trabajo de otras personas que no cuantifican su trabajo.

El CLUF: la mayoría de software excluyen de responsabilidad de fallos al proveedor
En todos los sistemas operativos o aplicaciones que solemos utilizar en ordenadores personales existe un CLUF o contrato de uso en el que los proveedores de software excluyen toda la responsabilidad de fallos del programa o sistema. No se puede certificar un trabajo que funciona sobre otro trabajo en el cual el propio fabricante excluye su responsabilidad en el caso de fallos. Por todo ello, se utilizan excusas como "fallo informático" para evadirse de la responsabilidad de fallos o errores. En cuestiones de gestión que lo único que provoca son retrasos no es tan crítico pero en sistemas en los que depende la vida de la personas la cosa es más seria.

Para que de la informática pueda depender de vidas humanas, hay que tener sistemas operativos, lenguajes y aplicaciones certificados en seguridad y disponibilidad. Decir que algo está certificado es decir que va a funcionar para ciertas condiciones y para ciertas tareas y por supuesto responsabilizarse de ello en vez de tener un CLUF de exclusión de resposabilidad. Un sistema multiuso como Windows, Linux o Solaris que son multiuso no pueden estar certificados asegurando que todo lo que hacen lo va a hacer bién al 100% bién porque realizan muchas tareas y existen muchos agentes que pueden tirar abajo el sistema. Por ejemplo, un sistema operativo sin ninguna aplicación instalada, el propio hardware lo puede tirar si dá problemas.

¿Que es necesario para sistemas críticos?
Para sistemas críticos, nos tenemos que ir a sistemas informáticos especializados (Mainframes menos conocidos para usuarios) que llevan el hardware y software incorporado de fábrica y no se permite la realización de actualizaciones o modificaciones de ficheros por otras aplicaciones ajenas al sistema. Estos realizan tareas concretas y certifican que estas funcionan en las tareas en las que están especializadas.

Por los datos de la noticia sobre malware, deduzco que el sistema operativo era un Windows Server por lo que se deduce con esas condiciones parece que optaron por reducir costes e ir a un sistema más comercial (menos industrial) y más inestable. Desde el punto de vista de dirección, no era un sistema crítico para la empresa. Tan solo una herramienta de gestión más.

En tal caso, si esa tarea de anotación de incidencias era vital para la vida de las personas, debía existir un procedimiento alternativo (como llamar por teléfono, apuntar en una hoja, etc), en el que se pudiese realizar la misma tarea si ocurriese algo con el sistema informático. En tal caso es responsabilidad del director de sistemas y/o organización establecer más alternativas en el caso de que el sistema falle.

Informática es ahorrar, pero volcarte a otro sistema y ahorrar en informática es perder en disponibilidad del sistema.
En general la informática dá muchas ventajas. Se ahorran costes porque una misma persona puede gestionar muchos más datos que escribirlo en papel. Sin embargo, apuntes que son más serios se deben tener también en papel.

Gestionar del mismo modo información abundante que sirve a modo estadístico para optimizar procesos e información seria de problemas es un error. Ambos pueden ir en el sistema informático, pero los problemas serios al ser menos abundantes deben tener una gestión alternativa (en papel o un sistema cerrado y certificado, por ejemplo).

En fin, no debemos olvidar que la informática multiuso (PCs personales) son una evolución del bolígrafo y papel. Al igual que cuando antes nos fallaba un boligrafo teniamos la alternativa o la precaución de tener varios y tomar otro, el PC también puede fallar y debemos tener previsto que hariamos en tal caso.

Resumen:
Como conclusiones, ha salido a relucir unos de los problemas que cada vez existen en multitud de negocios. Que yo haya sufrido personalmente haciendome ir otro día: al comprar billetes del tren, en el polideportivo, en un juzgado y en el banco/caja. Existe una gran tendencia a informatizar todo para poder sacar estadísticas o para centralizar la información, pero muchas veces nos olvidamos de pensar en que ocurriría si el sistema informático cae. Esto es algo tolerable en negocios pero no en sistemas críticos.

Por todo ello, como hemos comentado, si existiese alguna resposabilidad, y la tarea de anotar estas incidencias sea esencial para proteger la vida de las personas, sería de la parte de dirección de sistemas y/o organización o gerentes por no evaluar este procedimiento de anotación de incidencias como nivel crítico para la vida de las personas, y en tal caso, instalar un servidor que puede ser vulnerable a ataques tan comunes a costa de reducir costes y no tener un procedimiento alternativo en el caso de fallar el sistema.

Las cosas se dan de una forma muy misteriosa....

16/05/2022
Artículo original

Estoy en Brasil, llegamos con Uriel hoy a la 1 de la tarde, vamos a estar hasta el sábado, en donde vamos a ayudar en el Hackathon de Mercadolibre, pero de eso no se trata este post.

Hoy me encontré con muchos chicos de la oficina de Brasil, se pusieron contentos porque les trajimos alfajores, y me di cuenta de que estamos muy alejados a pesar de estar a un gtalk de por medio, tengo que ayudarlos más, pero no es de esto este post.

Me di cuenta de que la ficha de electricidad de Brasil es distinta, entonces Wesley me prestó un adaptador para cargar la compu, el cual me traje al hotel. El adaptador me servía porque podía conectar en él, no la batería, sino mi zapatilla especial enchufe-yanki a enchufe-argento. El adaptador serviría para pasar de enchufe-brazuca a enchufe-yankie…. lo cual hace un puente entre brazuca-argento, pero de eso no es este post.

Llego a la habitación y me doy cuenta de que mi zapatilla no funciona. Sin batería en la compu, tenía dos opciones, ver la televisión en portugués o recordar que hubiese hecho macgiver o papá, pero no tenía las herramientas, ni cinta, ni nada. Manos a la obra igualmente me dije.

Decidí pasar al plan B, cortar el cable y “adaptarlo” al enchufe argento desde el brazuca saltando la zapatilla en lugar del plan A: Destruir la zapatilla y empalmar lo roto, creo que fue lo mejor. Les dejo una foto de como quedó:

image

Me causó gracias la burrada que había hecho, y pensé ponerlo en internet para que mi padre, un ingeniero de verdad, esos que manejan watts, ampers y volts, se retuerza desde varios kilómetros sin poder decir nada. Pero de eso no es este post.

Fuimos a comer con Uriel, volvimos y decidí subirlo a facebook, pero antes di una ojeada a lo que había en el timeline. 

Mi viejo amigo Alan había posteado un video de messi, reconocí inmediatamente que ese video era el audio+video de un artículo ya un poco viejo sobre Messi, el hombre perro, quien mi amigo Guidofoo me había pasado hace mucho y que simplemente recuerdo como fantástico.

Ni les digo como es escucharlo y ver imágenes del messias al mismo tiempo que sus videos, ni comparación tiene a leerlo uno mismo, así que se los paso:

http://www.youtube.com/watch?v=nGmn0jMEcJw

Este post es solamente para darle gracias a Wesley que me dio el adaptador, a papá por ser prolijo en sus trabajos y darme ganas de cargarlo cuando se que me mandé una pungueada eléctrica, a Guido por haberme pasado el artículo, a Alan por postearlo y a Brasil por tener una ficha del siglo XIX. Gracias a todos ellos pude ver un video que casi me hace llorar.

Espero que lo disfruten. Por mi parte estoy orgulloso de no haber querido ver la televisión :)

Saludos,

Fer

testing y deploy con python

16/05/2022
Artículo original

La pasada semana hicimos una ronda de lightning talks con el objectivo de introducir a los compañeros de la empresa en tecnologías que no habían usado hasta ahora. Además sirvieron para hacer un poco de team building y romper un poco el hielo, cosa importante en un equipo _muy_ distribuído. Lo empecé a ver a la gente de aspgems y me pareció interesante.

Por mi parte hice un par de charlas que puede que resulten interesantes:

- Introducción al testing con python y django (pdf). Repasa conceptos muy básicos del testing y trata de explicar como testear una aplicación en django. Es muy muy básico, pero puede servir de ayuda si no estás familiarizado.

- Introducción a fabric (pdf). Fabric es una herramienta para facilitar la automatización de los "deploys". Es similar a capistrano en ruby o ant (salvando las distancias) en java.

Como curiosidad las transparencias están creadas con una aplicación llamada landslide, que transforma sintáxis markdown a una presentación HTML5 o PDF. Muy simple de usar y fácilmente "maqueable".

Me gusta mucho dar charlas de este tipo -a pesar de mi nula capcidad comunicativa- y creo que dice mucho el que un equipo de desarrollo monte charlas de este tipo para estar al día. A ver si mis compañeros se animan a subir las suyas.

Oferta de trabajo made in spain

16/05/2022
Artículo original

No sé si es una cuestión solo de las empresas Españolas, no sé si es que en España las ofertas de trabajo sirven para más bien poco o qué, pero por lo general son un despropósito, llenas de sin sentidos,etc. Voy a dar mi punto de vista sobre como debería una empresa poner una oferta de trabajo si realmente quiere encontrar alguien de calidad (a partir de este punto la mitad de las empresas españolas habrán dejando de leer) o si símplemente no quieres hacer el ridículo:

- Nunca nunca dejes redactar una oferta técnica a una persona de RRHH. Por lo general no saben nada de tecnología y tienden a poner miles de siglas, muchas veces no tienen relación y dejan al descubierto que no sabes ni lo que haces.

- No digas que eres una "empresa lider del sector". Si lo eres ya lo sabemos y si no lo eres también así que ahorratelo. No te preocupes, alguien de calidad va a mirar qué hace tu empresa antes de ir, así que pule el resto de la oferta para que se interesen.

- No me digas que es una empresa jóven, dinámica e innovadora. Si lo eres demuestralo, ahora hay herramientas como blogs, twitter, etc, donde se ve si eres o no eres. Tampoco montes un blog, una página de facebook y un twitter para ser molón porque se ve a la legua si eres más falso que Judas. Qué hay de malo en poner: "somos una empresa tradicional y hacemos lo de toda la vida, pero lo hacemos bien y tenemos los pies en la tierra". Una vez fui a una entrevista y pregunté: "y qué tal es el ambiente de trabajo, la gente se lleva bien", el entrevistador me respondió: "es una relación correcta entre compañeros". Sí, aquella empresa era jóven, dinámica e innovadora.

- Ahorrate todo lo de, buscamos "persona responsable, autónoma, eficiente, analítica, con gran capacidad de trabajo en equipo, entusiasta, proactiva y blablbalbla"

- Se claro en lo que pides. Si quieres un programador que haga de todo un poco, pon que quieres un programador ninja, hay programadores que son así, modo rambo, llegan y resuelven. Si quieres alguien que sepa de una tecnología concreta, ponlo así, huye del "bueno, ya que estoy pongo perl, ruby, asm z80, asm 8087, JVM, dalvik, vim, emacs, turboC++, cobol, AS400 por si cuela". Claro, para eso debes saber lo que quieres. Deja claras las responsabilidades.

- Dí claramente lo que ofrece tu empresa y cómo se gana la vida, de donde saca el dinero. Si lo sacas de subvenciones, es triste lo sabemos, pero ponlo, si es capital riesgo... o incluso si de verdad ganas dinero con lo que haces (no conozco empresas de software en España con este perfil)

- Si sabes, pon cual es el valor añadido que el empleado dará a la empresa. Si no aporto valor añadido, esto es, no se gana dinero conmigo, tarde o temprano terminarás por encargarme trabajo sin sentido, yo me cansaré y me iré. Habremos perdido tiempo y dinero los dos, así que piensalo bien. Deja ver además lo que puede aprender el empleado en tu empresa.

- Parece una obviedad: deja claro dónde es el trabajo, qué tipo de horario, si se puede trabajar en remoto, rango salarial, y en general toda la lógistica. Somos mayorcitos como para andar perdiendo el tiempo.

- Usa algo diferente, por ejemplo, dropbox hace cosas como esta y en algunas ofertas suyas he visto como mandan resolver un problema de programación que más o menos cualquier programador con cierta experiencia sabe resolver. Con esto demuestras que sabes (para poner un problema hay que conocer bien la materia) y sabes que el que envía el CV está realmente interesado y algo de su forma de trabajo. Pide por ejemplo su cuenta en github, trabajos anteriores, o no pidas el currículum (leer el footer de esta oferta de trabajo de linkingpaths)

En resumen, sé claro, sincero y si no tienes ni idea intenta que no se note mucho.

empezando a correr

16/05/2022
Artículo original

Hace casi 4 meses mi fuerza de voluntad me retó y decidí empezar a hacer algo de deporte, no mucho, los excesos son malísimos, ya sabes. Decidí entonces empezar a correr, por suerte vivo en un pueblo y me permite salir fácilmente. Las razones que me impulsaron fueron varias:

- atrofiamiento absoluto. Años de estar sentado pasan factura y cuando al entrar y salir del coche haces el mismo sonido que un tío de 80 tacos algo en tu interior te dice que la cosa no está bien. Además estoy operado de corazón y quizás tenga que cuidar un poco estás cosas.

- pérdida de peso. Viene al hilo de lo anterior, si no te mueves y no cuidas bien lo que comes engordas (las matemáticas aquí funcionan muy bien :)

- tener una forma de distraerme: Últimamente he pasado demasiadas horas delante del monitor y no solo afecta físicamente. Siempre he escuchado que hacer deporte es una forma de desconectar muy buena.

- tenía un festejo familiar y tenía que meterme el traje de hace unos años. Esta no es la importante, pero si eres más agarrao que un chotis no es agradable comprarte un traje nuevo :).

Si estás pensando en empezar a hacer deporte te dejo algunos consejos que a mi me han ayudado:

- Ten cuidado, empieza poco a poco. Al comienzo de empezar a correr creo que me han dolido todas las articulaciones. Yo seguí, parcialmente el couch to 5k, no sé si será bueno o no, pero por lo menos propone un plan a seguir y parece razonable en cuanto a metas.
- Usa un buen calzado. De ir con unas zapatillas normales a unas en condiciones no hay color. Es de perogrullo, pero yo tardé en darme cuenta.
- Si eres un friki te puede amenizar el uso de alguna aplicación GPS que haga tracking de lo que haces (yo uso handy runner para android), usar un pulsómetro o cualquier otro elemento que te pueda dar números que analizar y comparar.
- Márcate alguna meta, por ejemplo correr todos los días la misma distancia o incrementar la distancia en X metros todos los días.

Después de 4 meses puedo hacer un análisis de los pro/cons:

- He conseguido que sea un hábito, me hace sentir mejor tanto física como mentalmente. Yo era de los que pensaba que la gente que salía a correr estaba loca, ahora les entiendo.
- Cuando empecé era imposible correr más de 1 minuto seguido y cuando llevaba 3km de camino estaba para el arrastre. Ahora puedo correr 7km a menos de 6 minutos por kilómetro sin problema, esto es con pulsaciones dentro de un margen razonable y sin sensación subjetiva de estar destrozado.
- Resulta que mucha gente que está a mi alrededor corre (y no lo sabía) y tengo un tema de conversación, además de que puedes salir juntos a correr.
- A medida que va pasando el tiempo ves como mejora tu forma, aunque es un proceso lento y a veces piensas que no está funcionando. De hecho durante los dos primeros meses pensaba: "cómo es posible que nadie diga que esto es sano"
- Entre las cosas malas han estado los momentos en los que me pasaba un poco y me dolían todas las articulaciones, pies, espalda... a menudo no desconecto y voy pensando cosas del trabajo mientras corro.

En resumen, es una meta no muy complicada de cumplir (no te quita más que una hora el día que sales a correr), que te hace sentir mejor y que para gente con una vida muy sedentaria, como es la de un programador, viene de perlas.

Si tienes algún consejo será bien recibido :) y si quieres quedar para echar unas carreras también :P.

Página Anterior Página Siguiente