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.