Hasta luego, y gracias por el pescado

stop-the-press-300x264__1_

El Abismo de Tux inició un dia 26 de Julio de 2007, y recuerdo que su primer casa fue uno de esos hosting gratis que abundan en internet con un dominio .cc.

Personalmente el escribir este blog me ha traído bastantes satisfacciones, aprendizaje, oportunidades laborales y de vida. Viendo algunos posts históricos puedo decir que he evolucionado como ser humano y como informático.

El blog ha sido reflejo de bastantes etapas de mi vida desde mi afición por GNU/Linux, la cultura libre en general, reflexiones políticas y tecnológicas, mis estudios de pregrado y postgrado, y en los últimos tiempos se encausó al igual que mi vida profesional en tres tópicos:

  • Desarrollo enterprise (casi siempre con Java), Open Source y Gentoo Linux.

Como bitácora creo que ha cumplido su objetivo y aunque el orgullo sea un sentimiento mezquino, no puedo evitar sentirme al menos feliz porque el blog sobrevivió a la ola blogger, ya que estuve publicando posts cuando los blogs dejaron de ser relevantes. Como dato curioso este año he tenido más visitas que en cualquier otro.

Sin embargo a todo Software le llega la época de «modo mantenimiento», y al Abismo de Tux esa etapa le llegó. Muchos de mis lectores que a la vez son mis amigos en la vida real me hicieron el mismo comentario:

«Perdiste el toque anticultura y te volviste un tecnocrata».

Y realmente así fue . . . dicen que en la vida uno puede invertir su dinero en bienes materiales y viajes, pero que después de viajar nunca volverás a ser el mismo. En mi caso, pasé tanto tiempo alejado de mi familia y cultura, que con cada viaje me sentí más ciudadano del mundo y menos ciudadano de mi patria si es que alguna vez lo fui, y eso se reflejó en lo poco o mucho que me importan cosas tan fútiles como política, el lado político del Software Libre y el país donde vivo. Dicho de otra forma, en materia de software me sigue interesando el Software Libre porque me parece técnicamente superior, pero unicamente porque es técnicamente superior.

Así, un día me levanté y me di cuenta que durante una semana no realicé ninguna búsqueda en Español, y dado que mi contenido se ha vuelto netamente técnico, el blog en si ha dejado de tener su sentido . . . al menos como fue concebido, siendo el paso lógico para ser un ciudadano del mundo que hable el idioma del mundo.

Por respeto a los lectores que todos estos años se divirtieron con mis rabietas, siento que debo iniciar un nuevo sitio en ingles, en el que pretendo replicar mis andanzas en el mundo del software de una forma más profesional, menos pasional y más enfocada «The J*».

A todas las personas que me han seguido estos años les digo ¡gracias!, espero que alguna información de este blog les haya sido útil. También por respeto a ustedes y a los permalinks de Google, el blog seguirá en linea por tiempo indefinido, sin embargo a partir de ahora solo pasare de vez en cuando a instalar actualizaciones del CMS, y uno que otro post para difusión de eventos si así lo amerita el caso.

Y como buen Geek, finalizó el blog de la forma menos original posible con una frase de The Hitchhiker’s Guide to the Galaxy, «Hasta luego, y gracias por el pescado».

[Revisión Libro] Java EE 7 Essentials, O’Reilly

cat

Datos:

  • Paginas: 362
  • Editorial: O’Reilly Media
  • Publicación: Agosto 2013
  • Idioma: Ingles
  • ISBN-10: 978-1-4493-7016-9
  • ISBN-13: 1-4493-7016-0

Objetivo:

Recibi este libro como parte del programa de partners de O’Reilly, esta vez debo decir que de forma egoista ya que  al recibirlo estaba iniciando un proyecto importante de mi empresa de consultoría, lo que sin embargo me lleva a escribir la revisión del libro 5 meses después de haberlo recibido y de haberlo usado en el mundo real de desarrollo de software.

Sobre el libro:
En la biblioteca de la empresa contamos con alrededor de 5 libros de Java EE 7 ya que nuestro stack de desarrollo esta compuesto basicamente por Java 8+JavaEE 7 para el trabajo de backend (sobre WildFly AS) y JavaScript+AngularJS para front-end.

Entre los 5 libros, el libro de Arun se gano el status de ser «EL LIBRO» y practicamente es al que todos los programadores acuden cuando tienen cualquier duda. Diferente de otros libros y como su nombre lo indica, en Java EE 7 Essentials el autor sorprende al brindar un libro versátil para referencia, asi como un libro introductorio (en el punto justo) a todo los tópicos de Java EE 7, en ese periodo de tiempo he retornado con frecuencia a los siguientes tópicos:

  • Servlets
  • RESTFul Web Services
  • SOAP Web Services
  • JSON Processing
  • Enterprise Java Beans
  • Context and Dependency Injection
  • Bean Validation
  • Java Transactions
  • Java Persistence

A pesar de sugerir Glassfish como application server, el libro es bastante cauteloso en cubrir únicamente ejemplos de las APIs estandarizadas, lo que consecuentemente nos permite usarlo sin problema en nuestro dia a dia con WildFly. Debo destacar también que al no estar escrito como un tutorial, el libro cuenta con la suficiente independencia entre capítulos para consultar un tópico.

Un punto negativo que he encontrado en el libro es que la parte de WebSockets es bastante pequeña en comparación a todos los otros tópicos, lo que sin embargo no debe considerarse como algo significativo para descartar el libro.

Para los que buscan un buen libro de Java EE 7, sea para referencia o introductorio, deberían consultar el libro de Aurun antes de considerar cualquier otra opción, asi que en resumen:

 

Cosas resaltables:

  • El libro encuentra el balance perfecto y simplifica los tópicos del Java EE Tutorial
  • Cubre solo APIs standard lo que permite usarlo con cualquier servidor compatible con Java EE 7
  • TODOS los ejemplos fueron funcionales sobre Wildfly AS (aka JBoss upstream)

Cosas negativas:

 

Curso gratuito de Java 8 (Streams y Lambdas)

java-lambda-expression

Java 8 es sin duda uno de los mayores cambios en el lenguaje, tal vez solo comparable a la introducción de AOP via anotaciones en Java 5.

Considerando que la JDK 8 fue lanzada hace casi un año, mi opinión es que la programación funcional en Java llega a ser considerada esotérica tanto por viejos como nuevos programadores. Al parecer Oracle piensa lo mismo, y para desmitificar la programación funcional en Java han creado un MOOC gratuito.

El curso iniciara a partir del dia 14 de julio incluyendo contenidos como:

  1. Lambas en problemas del dia a dia
  2. Convertir clases anonimas en expresiones Lambda
  3. Aplicar la API de Streams para resolver problemas de ordenamiento, primero y ultimo, reducción de duplicados
  4. Determinar cuando conviene o no aplicar Lambdas
  5. Uso de collectors
  6. Mejoras de rendimiento con streams paralelos
  7. Debug de expresiones Lambda

Para participar basta con inscribirse en la Oracle Learning Library, y saber ingles :).

10 datos curiosos por los 20 años de Java | #Java20

Java_20yr

El mundo del Software esta de fiesta, este 23 de mayo sera el cumpleaños del (de acuerdo a varios rankings) lenguaje de programación número 1 del mundo.

Conocí Java hace 9 años durante mi segundo año de Universidad y para conmemorar este cumpleaños tan significativo, dejo aca 10 (de 20) datos curiosos para nuevos y no tan nuevos, haciendo mi mejor esfuerzo para relatar el estado actual de la plataforma.

1. ¿Que es Java?

100px-Java_logo_and_wordmark.svgJava es un nombre genérico que se suele utilizar equivalentemente para designar a (1) un lenguaje de programación y (2) una maquina virtual de ejecución de código que soporta varios lenguajes de programación.

Lanzado el 23 de mayo de 1995 podemos encontrarlo en servidores, estaciones de trabajo, reproductores BluRay, dispositivos embarcados y en menor medida en dumbphones.

2. Los que confían en Java

WIN-500XSPX-8_500

Algunos de los usuarios más famosos de Java:

3. El dia que Java se hizo libre

duke_evolution

Aunque ahora se da por sentado que cualquier programa debe ser multiplataforma, en sus inicios Java nadaba contra corriente teniendo como caballo de batalla la importancia de no ser presa de un único sistema operativo, lo que aumentó su popularidad.

No entanto, la plataforma por si sola no fue libre hasta el año 2006, habiéndose intentado sin mucho exito crear implementaciones libres para escapar de lo que se conocía como la trampa de Java.

4. JCP y la independencia de proveedor

java.gif

Adicional a la independencia de sistema operativo, Java ofrece independencia de proveedor. Para esto el JCP (conformado por empresas y grupos de usuarios) define el futuro de la plataforma, creando/adoptando estándares, y dando la libertad a que exista más de un proveedor, siendo los más famosos Oracle, IBM y Red hat.

5. Las maquinas virtuales

DukeVitru

Al ser independiente de proveedor, no existe una sino varias maquinas virtuales de Java, de las cuales se consideran como oficiales aquellas que cumplen con el TCK de Java. Entre estas puedo mencionar:

6. Las «plataformas Java»

java-2012-conference-keynote-java-strategy-roadmap-weblogic-glassfish-duko-vukmanovi-11-638

Al ser un lenguaje universal, Java se subdivide en varias plataformas básicas, ofreciendo bibliotecas y características del lenguaje dependiendo de la necesidad, siendo estas:

  • Java SE (escritorio, applets)
  • Java EE (aplicaciones Web, enterprise)
  • Java ME (dispositivos embarcados, blu ray players, dumbphones)

7. JDK, JRE y Server JRE

jvm-jre-jdk

Para utilizar Java, existen actualmente 3 «distribuciones básicas»:

  • Java Developer Kit (JDK), una distribución para programadores y despliegue de aplicaciones de servidor, incluye compiladores, documentación y ejemplos.
  • Java Runtime Environment (JRE), una distribución para usuarios finales que contiene lo minimo para ejecutar programas Java.
  • Server JRE, una distribución pensada para despliegues en servidor, incluye compiladores, documentación y elimina ejemplos y el plugin de applets Web.

8. Los otros lenguajes

1630108699-2

A pesar de tener fama de ser una plataforma lenta, lo cierto es que desde hace tiempo Java ofrece uno de los entornos de ejecución de aplicaciones más rápidos del planeta.

Por lo anterior, la JVM se ha popularizado por si sola habiendo distintos interesados en tener lenguajes de programación alternativos, funcionales, dinámicos y frescos. Entre algunos notables me gustaría mencionar:

9. Los frameworks/plataformas de todos los tiempos

1957730

Java lleva bastantes años en el mercado, por tal motivo el ecosistema de bibliotecas y frameworks ha crecido hasta el infinito, entre los más tradicionales y que probablemente se topa cualquier programador en producción están:

Frameworks/plataformas enterprise:

Frameworks/plataformas web

10. Los nuevos frameworks/plataformas

imperative-reactive

Y como todo evoluciona, estos probablemente sean junto a Spring y Java EE los frameworks/plataformas que veremos en el horizonte Java de aca a 5 años, nótese la tendencia hacia aplicaciones reactivas :).

10.1. El dia que Hitler se entero que Oracle compró Sun Microsystems

Para cerrar la primer parte, coloco el video del evento que más ha marcado a Java en los ultimos años, la compra de Sun Microsystems.

En esto ultimo puedo decir que sorprendentemente Oracle lo ha hecho mejor de lo que se esperaba, y me hubiera gustado el mismo rumbo para OpenOffice y OpenSolaris

[QuickTip] Generar un parche individual a partir de dos commits de Git

git

Recientemente tuve la necesidad de crear un parche a partir de algunos cambios realizados a una aplicación. El «reto» era que únicamente tenia la ultima versión y no tenia voluntad de descargar la versión anterior para usar diff . . . con lo cual conoci git-diff.

Como su nombre lo indica git-diff es una integración entre el clasico diff para git, con lo que podemos hacer un diff (y consecuentemente un parche) a partir de dos commits, pudiendo generar un diff total (un diff para todo el commit) o un diff parcial (para uno o varios archivos).

Identificar las revisiones

Lo primero que debemos de hacer es identificar las revisiones,  y para esto podemos utilizar git-log, recordando que cada commit puede ser identificado por los primeros 7 caracteres de la suma SHA-1

Por ejemplo con el comando:

1
git log --reverse

Obtendríamos una salida similar a la siguiente (en orden reverso para ver los ultimos commits):

log

De aca se logra identificar que las revisiones que nos interesan son  908f798 y 0c39bec.

Crear el parche para un archivo

Una vez identificadas las revisiones basta ejecutar git diff sobre nuestro archivo y llevar la salida hacia un archivo nuevo. Para esto la sintaxis a usar con git-diff es:

git diff  [revision1] [revision2] — [archivo] > [parche]

Por ejemplo,  para generar un parche para el archivo app.nabconfig.js a partir de las dos revisiones mostradas, ejecutamos:

1
git diff 908f798 0c39bec -- Folder/app.nabconfig.js > branding.patch

La salida debiera ser similar a la siguiente:

patch

 

Java vs .NET en 2015 y mi adiós a la JVM

dukeTuxJavaOne2003TShirtEl titulo que ilustra esta entrada estaba pensado para una publicación del 1ero. de Abril, sin embargo . . . no es una broma :).

Recientemente me he involucrado en un proyecto utilizando Microsoft .NET, plataforma que hasta hace poco he driblado con maestría ya que Microsoft siempre ha sido enemigo explicito del Software Libre (o del Open Source, nuevo termino favorito de este blog).

Como bien dijera Mercedes Sosa «cambia, todo cambia» y a finales del 2014 Microsoft abrió el código de .NET, con lo cual por fin (desde mi punto de vista) vale la pena dedicarle alguna linea en este blog.

Diferente de Java y los lenguajes de la JVM, mis experiencias previas con .NET han sido mayoritariamente en el ámbito académico (como estudiante y profesor) además de trabajos a nivel comercial con .NET Micro Framework (aka .NET para ARM/Windows CE), por lo que este post fue escrito como «JVM Developer experimentando .NET para desarrollo web luego de 3 años». Así, condenso en este post algunas de mis impresiones, sorpresas y decepciones con la plataforma luego de varias semanas de usarla a nivel comercial.

NuGet (sorpresa agradable)

Con la creación de CodePlex y a pesar de los malos augurios, Microsoft ha logrado construir un ecosistema alrededor de su plataforma, cosa que Delphi no logro ni en sus sueños más salvajes.

Para muchos programadores de otras plataformas no suena muy coherente crear cosas para una plataforma cerrada (yo incluido), sin embargo NuGet se ha nutrido de bastante código libre incluso antes de la liberación de .NET y hoy por hoy es un administrador de dependencias interesante.

La sintaxis de dependencias para NuGet es bastante más simple que los POM de Maven y se asemeja más a los archivos usados por NPM (conceptualmente pero no sintacticamente), además de esto Visual Studio incluye «Package Manager» para un abordaje totalmente imperativo al descargar dependencias.

Hay que tomar en cuenta que Maven ademas de ser un gestor de dependencias es un Task Runner y que Graddle ha ganado popularidad en los ultimos años. Uno de sus puntos negativos es que (y a diferencia de Maven) no se pueden mantener dependencias de un paquete en diferentes versiones y  diferentes ramas (por ejemplo tener en una rama de desarrollo Entity Framework 5 y en otra Entity Framework 6), intentarlo solo lleva a problemas de compilación por dependencias nativas y proyectos que van quedando sucios..

Como anecdota de NuGet uno de nuestros programadores más jóvenes no creía que antes la gente pagaba (y pagaba caro) por los discos de la documentación de .NET y bibliotecas auxiliares.

Licencia verdaderamente libre (lo más brutal de .NET)

Cuando liberaron .NET sentí literalmente que el infierno se congelo, y fue un orgasmo darme cuenta que la licencia utilizada para esto no es otra sino la altamente liberal MIT. Esto contrasta con la menos liberal GPL utilizada por Java. La verdad hay que decirla y en este ámbito (y a pesar de liberar solo una parte) la liberación de .NET ha sido su «característica más brutal«.

Visual Studio 2013 (Meh. . .)

Diferente de los Java IDEs, por excelencia en .NET solo hay dos IDE: MonoDevelop y Visual Studio, siendo que el primero  esta a bastantes años del segundo.

Junto con la liberación de .NET Microsoft ofrece Visual Studio Community que basicamente es la version Enterprise pero que solo puede ser usado por equipos de 5 desarrolladores. Parecería una comparación injusta pero viniendo de Eclipse y Netbeans, Visual Studio es bastante insípido y afirmo sin pena que le faltan las siguientes cosas:

  • Un buen administrador Git, el administrador actual parece un aborto entre Git y TFS. . . como resultado conocí Source Tree.
  • Un mejor editor de código, ReSharper cubre esta característica muy bien y en el peor de los casos las Productivity Power Tools cubren algunas de sus falencias.
  • Lo que más odio de Visual Studio. En la configuración padrón de Visual Studio hay que detener el servidor IIS para escribir de nuevo código!!! y al usar un navegador externo, el mismo abrirá una pestaña nueva por cada ejecución, toda una pesadilla. Afortunadamente esto si se puede deshabilitar..

Lastimosamente Visual Studio no es libre, por tanto sus problemas no deberían ser abordados por la comunidad.

Programación funcional y LINQ (sorpresa agradable)

La programación funcional es ciudadano de primera clase en .NET ya que C# lo soporta desde antes que Java. Esto se nota especialmente en LINQ, cuando las consultas son pequeñas y directas es más coherente escribir una consulta de datos utilizando expresiones lambda y se siente más Orientado a Objetos (recordando que la Programación Funcional es ortogonal a la Orientada a Objetos).

jOOq también ya se dio cuenta de esto y disponibiliza una versión con soporte para expresiones Lambda, sin embargo aun es muy joven como para hacer una comparación justa.

Frameworks/Bibliotecas (Meh. . .)

.NET se monto en estos últimos años al tren de clientes ricos en html 5, y al igual que los WebJars, en NuGet se pueden encontrar varios proyectos como jquery, angular, react, requirejs con lo cual cubren considerablemente bien esta parte (aunque generan dependencia donde no necesariamente tiene que haberla).

En la parte backend, en NuGet se encuentran cosas interesantes, y entre las bibliotecas que utilizo actualmente tengo las siguientes opiniones:

AutoMapper

Por limitantes del proyecto, algunas partes se cubren con un patrón DTO (sucio pero funcional a mi parecer) Automapper cubre muy bien su objetivo y los mapeos de DTO a entidad son bastante rápidos (de escribir y ejecutar) utilizando expresiones Lambda, es por mucho mi dependencia favorita.

Unity

Diferente de Java, en la oficina creemos que «.NET asume que eres tonto» y la inyección de dependencias es opcional en comparación a Java Enterprise Edition o al mismo Spring.

Sin embargo, para generar proyectos «testeables» y código con cohesión baja, Unity es obligatorio y funciona bien. Solo que requiere una etapa de configuración adicional que no existe en frameworks de tipo «convention over configuration».

Entity Framework

Este ha sido tal vez mi mayor disgusto, Entity Framework se vuelve difícil a menos que se tenga claro el abordaje que puede ser «Code First» o «Database First». JPA es más simple en este sentido o al menos más liberal.

Sin embargo una frase que hará sentido a desarrolladores Java y que resume mi disgusto es que:

«Entity Framework no tiene merge de grafos»

De nuevo (y más correcto)

«Entity Framework no tiene merge de grafos conformados por entidades desconectadas»

Hay un WorkItem en CodePlex acerca de esto planeado junto con la implantación del capitalismo en Corea del Norte. Sin embargo es un atributo imprescindible al crear aplicaciones HTML 5, es inaudito que no se pueda enviar un POST con un grafo padre->hijo completo a una aplicación Stateless (esencial para microservicios), en su modo de funcionamiento normal el desarrollador debe verificar manualmente los cambios en los hijos, es demasiado código.

De acuerdo al mismo item NHibernate cubre bien esta parte, y utilizar Entity Framework en este contexto fue un disparo en el pie que me llevo de vuelta a los inicios de los 2000 (8) If you wanna be my lover (8). Eventualmente solucioné parcialmente esta falencia con GraphDiff.

Mi recomendación es simplemente NO utilizar Entity Framework si la aplicación es un cliente HTML 5 que enviara grafos con padres e hijos (tan común en clientes HTML 5) y si no me creen basta verificar el WorkItem en CodePlex.

Conclusiones

En general el utilizar .NET ha sido una experiencia si no agradable, al menos enriquecedora que me da más elementos/argumentos a la hora de ofrecer soluciones. Espero que Java no tarde demasiado en adoptar Lambdas en JPA, y claro dificilmente dejare la JVM esto si era parte del titulo del 1 de Abril :).

Un efecto secundario de usar .NET es que hay que usar Windows (mi sistema operativo #1 para juegos . . . que considero funcional solo para eso). Siendo asi estas semanas he extrañado:

Cosas que me han gustado de estas semanas

  • El ecualizador de AIMP;
  • SourceTree;
  • Que en el 2015 casi todas las apps que uso sean multiplataforma -e.g. Firefox, Atom, Hexchat, Java-.

Charla AngularJS y JavaEE en Guatejug

El codigo fuente de la presentación se encuentra disponible en: https://github.com/tuxtor/cfp-angujarjs-demo

Y la presentación directo en Slideshare:

Este jueves 05 de marzo en las Instalaciones del Centro Tics INTECAP estare colaborando en las reuniones mensuales de GuateJUG con una charla sobre el uso de AngularJS junto con Java EE 7. En resumen la charla incluira las generalidades de JAX-RS y creación de APIs REST para su uso con AngularJS, ademas de algunas experiencias buenas y malas que he tenido utilizando ambas herramientas desde el punto de vista de un Java Developer tradicional.

Espero verlos por ahi :).

afiche

Acerca del Software Libre, evoluciones y el sindrome de Stallman

GNU__s_Not_Usable_by_antignu

Durante mi lectura dominical encontré en PSL un articulo bastante interesante que describe mi actual apatía por las dimensiones políticas y sociales del Software Libre: «el sindrome de Stallman» (original en portugués).

Ya que me considero un alumno de la escuela cínica, listo abajo los síntomas del síndrome en libre traducción:

  • Repúdio visceral al nombre de Stallman;
  • Asociación de los nombres GNU, FSF, Stallman o GPL al xiitismo como sinónimo de radicalismo inconsecuente;
  • Convicción de que el Software Libre debe dar dinero de alguna forma, pues no hay almuerzo gratis (joder una cita de Mises en mi blog);
  • Sentir, que entender y practicar los principios filosóficos del Software Libre tiene connotaciones religiosas;
  • Certeza de que la libertad también es «libertad de escoger», inclusive usar Software Privativo;
  • Incredulidad ante la idea de cambiar el mundo, al final de cuentas el mundo es capitalista y nada lo va a cambiar;
  • Escalofríos siempre que alguien cita que Open Source y Software Libre son cosas distintas;
  • Convicción de que esa idea de GNU y Software Libre es cosa de comunistas;
  • Discordar con vehemencia que el Software Libre es un movimiento social y político.

Aunque estoy lo bastante cuerdo como para considerar el repudio a RMS como algo tonto, me pareció un buen ejercicio intelectual preguntarme ¿como es que nace esta apatía?, y encontré algunas de las siguientes razones:

  • La humanidad: Las dimensiones sociales y políticas a diferencia de la tecnológica involucran humanos no deterministas, con alta probabilidad de incoherencia. Una de las razones para desencantarse de un movimiento es ver el «haz lo que yo digo, no lo que yo hago«, te da la sensación que estas apoyando una fantasía colectiva, especialmente cuando luchas codo a codo con un GNUista/purista y descubres que tiene una consola con juegos propietarios en su sala.
  • Dimensiones de la libertad: Una vez lees la argumentación de BSD acerca de porque deberías usar licencias BSD en lugar de GPL realmente tienes otra óptica de como funciona el mundo de las licencias. Y es muy probable que las prefieras si te interesa más la salud del código en lugar de preocuparte por bombas de tiempo legales y «restricciones para proteger la libertad».
  • Usabilidad: Como ilustra la imagen de esta entrada, a veces el camino más rápido para desilusionarte es no fijarte bien al comprar una PC y que tengas que prescindir de distribuciones realmente libres. Esto claro es más culpa de los fabricantes y en todos estos años solo he conocido en vivo a dos usuarios de este tipo de distros: RMS y un amigo que luego convencí de migrar a una distro usable porque el pobre hombre no podía ni abrir sus .mp3.
  • Juegos de Video: Tener una afición que no se de bien con el movimiento GNU, por ejemplo jugar en Steam.

Y es acá donde nace mi mayor admiración por RMS, la coherencia. El hombre no da pie a la relativización eliminando cualquier posibilidad de ambigüedad e indefinición, porque relativizando BP tiró relativamente poca cantidad de petroleo en el golfo de México y nuestro ex-presidente más famoso robó relativamente poco dinero y por tanto hay que hacerle una estatua (no, no es broma, en mi país la gente le hace estatuas a los que «roban poco»).

Por ultimo el articulo también menciona la cura:

  • Asumase, mírese a si mismo y realmente tenga certeza que quiere un mundo mejor;
  • Separe a Stallman como persona del contenido de sus ideas;
  • Entienda de una vez por todas que no hay concesiones plausibles con el Software Libre. Quien cede coadyuva y se mezcla con Software Privativo y OSI;
  • Tenga bien claro que Software Libre y Código Abierto son cosas diferentes. Mezclar solo refuerza el síndrome en usted y los demás;
  • Reconocer que usted fue quien cambio es fundamental;
  • Finalmente decida si va a volver a defender el Software Libre como el siempre ha sido o si va a asumir su cambio y pasar a defender otro concepto.

Con lo anterior creo que hace tiempo defiendo al Open Source y como menciona el autor, una vez hecho el tratamiento la vida es más placentera y honesta. Aun conservo mi admiración por gente que realmente lleva al pie de la letra el manifesto GNU, pero para mi tiene más sentido declararse defensor del Open Source a tener una consola de Iwata y juegos de Miyamoto en la sala, un repo propietario, flash player, firmware en el kernel y golpearse el pecho porque otros promueven el FLOSS de forma menos purista.

Java One Latinoamerica 2015

DukeSaltimbanqueSmall.png

¡JavaOne Latino América estara de regreso en São Paulo, Brasil!

La conferencia premium de Java se llevara a cabo los dias 23, 24 y 25 de Junio junto con Oracle World Latinoamerica y la llamada de trabajos ya se encuentra abierta. Como en anteriores ocasiones es la intención de la organización estructurar el contenido alrededor de contribuciones de la comunidad Java mundial.

Para los interesados en participar como asistentes o ponentes puedo garantizarles que São Paulo y Brasil en general son una experiencia única. Pueden ver más detalles el evento en los siguientes enlaces:

JavaOne Blog: https://blogs.oracle.com/javaone

JavaOne Web Site en Ingles:

JavaOne Web Site en Portugués:

 

Reglas tácitas de TI

tacita

El diccionario de la RAE define tácito como algo que se supone o infiere, y en este mundo de la informática siempre me ha impresionado la cantidad de reglas tacitas que uno encuentra con el tiempo. Entre algunas de mis favoritas puedo mencionar:

1) Saber Ingles

Esta fue la primer regla que aprendí en la universidad, no importa cuantos proyectos de traducción existan, el material que necesites estará en ingles y cuando este en español es probable que ya sea obsoleto. La lingua franca de la ciencia es también la lingua franca de TI.

2) Los nombres chistosos están bien

A veces ya ni los notas, pero que una aplicación sea empacada en una jarra (Jar), que un sistema operativo te recuerde a una vaca (Longhorn/GNU), que puedas asesinar procesos (kill) o que tengas a toda la fauna como logotipo es un privilegio propio de informáticos :).

3) Los diplomas son para los mortales

Esta bien tener grados académicos y de vez en cuando facilita las cosas con gente no informática, sin embargo entre informáticos de egos inflados un grado académico vale poco o nada cuando lo que cuenta son las soluciones.  Y aunque suene doloroso, es lo mismo para certificaciones.

4) Hay que huir de la programación

Esta la he visto más en informáticos Latinos. En la universidad te pasas 5 años tirando código para que durante los últimos 3 años te digan que probablemente debes alejarte de la programación porque vamos ¿quien quiere programar toda la vida?.

A opinión personal me parece una visión un poco miope y que hace que se pierdan muchos programadores buenos, afortunadamente Devops y Scrum han dignificado a los buenos profesionales de TI capaces de balancear tareas administrativas y programación.

5) Agremiarse profesionalmente solo tiene sentido si es con otros informáticos

Y es que no es lo mismo asociarse a la ACM para obtener descuentos en conferencias y publicaciones de TI que asociarte al Colegio de Ingenieros local para ganar derechos a almuerzos y descuentos en el próximo seminario de cementos y materiales de construcción.

6) Dominar una tecnología

Una de las grandes mentiras que mis profesores me dijeron en la Universidad es que da igual si aprendes .NET, Java o Delphi.

Si bien es cierto que la educación debe enfocarse a la ciencia/conceptos y no a las herramientas, al final todo informático termina decantándose por una de las tantas áreas de TI y consecuentemente debe especializarse en alguna herramienta. Programar es algo complejo y cada herramienta es un mundo, no lograras utilizar una tecnología desde el primer día con la misma productividad que tu herramienta favorita.

7) Nunca sabrás lo suficiente

Y tendrás que estudiar todos los días de tu vida o buscar un trabajo estatico.

8) De vez en cuando reinstalaras Windows

Tu familia, amigos y no tan amigos informáticos siempre te lo pedirán como favor. A veces hasta es más agradable recibir un insulto que un pedido de favor por instalar Windows, pero este mundo al final se basa en reciprocidad con el prójimo y no siempre se puede decir no.

9) Odiar al usuario final

El 100% de colegas tiene ciertas dificultades con los seres humanos porque no son determinísticos como las computadoras. A veces te cierras tanto que se te olvida que estas ahi por y para resolver problemas del usuario final.

10) La batalla de egos estará siempre ahí

Los profesionales de TI son las personas con mayor ego que he conocido en mi vida y si fuera psicólogo acuñaría el termino «síndrome de desarrolladores equivalentes». En todos los ambientes de trabajo que he estado he conocido personas brillantes, sin embargo siempre he observado el mismo patrón: «si dos personas tienen un alto nivel de conocimiento y resulta ser similar, probablemente se dará una batalla de egos por quien sabe más y quien soluciona mejor». Si se aprovecha esta batalla puede hasta ser de beneficio para la creación de Software, de lo contrario es un camino rápido al fracaso.