sábado, 27 de abril de 2013

Problemas con backface-visibility en Chrome

La otra vez al visitar el sitio de MagmaConf, la parte donde se muestran a los speakers no se estaba mostrando correctamente.





Ya le había pasado a otros compañeros, y al parecer tenía algo que ver con Chrome; lo comprobé al abrir la página en Firefox y ver como en esta todo se mostraba perfectamente.


Me dio curiosidad por saber que era exactamente lo que desencadenaba este comportamiento. Así que con las herramientas de desarrollo de Chrome comencé a alterar los valores para ver si podía producir el diseño correcto. Con sólo encontrar la clase que contiene el comportamiento de flip y los valores establecidos antes de que ocurra el cambio pude notar una propiedad que al parecer no estaba haciendo su trabajo.



La propiedad backface-visibility con el atributo hidden no funciona con Webkit, así que no se estaba ocultando esa parte del elemento antes de hacer el efecto de flip.

Por lo que con solo agregar los atributos que establecieran los valores que backface-visibility no establece en navegadores con webkit bastaría.

... .globes .back {
    ...
    opacity: 0;
    all 0.4s ease-in-out, opacity 0;
    ...
}

... .globes .front{
    ...
    opacity: 1;
    all 0.4s ease-in-out, opacity 0;
    ...
}

Así como modificar los atributos después de hacer el flip

... .globes .back .flip{
    ...
    opacity: 1;
    ...
}

... .globes .front .flip{
    ...
    opacity: 0;
    ...
}

Con esto se pudo lograr el efecto deseado.

Por cierto MagmaConf (anteriormente MagmaRails) es un evento que dura 3 días en los que se realizan sesiones para compartir técnicas, herramientas y experiencias sobre tecnologías web. Dense una vuelta por el sitio, este año habrá varias sorpresas y como siempre grandes personalidades e interesantes pláticas. No falten.

sábado, 20 de abril de 2013

Archivos y directorios en Ruby

Hace unos días, mientras platicaba y me ponía al día con un amigo de la universidad, me asalto con un reto. Me decía que quería hacer un script para renombrar varios archivos repartidos en varias carpetas y renombrar cada uno de los archivos con el nombre de la carpeta que lo contenía; en ese momento estaba reinstalando mi ambiente de desarrollo en la computadora, dentro del cual se encuentra Ruby. Así que le dije que en cuanto terminara de instalar todo, me pondría a ello.
No había tenido contacto con la API de archivos y directorios de Ruby, pero supuse que no sería complicado así que busqué en la documentación y en cuestión de minutos ya tenía el script, que en sí no es nada elaborado pero cumple con lo que se propone, obviamente se puede mejorar; lo que me gustaría resaltar es la facilidad con la que podemos hacer las cosas en Ruby. Incluso cuando le mostré el script a mi amigo y aunque el no había hecho nada en este lenguaje lo entendió perfectamente (o eso creo) y pudo usarlo felizmente en su equipo con Windows. En fin, Ruby no deja de sorprenderme.

Aquí el script:

#!/usr/bin/ruby

def directories
 directories = Dir.entries(Dir.pwd)
 directories.delete(".", "..")
 directories
end

Dir.chdir("dir")

puts directories.join(" ")
directories.sort.each do |directory|

  Dir.chdir(directory)
  File.rename(directories.first, directory << ".txt")
  Dir.chdir("../")
end

puts Dir.pwd

Como dije le falta trabajo, como por ejemplo hacerlo interactivo para que puedas navegar al directorio necesario, o poder escoger las extensiones del archivo así como agregar las correspondientes validaciones.

Ruby Doc: Dir
Ruby Doc: File

lunes, 11 de febrero de 2013

No estás solo.

Estos últimos meses he aprendido mucho. Hace poco menos de año que me metí de lleno al mundo de la programación y me he dado cuenta lo basto que es y lo mucho que hay por aprender en este campo. Sin embargo, y sobre todo cuando comienzo con una nueva tecnología, me siento abrumado por la cantidad de información que hay, de la forma en como se relacionan con otros temas que también es necesario comprender.

Leyendo un post en tutsplus, me pareció gracioso que resaltaran este sentimiento como algo normal entre los programadores, pues todos seguimos siendo estudiantes y de la importancia de aceptar que no podremos saberlo todo, pero que si nos gusta lo suficiente, esto no importará.

Y es cierto, cada vez que me encuentro ante el panorama de temas nuevos, aunque en un principio me abruma, también me emociona y me impulsa a seguir aprendiendo, no hay de otra, cada día esta industria mejora, crece y es excitante saber que siempre habrá algo nuevo que ver.

Modulos VS Herencia en Ruby

Como parte de mi iniciación en Ruby y viendo los conceptos básicos del lenguaje, llegué a la parte en el que se explica la herencia y otras alternativas como son los módulos.

La herencia en Ruby es simple, es decir, solo se puede heredar de una sola clase padre. Aquí no existen las interfaces y una manera de simular la herencia múltiple es a través de módulos.

Los módulos a demás de definir un name space (el alcance de la clases y métodos  , definen métodos y clases que pueden ser utilizados por otros módulos o clases para aumentar la funcionalidad ya sea a nivel de clase o a nivel de instancia. 


Otra vez, los módulos son para compartir comportamiento o agregar una característica genérica, mientras que la herencia es para crear relaciones entre objetos. 

Entonces la diferencia y la ventaja de utilizar módulos es que, se puede utilizar más de un módulo al mismo tiempo y en clases que no estén directamente relacionadas pero que si necesiten tener la misma funcionalidad.

A la facilidad de incluir un módulo y todos sus métodos dentro de una clase se le llama mixin.


jueves, 31 de enero de 2013

Programación

Hoy me reuní con unos amigos para hablar sobre algunos proyectos que vamos a realizar. En algún momento de la plática salió el tema de las universidades y como había sido nuestra experiencia. Esto me hizo recordar algunos puntos que me hubiera gustado saber o al menos tener noción cuando cursé mis estudios.

Para empezar yo llegué a mi carrera sin mucho conocimiento de informática, nunca había destapado una computadora y lo más que sabía hacer era picarle al Word y descargar películas. Y cuando entré me estrelle completamente con temas como algoritmos, lenguajes de programación, ciclos, variables, redes, protocolos, routers, etc. Lo que creo que es peor, es que me presentaban la programación como algo muy difícil, algo que solo gente especial podía hacer, que había que estudiar mucho. 

Sin embargo creo que esto no es del todo cierto, la programación para mi es tan sencillo como que tienes un material que podemos llamar entrada, al cual le aplicas un proceso u operación que puede o no hacer cambios en la entrada y luego tienes un resultado o salida. Ahora  solo es cuestión de hacer varios de estos procesos, juntar entradas, salidas y hacer el proceso intermedio tan elaborado como se necesite.

Es todo, sin embargo yo no podía ver esto, realmente se me hizo muy difícil y no fue hasta que me puse de lleno que pude sacar esos temas. Si se les introdujera a los personas a temas de programación con otra aproximación, mas simple y sencilla que se comprendiera el concepto se podría generar un interés genuino y libre de prejuicios causados por malas experiencias o malas practicas. 

Ahora, creo que ser un programador políglota es importante y te ayuda mucho a generar un criterio y abrir la mente a nuevas formas de resolver o evitar problemas, así que hacer consciente a las personas de que hay de donde escoger en cuanto a lenguajes, que cada uno tiene sus fortaleces y debilidades, que pueden considerarse como herramientas que podemos utilizar en determinadas situaciones, es algo que debería estar presente desde los primeros semestres. Establecer por ejemplo, las bases de la programación orientada a objetos, patrones de diseño, modelos y ahora sí, generar diferentes proyectos en los que se pueda ver en acción a los lenguajes y así tener opciones para elegir.

Otra de las cosas es el crear proyectos para aplicar los conocimientos, apegados a los "estándares" de la industria, con metodologías de desarrollo aplicadas, y formar en el trabajo de conjunto, con herramientas de comunicación y control de versiones.

Y principalmente, generar un ambiente creativo al rededor de la programación, de como ésta nos puede ayudar a resolver problemas cotidianos, aprovechar y sacar el máximo de los dispositivos a los que tenemos acceso y divertirnos en el proceso.

A lo mejor no estoy abarcando todas las posibilidades, a lo mejor no todo es aplicable y se que hay muchas cosas a considerar pero son de las acciones que me hubiera gustado experimentar a una edad mas temprana.

domingo, 27 de enero de 2013

Bootcamp Ruby on Rails

El viernes y sábado pasado tuve la fortuna de ser uno de los 15 seleccionados por Crowd Interactive para asistir a un bootcamp en sus instalaciones en Colima. Nunca había asistido a un bootcamp y vaya si fue divertido. Aún mas siendo Crowd Interactive, a los cuales llegue hace poco, y que de inmediato me  atraparon con la buena vibra y pasión por la programación que transmitía a través de su sitio. Sin embargo, estar ahí en persona, rodeado de gente talentosa, de gente con ganas de aprender, que ama lo que hace, es una sensación que me gustaría vivir a diario. 

Como dije, al bootcamp asistimos un grupo de personas con ansías de aprender, y divertirnos, así que desde que llegamos eso fue lo que hicimos, el primer se nos dio una introducción a Ruby, que nunca había tocado. Es increíble la facilidad con la que te permite hacer las cosas, la sintaxis obviamente nos saca de lo que conocemos, pero la curva de aprendizaje es pequeña, así que vimos algunos ejemplos de lo que se podía hacer y se nos reto a resolver unos problemas. 

Al día siguiente seguimos con lo que ya era el framework de Rails, con una introducción y se comenzó a elaborar una pequeña aplicación para demostrar otra vez las capacidades de la tecnología. Me divertí mucho aprendiendo y otra vez me sorprendió lo fácil y lo mucho que se puede lograr en tan poco tiempo, realmente hace felices a los programadores, porque el tiempo voló. 

Luego salimos a comer y a convivir a una casa en frente y todo estuvo muy bien. Puede platicar con otros de los asistentes y intercambiar opiniones en cuanto a las respectivas universidades a las que asistimos. 

Después continuamos con la cátedra, otra vez, las herramientas que te da Rails realmente aceleran el trabajo y aumentan la productividad. Así, llegamos al punto donde teníamos que agregar un poco más de funcionalidad a la aplicación con lo ya aprendido. Así que con el tiempo restante trabajamos en la aplicación mientras se nos brindaba apoyo en cualquier cosa que nos atoraramos. En ningún momento me frustre o desesperé, y aunque no pude terminar ese día la funcionalidad se que fue en parte por malas suposiciones mías o que no tengo todas las bases del framework. Esta mañana terminé la aplicación y pude hacerlo sin más que aclarar ciertos conceptos y replicar acciones que ya había hecho. 

Del bootcamp me quedo con la experiencia, la vibra de comunidad y apoyo y el interés de profundizar en Ruby y Rails para desarrollar aplicaciones con estas herramientas, el reafirmar mi pasión por la programación y seguir trabajando para mejorar. Realmente la pase muy bien buscaré la oportunidad de realizar y transmitir esta experiencia a más personas.

Gracias Crowd Interactive.

martes, 15 de enero de 2013

Hacker Épico

El fin de semana pasado por fin recibí el bonche de libros de Informática64, después de casi un mes (de hecho estaba algo preocupado) de espera, tengo en mis manos, una colección con temas enfocados a la seguridad y que más que nada son un capricho mio por lo mucho que admiro a los chicos de Informática64. 

Y el primer libro que leí fue Hacker Épico. Una mezcla entre novela, manual técnico y documento de divulgación. Cuando lo comencé a leer no sabía que esperar, sin embargo desde el primer capítulo me enganche con la historia y el personaje; aunque no es nada profundo y la premisa que usa no es demasiado desarrollada, cumple con su objetivo que en lo personal pienso que es enseñar y divulgar dándole una utilidad dentro de una historia a los diferentes temas de seguridad informática que contiene, además de sembrar una sed por el conocimiento. 

Estos temas no son nada difíciles y si a caso uno que otro pueden generar dudas, éstas se despejan un query en Google. Me llamó la atención lo útil que es envolver información técnica con una historia y línea y lo bien que lo hicieron funcionar.

 Lo terminé y me quede con ganas de más, espero que pronto salga una segunda parte.  Sin duda y tal como se lo dije a mi hermano, este es un buen libro por donde empezar si quisieras saber mas de seguridad por que aunque no es en sí una introducción, el libro te da un panorama muy claro de lo que se puede llevar a cabo con las herramientas adecuadas, además de estar sazonado con toques de humor y una historia muy acorde. 

viernes, 11 de enero de 2013

Trackball

Hace algún tiempo me conseguí un desktop para trabajar en casa, quería una máquina con la que pudiera trabar sin problemas. Con ella venía un mouse Logitech T-BC21 con un trackball, un aditamento muy curioso y que me resultó mas cómodo. Sin embargo el trackball no me permite hacer scroll de las páginas como normalmente se hace. A pesar de todo, el mouse trae 2 botones extra, que no se por que razón estaban configurados para ejecutar la función de "back" y "forward" sin opción de alterar este comportamiento, así que para no utilizar las teclas para navegar verticalmente por las aplicaciones y al no poder usar el trackball me vi en la necesidad de buscar un programa que me permitiera modificar los eventos desencadenamos por los botoncitos extras. Después de unos cuantos querys en Google me tope con X-Mouse Button Control un pequeño programa que me permitió configurar los botones con la función de scroll correspondiente sin mas problema. La verdad es un programa muy completo que te permite crear perfiles para los distintos botones que pueda traer un mouse e intercalar entre ellos, me imagino que la aplicación está orientada a los mouse para gamers con muchos botones, aunque a mi me resolvió mi pequeño problema.

domingo, 6 de enero de 2013

Get Things Done



Hoy comienzo mi camino en las artes arcanas del GTD, un sistema para organizar el flujo de trabajo. Este año tengo varios proyectos, libros y un torbellino de cosas que quiero lograr y como no quiero volverme loco, he decido implementar este sistema tanto en mi vida personal como en mi trabajo y el objetivo es convertirlo en un hábito.

De lo poco que he leído sobre él, se escucha algo difícil de hacer y algo que requiere disciplina, así que me voy a poner a prueba en estos puntos, quiero hacerlo porque se dice, el sistema es muy bueno.

¿Qué es?
Es una metodología o flujo de trabajo que funciona bajo la premisa de que si liberamos nuestra mente de todos los detalles y cosas superfluas que surgen a la hora de organizar un proyecto o actividad podremos entonces dedicar nuestro valioso tiempo a de hecho realizar tal actividad o proyecto.

"No ocupes tu mente en organizar, ocupala mejor en crear y disfrutar."

  • Es un cambio muy grande los hábitos de organización. Eso si se tiene cierta organización.
  • No hay "listas de tareas" clásicas. Aunque si se asignan prioridades de forma inteligente.
  • Un flujo de cuatro pasos a seguir de forma estricta.
  • Aplicable al trabajo y a la vida diaria ( "contextos").


¿Qué necesito?

  • Aprender y habituarse al método: flujo de los 4 pasos.
  • Aplicación web o móvil  que pueda sincronizar.
  • No es el método definitivo, no es para todos...
  • Paciencia: no desesperar, persistir.

¿En qué consiste?
A grandes rasgos, cada actividad que tengamos que realizar, pendiente, idea, a la que se le tenga que invertir  determinada cantidad de tiempo, la vamos a sacar de nuestra mente inmediatamente y la vamos a trasladar a un "inbox" o contenedor. Este "inbox" va a contener en primera instancia todas las actividades como primer paso, y al cual llamamos "recopilar". Entonces tendremos una lista de actividades, es decir cosas que requieren de acción, no archivos, no contenido (sonido, imágenes, vídeo), no contactos, sólo acciones.

GTD está concebido para ser ágil, y los procesos que lo componen deben de ser lo más simplificados y sencillos posibles para poder surtir efecto y lograr una mejoría, si no, sólo estaríamos entorpeciendo nuestro trabajo.

Después pasamos a la etapa de "procesar", en este momento actuamos sobre el bonche de actividades y debemos desarrollar la capacidad para valorar como reaccionamos ante las distintas actividades, en realidad suena más complejo de lo que es. Sólo preguntarnos si la actividad la podemos realizar en seguida, depende únicamente de nosotros o si requiere de alguien más para completarse.

Si la actividad no nos llevará mas de un tiempo mínimo como 2 o 5 minutos, la realizamos enseguida y así la sacamos de nuestros quehaceres. Si depende únicamente de nosotros la archivamos. Si depende de alguien más la delegamos.

Este paso esta complementa con el siguiente, que es el de "organizar", en el cual distribuimos todas las actividades de acuerdo a su naturaleza o estado. Se recomiendan 4 carpetas, conjuntos o estados: "Próximo", "Proyecto", "En Espera", "Algún día".

Las actividades de carácter urgente e inmediato las almacenamos en "Próximo", como las próximas a realizar. Pueden ser las actividades a realizar la siguiente hora o día.

Las actividades programadas para los siguientes días, o semanas las compactamos en "proyectos". Así tendremos varios proyectos, y estos a su vez deben de reducirse a actividades sencillas que podamos manipular fácilmente. 

Las actividades que por algún motivo exterior a nosotros estén detenidas, estén delegadas o necesitan algo para poder llevarse a cabo las pondremos "en espera".

Por último tenemos las acciones que queremos realizar "algún día".

El siguiente paso es la revisión, la cual se recomienda hacer 1 o 2 veces al día. En este paso verificamos el estado de las actividades y si han cambiado su estado las trasladaremos al lugar correspondiente; si ya no nos interesan o se han completado las eliminamos.
Los 4 pasos fundamentales

Recopilar

Captura de ideas, tareas, recordatorios, cosas que hay que hacer..
Todo va a un lugar llamada inbox
En cuanto aparezca la idea-tarea... mandarla al inbox
No hagas nada más, solo asegurarte de enviarla ahí.

Procesar

Es el momento de "sacar" las cosas del Inbox.
¿Requiere acción? Delégala o asígnala a carpeta
¿No requiere una acción? Archívala o elimínala.
Aplica la regla de los 2 minutos de forma estricta: Si lo que tengo en el inbox lo puedo hacer en 2 minutos lo hago. (llamada, correo breve, etc.)

Organizar

Organizamos por carpetas lo asignado anteriormente.
Carpeta: Próximo.
Carpeta o carpetas: Proyecto.
Carpeta: En Espera.
Carpeta: Algún día o tal vez...

Revisar

Chequea el estado de tus tareas y proyectos.
Hazlo "siempre que puedas" o una vez al día.
Reasigna estado... o mueve de un sitio a otro.
Proceso ágil, pero asegura el éxito del método.

Hasta aquí como introducción y como un panorama general, una vez que lea el libro podré dar más detalles de los pasos y sus características.

2013


Se fue el 2012. Un punto de inflexión para mí por todos las cosas por las que pasé, la mayoría buenas y otras no tan buenas, pero que me dejan la experiencia y el recuerdo. A manera de retrospectiva voy a comentar algunos acontecimientos que me trajeron donde estoy y que me han dado un rumbo; después de todo, como dicen, no podemos decir a donde vamos sin saber de donde venimos.

Al inicio del año me fui a otra ciudad a realizar mis practicas profesionales, viví y trabajé con dos buenos amigos. Trabaje al lado de excelentes personas y el estar lejos de mi familia y demás personas me hizo madurar en varios aspectos.

Después me gradué y afortunadamente pasó poco tiempo antes de encontrar un trabajo que me gustara. Buenos compañeros me recomendaron una asociación civil que buscaba a un programador. Y como yo lo que quería era programar, aún siendo consciente de mis deficiencias y falta de experiencia, me acerque a ver de que se trababa el proyecto.

Al integrarme al desarrollo de software profesional, me di cuenta de las debilidades que tengo como ingeniero y lo desactualizado de los temas en mi currícula en cuanto a desarrollo software,  nociones de desarrollo  en equipo, metodologías de trabajo y  administración de proyectos.

No culpó a mis profesores ni a ni universidad, la verdad es que como quiera que haya sido y afortunadamente, se lo que sé gracias a ellos. Tal vez si me hubieran dado todo no habría encontrado el interés que tengo ahora por la programación. Lo que si les reprocho y que creo que es justo, es el no haber dicho que afuera había todo un mundo en cuanto a código, era imposible que yo lo supiera o lo comprendiera; esto junto con mi apatía me llevaron a un rezago de conocimiento importante. 

No quiero que a mis compañeros y futuros miembros de mi comunidad pasen por lo mismo.Por lo que un grupo de amigos, maestros del Tecnológico y del CUS vamos a formar una comunidad en la que se expongan temas y se hagan talleres de tópicos acorde a las tendencias tecnológicas y empresariales. La idea es crear un espacio en el que se aprenda enseñando, un lugar de difusión y divulgación, con la finalidad de minimizar el rezago en el desarrollo de software profesional y gestar un espacio de innovación y networking donde puedan surgir proyectos que impulsen la región.

Tengo la oportunidad  de ser parte del proyecto DIMA y aportar a la región con los diferentes eventos que se llevaron a cabo y ser consciente de lo importante que es trabajar en red en pos del desarrollo regional. Además de estar en contacto con los procesos que se llevan dentro de una A. C y darme cuenta de que estar al tanto de estos procesos en cualquiera que sea la institución me ayuda a mejorar mi trabajo como programador.

Tuve la experiencia  de desarrollar una aplicación empresarial para la trazabilidad y la mejora de los procesos en el acopio de leche. Aprendí lo importante que es estar en constante comunicación con el cliente, las complicaciones que puede generar una mala dimensión del proyecto, la necesidad de diseñar y estructurar antes de ponerse a codificar y lo valioso que puede llegar a ser el seguir un metodología apropiada, así como lo importante de delegar actividades y confiar que en las personas hagan su trabajo. Vivir en carne propia los estragos de una mala comunicación en equipo.


Asistí a un taller de emprendimiento donde conocí a gente muy talentosa y donde me di cuenta del potencial que tiene la región. Dentro del taller pude ver lo que necesito para llevar ideas y proyectos al siguiente nivel y poder crear una PyME. Así como ser consciente de mis capacidades como emprendedor y hacia donde quiero ir.

También me vi en la necesidad de rechazar proyectos y dejar de hacer cosas para poder enfocarme a los que realmente importan y puedan generar un bien común.

Formar parte en el nacimiento de una casa de desarrollo de software me ha dado mucho gusto y reafirmado mi pasión por mi trabajo. Sin embargo también soy consciente del compromiso que implica y de como la demanda nos exige competitividad y para ser competentes necesitamos calidad. Por eso y porque veo el potencial esta tiene me gustaría ayudar y contribuir en hacerla crecer bien, con bases sólidas, y al nivel de empresas multinacionales.


También puse un negocio junto con mi mejor amigo, ha sido toda una experiencia, aunque me temo que no le he dedicado el tiempo debido. He delegado la mayoría de las actividades a él, sin embargo, pienso que es lo mejor, puesto que el carácter del emprendimiento es uno de los cuales he decidido abandonar para enfocarme en otros. Sin embargo, pienso brindarle todo el apoyo necesario para que siga creciendo y podamos hacer más cosas juntos.

Por otro lado este año que viene es importante. Con muchos proyectos en camino, y muchas cosas por aprender. Quiero terminar la cantidad ingente de libros que tengo, quiero hablar más fluido el inglés. Quiero viajar y jugar. Y quiero crecer como persona y como profesional. Quiero ayudar a mi comunidad y crear nuevas oportunidades para mí y para los que me rodean. Quiero enseñar, y que me enseñen. Quiero dormir y quiero más momentos de incertidumbre. Así que manos a la obra, después de todo la vida es un conjunto de nuevas experiencias.