Aníbal Rojas RSS

Sobre mí

Algunas Fotos

www.flickr.com
Aníbal Rojas' items Go to Aníbal Rojas' photostream

Archive

Nov
27th
Sun
permalink

Nov
4th
Fri
permalink
jairob:

Taken with Instagram at Mercado Conejero

jairob:

Taken with Instagram at Mercado Conejero


Oct
14th
Fri
permalink

De por qué @irmapin no debe despotricar del Software Libre o de Código Abierto

Hace unos días la amiga @irmapin tuiteó lo siguiente:

cuando sea Apple user despotricaré del SL muajajajajaja

@irmapin ha usado Ubuntu y Fedora como alternativas Windows, pero ahora:

@anibal ubuntu la usé 2 años, tuve otro tiempito más Fedora. Pero definitivamente quiero algo bonito, más gráfico y me mantenga contenta

Y eso está muy bien, yo pienso que la gente debe ser libre de usar el software que quiera y bajo las condiciones que desee.

Los ambientes de escritorio comunmente ofrecidos por las principales distribuciones de GNU Linux difícilmente puede equiparar la experienca de usuario que brinda la Serie OS X de Apple, así que es completamente válido optar por “bajarse de la mula” y comprar un equipo Apple para navegar en ese barco.

Pero por otra parte, honor a quien honor merece, ya que debajo de toda esa gran experiencia usuario que ofrece el OS X de Apple hay código Open Source.

Los sistema operativos OS X e iOS están basado en Darwin, un Sistema Operativo Open Source creado por Apple y derivado NextSTEP (que tiempos aquellos), FreeBSD y un bueno número de sofrtware adicional licenciado bajo licencias de código libre y/o abierto.

WebKit el “motor” responsable de “dibujar” las páginas que visitas en internet cuando usas Safari está bajo una licencia de código abierto y es también usado entre otros navegadores por Google Chrome.

Si bien obviamente la mayor parte del negocio de Apple para vender su hardware se baja en software bajo licencias privativas, y su relación con el código abierto puede ser un pelo retorcida, lo cierto es que igual que la gran mayoría de grandes proyectos de software de la actualidad, está cimentado el software bajo una licencia de código abierto o libre.

Por supuesto, esto es sin movernos a otros ámbitos, ya que sólo por poner un ejemplo, consistentemente cerca del 75% del tráfico de internet a nivel mundial llega a los navegador (sea Safari en tu OS X, o Firefox en mi Ubuntu) por cortesía de Apache  o Nginx, ambos servidores web bajo licencias de código abierto.

Cada vez que accedes al sitio de Apple un servidor Apache, entre otros, es responsable entregarte esa página con ese espectacular y limpio diseño.

Así que una vez que @irmapin se convierta en “switcher” y mande a imprimir un documento desde su flamante MacBook, sin saberlo está usando el mismísimo CUPS (Common Unix Printing System) que usara antes en Ubuntu o Fedora.

Como ven, no hay motivo para despotricar del Software Libre, aunque estés usando algo más gráfico y bonito, que te mantenga contento ;)


Sep
30th
Fri
permalink

Vintage @sd (las cosas que uno consigue limpiando el tarjetero)


permalink

De como Oracle me introdujo al mundo del Open Source / Free Software

Hace muchos, muchos años, en una Corporación muy, muy distante, me encontraba junto con @edgar me encontraba desarrollando una aplicación web…

;-)

Para concretar un poco el escenario les puede decir que eso era algo así como 1999, y que la companía que nos había contratado disponía de un inmensa infraestructura de TI dominada por los “Gemelos Fantásticos” de aquella época, Sun Microsystems y Oracle.

En aquel momento la especificación J2EE  (sí, J2EE no JEE) estaba en pañales a efectos prácticos, pero ya disponíamos (en principio) de Servlets y JSPs (Ohhh…), que pensábamos usar para armar la aplicación.

Mientras hacíamos pruebas e investigábamos, descubrimos que el OWAS (Oracle Web Application Server) era una pieza de software extremadamente inmadura e inestable que estaba muy lejos de cumplir con los estándares. Por poner un pequeño ejemplo, la sesión no era compartida entre los Servlets y los JSPs, un detallazo pues.

Para nuestro infortunio uno de las sysadmins involucrados en el proyecto se había tomado TODO el Kool-Aid de los vendedores de Oracle y se negaba a instalar cualquier software que no le vendieran ellos. Los motivos aducidos eran: estabilidad, seguridad, mantenieminto, etc. Ustedes saben como es el tira y encoge entre desarrollo y operaciones.

Ante la pobreza de las librerías de Oracle, y la dantesca perspectiva de hacer toda la aplicación generando el código HTML directamente desde los Servlets, que era lo que usaba en la época. Nos dedicamos a revisar las alternativas que teníamos (recuerden la fecha) y terminamos de cabeza en http://jakarta.apache.org/

Al final terminamos usando Turbine como framework MVC y Velocity como template engine, dejando de lado todas las herramientas de Oracle. Después de bastantes dificultades logramos que todo funcionar bien en el OWAS, y la aplicación se mantuvo rock solid en producción durante muchos años.

Algunos años o meses después, no recuerdo bien. Oracle desechó completamente su  OWAS, reemplazándolo con el excelente Orion Application Server que adquirieron de la gente de ironFlare, y que nosotros en su momento habíamos sugerido como reemplazo del infortunado engendro de Oracle :-)

Hasta ese momento siempre habíamos trabajado con herramientas de licenciamiento privado, pero después de que el nunca bien ponderado vendedor de Oracle nos lanzara por el camino del Código Abierto y/o Libre, ya no hubo vuelta atrás.

Hoy en día tenemos años desarrollando principalmente con Ruby On Rails, después de que nos obstináramos de Java y lo dejáramos al lado del camino. Nuestros portátiles y los de nuestro equipo de programadores corren con diferentes sabores de GNU Linux, y todo esto gracias a las diligencias de una corporación que ha sido el marido que golpea a la mujer en lo que a licencias de abiertas de software se refiere.

La imagen es original de http://www.motifake.com/facebookview.php?id=61286


Sep
29th
Thu
permalink
Considerando cambiar de ABA de CANTV a Compuserve, peor no puede ser.

Considerando cambiar de ABA de CANTV a Compuserve, peor no puede ser.


Sep
18th
Sun
permalink

Como ser un mejor programador (un guía libre de pendejadas)

Yo no soy un gram programador, creo que nunca lo he sido, aunque por mucho años me dedicara a programar profesionalmente. No me entiendan mal, no es que no me guste programar ni que mi código apestte, en realidad me gusta mucho y he tenido muy buenos momentos programado, pero el trabajo no me deja mucho tiempo para hacerlo.

Por otra parte he conocido muchos programadores, la mayoría mediocres, muchos regulares, algunos buenos y unos pocos brillantes. Reconozco un buen programaodr cuando lo veo.

He sido responsable de formar a muchos programadores, particularmente en Java, en un pasado lejano, y en Ruby y Ruby On Rails más recientemente. Y he podido ver de cerca el proceso de aprendizaje de un paradigme, lenguaje, framework nuevo en una gran variedad de personas y ambientes.

Aquí van unas pocas recomendaciones libres de paja, idioteces, pendejadas, boludeces, tonterías o como lo quieran llamar en su variación local del español, para todos aquellos que quieran ser mejores programadores.

Asegúrate De Que Programar Es Lo Tuyo

Sueno complicado, pero es sencillo: si programar es como una droga para tí, entonces programar es lo tuyo. De lo contrario, cambia de trabajo o al menos quítate esa etiqueta de la cabeza para que vivas una vida más plena y feliz.

Si cuando eras un niño quería programar, si apenas pudiste  te compraste un computadora para programar y no la soltabas, si durante tus estudios te comías los libros de algoritmos, y estructuras de datos adelantándote a los profesores, si te despiertas en medio de la noche con la solución al problema que no lograste resolver durante el día, si logras entrar en “la zona” y te cuesta salir de ese trance hipnótico, entonces, programar es lo tuyo.

Cubre Lo Básico

Dependiendo de qué carrera hayas estudiado, y el nivel que hayas alcanzado tus conocimientos de programación vas a variar en un rango bastante grande. Conocer los diferentes paradigmas de programación, algoritmos y estructuras de datos, así como los escenarios donde es ventajoso utilizar uno u otro es extremadamente importante porque el que sólo tiene un martillo, todo lo ve como un clavo.

Si hoy en día no sabes que son Patrones de Diseño ni como aplicarlos, o los acrónimos BDD y TDD son un misterio para tí, o no estás usando control de versiones, hay un buen chance que esto no sea lo tuyo o de que no estés en el ambiente adecuado.

Busca Un Trabajo Donde Se Aprecie A Los Programadores

Programadores hay regados por todos lados, y en todas las industrías, pero en pocas se aprecia el trabajo de los programadores. Nuestros programas rara vez constituyen un fin último en si mismos, pero hay organizaciones y personas que desprecian olimpicamente el trabajo de un programador, los sintomas suelen ser evidentes:

  • Todo “es sencillito” y “puede hacerce rapidito”
  • Se establecen metas poco realistas sin consultarte.
  • Nadie te orienta o discute contigo como resolver un problema.
  • No hay otros programadores buenos en el equipo con los que discutir.
  • Nadie revisa tu código nunca.
  • Siguen utilizando las mismas tecnologías y prácticas año tras año.
  • Y así, ustedes ya me entienden.

Corre y pon tu renuncia, en ese ambiente no vas a poder crecer como programador, si eso es realmente lo que quieres hacer.

Se Orgulloso

Los buenos programadores son orgullosos, en serio. Si te reunes con otros programadores y no sientes la más mínima necesidad participar en la competencia de ver si tu chorro de orina llega más lejos, entonces tienes un problema de actitud.

El puro orgullo te va a llevar a hacer cosas interesantes, la mayor parte de ellas increiblemente estúpidas, pero divertidas e interesantes. No confundas orgullo con soberbia.

Aprende A Ser Humilde

Créeme no inventaste la rueda, y las posibilidades de que la inventes son pequeñas. Ser humilde significa dejar siempre abierta tu mente a la posibilidad de que estes equivocado, de que hay una mejor forma de resolver el problema y que pedir la opinión y ayuda a otros es algo completamente válido.

Ser humilde no significa ser inferior, ni tener un problema de autoestima, significa que sientes un gran respeto por quienes te rodean, como personas y profesionales. Significa que “no saber” no es un pecado, y es algo que puedes reconocer sin problema.

Haz La Tarea

Antes de empezar a echar código, piensa en otras alternativas para atacas el problema al que te enfrentas.

  • ¿Existen problemas similares en la literatura? (Cubre Lo Básico)
  • ¿Revisaste el código prexistente?
  • ¿Qué es lo último que se ha escrito sobre el tema?
  • ¿Realmente eres el primero que se enfrenta a este problema? (Sería raro)
  • ¿Puedes aprovechar alguna librería existente?

No te quedes sólamente con el primer resultado en el resultado de la búsqueda en Google. La mayor escuela de programación que existe son llas millones de líneas de código abierto regadas por interner, busca en github, revisa el código, aprende de los grandes.

PREGUNTA

La escuela nos enseña que preguntar es malo, porque pone en evidencia “que no sabes”, cuando generalmente ese es el punto. Atrévete a preguntar, pregunta una y otra vez hasta que las respuestas te satisfagan. Por supuesto, asegúrate de haber hecho la tarea primero.

Insisto, deja el puto miedo a parecer un tonto, y PREGUNTA. A tus clientes, a tus compañeros de equipo, en las listas de correos, en el IRC en Twitter o en Stack Overflow, atrévete a preguntar. Para tu gran sopresa vas a encontrar a mucha gente más que dispuesta a responder y ayudar.

El Resultado De Tu Comunicación Es La Respuesta Que Obtienes

Este es un principio de la Programación Neurolinguística, muy posiblemente no lo entiendas en este momento, no importa. El punto básico que si tienes que enteder es que al final la parte más compleja e importante de todo es asunto del desarrollo de software es la comunicación.

La comunicacióm interpersonal es extremadamente compleja, comunicarse en forma eficiente te va a ayudar mucho más que tus destrezas mecanografiando porque muy rara vez el trabajo de programación sucede a solas, en una isla.

Más allá del nivel interpersonal, está el código y si bien los intérpretes y compiladores dejan poco margen para errores, la posibilidad de que en el futuro otra persona tenga que revisar tu código es muy alta. Tomando conciencia de que alguien va a estar del otro lado de tu commits:

  • ¿Qué tal expresivo es tu código?
  • ¿Mantienes un buen estilo para hacer el código legible?
  • ¿Colocas comentarios útiles?
  • ¿Tus commits incluyen sólo los cambios relavantes?
  • ¿Tus mensajes de commit ayudan a entender la evolucón del código?

NO Es Rock En Tu Idioma

Para finalizar quiero decirte que por más que encanta el español como idioma, con toda su riqueza expresiva, tienes que aprender inglés. El inglés es la lingua franca del desarrollo de software, es la lengua que permite a programadores dispersos por todo el mundo compartir lo que saben y trabajar juntos día a día.

Si cuando tipeas http://google.com en tu navegador la págína que aparece está en español tienes problemas muy, muy serios. Estás viviendo al margen de una inmensa cantidad de blogs, proyectos Open Source, cuentas de Twitter, listas de correo, discusiones en IRC que son el cutting edge de la tecnología.

El hecho de que cualquier estudiante complete una carrera en el área de Ciencias de la Computación, Ingeniería de Sistemas o alguna otra asociada sin tener almenos la capacidad leer y escribir fluidamente en inglés sólo puede ser entendido como una discapacidad desde el punto de vista profesional.

Bueno amigos, eso es todo. Suerte!


permalink
negrecio:

#ForeverGuacharaca

negrecio:

#ForeverGuacharaca

(via chiguire)


Aug
18th
Thu
permalink

Primeras impresiones de la Dell XPS L502X

Después de una semana con la nueva Dell XPS L502X mi balance de la máquina es bien positivo.

Sin embargo hay que estar muy claro de que es un desktop replacement, lo que en mi caso es perfecto pues este laptop permanece la mayor parte del tiempo en mi oficina conectado a un monitor secundario, y de vez en cuando me la llevo a la casa o a las oficinas de algún cliente.

Las especificaciones de la máquina son:

  • Procesador Intel Core i7-2630QM a 2.00 GHz con Turbo Boost hasta 2.90 GHz.
  • 8GB de Memoria de Canal Compartido DDR3.
  • Disco Duro SATA de 750GB a 7200 RPM.
  • Pantalla LCD de 15.6 FHD B+RGLED TL (1920x1080) con  Webcam 2.0MP HD integrada.
  • CD ROM/DVD ROM: Combo de disco Blu-ray / BD (lee BD y escribe DVD/CD)
  • Intel Centrino Wireless-N 1030 con Bluetooth 3.0.
  • Cornetas JBL 2.1 con Waves Maxx Audio 3.
  • Teclado retroiluminado.
  • Bateria de 90 WHr 9-cell Lithium Ion.

A nivel de puertos trae:

  • 1 Mini DisplayPort (cableado a la tarjeta de video Intel Integrada)
  • 2 USB 3.0.
  • 1 USB 2.0 (eSATA/powershare combo)
  • 1 LAN (RJ45) 10/100/1000 .
  • 1 Conector para adaptador HDMI 1.4AC (cableado a la Nvidia)
  • 2 Audífonos con soporte SPDIF.
  • 1 Micrófono.

La máquina es brutalmente rápida, aún no he terminado de configurar las herramientas de desarrollo pero en lo que es el uso del día entre browsers y demás herramientas de escritorio sencillamente vuela.

Pantalla, teclado, touchpad, webcam y audio son excelentes. El teclado ofrece muy buen feedback, no hay sopresas en la disposición de las teclas, y la retroiluminación tiene dos niveles de intensisdad y apagado. En general la máquina se siente muy sólida, aunque por otra parte ligera no es.

Yo estaba acostumbrado a tener 4 puertos USB en mi Dell anterior, realmente extraño los dos que me faltan, pero no es nada que un simple hub USB no pueda solucionar. Aunque mataría por tener al menos un purto USB a la derecha de la máquina.

La batería de 9 celdas es grande, y presenta un gran protuberacia bajo esta laptop que sirve para elevar e inclinar el equipo ofreciendo una pantalla bastante elevada y un teclado bien inclinado hacia adelante cosa que disfruto muchísimo.

En conclusión, este es un portátil grandote, con excelentes prestaciones y que funciona perfectamente como un desktop replacement para trabajo duro. No es la laptop liviana que vas a llevar y traer todos los días del trabajo.

En este eequipo puedes correr comodamente los servicios que te den la gana en un ambiente virtualizado, mientras cruncheas big data o corres un largo test suite sin afectar la respuesta de tu escritorio mientras navegas por intenet.

Aún estoy terminando de montar Ubuntu y mis herramientas de desarrollo, mi único problema con el hardware hasta el momento ha sido la Nvidia con su Optimus que por el momento permanecerá apagada en Linux, y que reservaremos para los juegos y media que descansan en la partición Windows, pero es es otro post ;)


Jan
31st
Mon
permalink

De Subversion (SVN) a… Git? Bazaar (Bzr)?

Antes que nada, no tienes que dejar de usar Subversion, como SCM realmente funciona muy bien, rock solid y con muchos años rodando realmente es una apuesta segura.

Sin embargo a Subversion ya se le ven las costuras, el esquema centralizado puede ser extremadamente fastidioso, requiriendo de conexión al servidor para practicamente todos los comandos que te interesa ejecutar.

Por otra parte branchear en Subversion es muy poco ágil, por lo que los programadores suelen quedarse estacionados en trunk sin inventar mucho lo que tiende a empastelar lo que es work in progress, con bug fixes y demás yerbas.

¿La respuesta? Sencillo, compra un carro nuevo ;) Es decir migra a un sistema de control de versiones distribuido. En particular te puedo decir que dos buenas opciones (hay muchas más) son Git y Bazaar.

No voy a entrar en detalle sobre sus características ni a compararlos, sin embargo después de haber usado Subversion, Bazaar y Git, y haber dado cursos de estos a diferentes grupos, te puedo decir lo siguiente:

Bazaar

Empecé a usarlo porque me parecía que Git era horrorosamente complicado, opinión que sostengo aún hoy en día. Funciona, y hace su trabajo muy bien.

Sin embargo yo diría que su principal ventaja radica en la flexibilidad y consistencia que ofrece. Bazaar no impone ningún workflow de trabajo, si lo quieres usar como Subversion con los commits amarrados a un servidor centralizado, te permite hacerlo sin mayor esfuerzo. Si quieres usarlo como en forma completamente distribuida, también puede hacerlo sin problema, y además puedes switchear entre workflows en forma sencilla.

Por otra parte las línea de comando es una obra de arte, muy consistente, los comandos son autoexplicativos, sencillos de usar. No te puedes perder ahí.

Git

Brutalmente eficiente, y rápido, en verdad endemoniadamente rápido, empecé a usar Git porque no me quedó más remedio. El hijo de puta es complejo, pero hay que reconocer que es brutal.

En este punto los fanáticos de Git empiezan a explicar que una cosa son las “cañerías” y otra la “porcelana”, bla, bla, bla. Pendejadas, la “porcelana” (la colcha de retazos vomitada que son los comandos) es sencillamente absurda, en todo caso es la porcelana de un baño de carretera.

Que las “tuberías” funcionan como las de un Fórmula Uno, si. La velocidad es sencillamente pasmosa. Y muy eficiente en la _mayoría_ de los casos.

Por otra parte lo que tienes que comprar de Git, son los branches. Poder administrar los branches como te permite hacerlo este SCM te da un increíble poder como desarrollador.En verdad, es como una droga.

Eso sí, recuerda que “con un gran poder, viene una gran responsabilidad” Si la cagas con los branches, te vas a arrepentir.

Conclusión

Sin más, yo opino que “Bazaar te da el 80% del poder de Git, con un 20% del esfuerzo”. Decide si quieres “the real thing”, o si quieres sencillamente quieres ser feliz ;)