Un Plugin de Foursquare para CakePHP

Foursquare LogoCakePHP es un framework enorme con un montón de cosas fantásticas, y como sabrás, la mejor manera de aprender los conceptos de la herramienta es sumergirse en ella.

Recientemente he estado aprendiendo sobre las APIs de las redes sociales y como manejan los sistemas de autenticación de usuarios. La mayoría de ellas utiliza el nuevo Estandar OAuth, el cual permite a los sitios publicar a través de sus APIs información de los usuarios con un alto nivel de seguridad y protección.

Por otro lado, he estado jugando un poco con los DataSources de CakePHP para obtener la información desde las APIs y hacer un montón de cosas divertidas. Es increíble lo que uno puede aprender cuando enfrenta un desafío en el cual no se conoce nada sobre una tecnología y debe investigarse desde el principio.

Si juntamos las APIs y los datasources, el desafío es crear un plugin que permita conectar a alguna red social e interactuar con ella. La red social elegida es Foursquare, debido a que cumple con todos los requisitos y no pude encontrar ningún buen plugin para ella (Hay algunos datasources que interactuan con la vieja API).

Como último punto, también estoy aprendiendo a usar GIT, así que alojé el plugin en Github. Tal vez quieras descargarlo y probarlo. Cualquier tipo de ayuda es bienvenida.

URL del Plugin: https://github.com/asmerkin/CakePHP-Foursquare-Plugin

Rebinding con JQuery – Arreglando nuestro javascript luego de llamadas en AJAX

El Problema

A veces puede surgirnos el problema de que luego de una llamada a AJAX con JQuery, mediante funciones como $.ajax o $.load, algunos de nuestros eventos dejen de funcionar. También puede suceder que a veces mediante Ajax o javascript generemos elementos del DOM a los que queremos asignarles un evento en particular. Pués posiblemente los eventos para estos elementos nuevos no funcionen.

¿Por qué ocurre esto?

Cuando realizamos la llamada a $(‘document’).ready(fn) esta se encarga de inicializar todos nuestros binds para que estén disponibles en nuestras páginas. Entiendase un bind como la funcion .bind(‘event’, fn), la cual tiene shortcuts como .click, .mouseover, etc.

Cuando realizamos una llamada a AJAX, nuestro DOM sufre modificaciones, haciendo que los binds anteriores queden obsoletos. Lo que tenemos que hacer es volver a ejecutar esos binds de los elementos para que vuelvan a estar disponibles después de la llamada AJAX.

Para ser un poco más claros, cuando JQuery carga su método ready(), a los elementos del DOM seleccionados les aplica algo similar a lo que muestra el siguiente ejemplo:

<li onmouseenter="function()..." onmouseleave="...">...</li>

Cuando ocurren las llamadas AJAX esas modificaciones se pierden. Lo que nosotros tenemos que hacer es lograr que JQuery vuelva a cargar los eventos asignados a los elementos del DOM.

Solución

Vamos a ver un pequeño segmento de código:

?Ver código JAVASCRIPT
$('document').ready(function() {
    iniciarBinds();
 
    $.ajax({
          url: "test.html",
          context: document.body,
          success: function(){
               $(this).addClass("done");
               iniciarBinds();
          }
    });
 
    function iniciarBinds() {
        $('#target').click(function() {
               alert('Handler for .click() called.');
        });
 
    }
 
});

En el ejemplo anterior vemos como realizar el rebind mencionado. En la función iniciarBinds() colocamos todos aquellos binds que puedan llegar a sufrir debido a la llamada AJAX. Luego, al principio de la llamada a $(document).ready() llamamos a la funcion iniciarBinds(). El rebinding surge después de la llamada en AJAX, en el caso de “success”. Como podemos ver, nuevamente estamos llamando a la funcion iniciarBinds(). Si no hicieramos esto, los binds creados se perderían a causa de modificaciones de la estructura del DOM, pero con el rebinding los eventos se refrescan para todos los elementos, incluyendo las modificaciones.

Aprendiendo con software libre – Invirtiendo a mediano plazo

Después de ver y revisar muchas veces los fundamentos del software libre, su filosofía, y como la gente trata de convencer a otros para que comiencen a utilizar software libre, es que he llegado a la siguiente conclusión. “Aprender y utilizar herramientas libres es una inversión de mediano plazo”. Paso a explicar el por qué.

Si conoces la comunidad libre, habrás leido varias veces las cuatro libertades fundamentales que mueven al software libre:

0 – la libertad de usar el programa, con cualquier propósito.
1 – la libertad de estudiar cómo funciona el programa y modificarlo, adaptándolo a tus necesidades.
2 – la libertad de distribuir copias del programa, con lo cual puedes ayudar a tu prójimo.
3 – la libertad de mejorar el programa y hacer públicas esas mejoras a los demás, de modo que toda la comunidad se beneficie.

Ahora, es realmente poca la gente que entiende la esencia de dichas libertades. Esto se debe a que los nuevos usuarios (y algunos avanzados) no toman conciencia de la maduración que se requiere para poder finalmente comprender las libertades y comenzar a aprovecharlas.

Etapas en el uso de herramientas libres

Cuando uno comienza a utilizar herramientas libres, generalmente pasa por las siguientes etapas

1 – Luchar contra el Software

Generalmente ocurre con la primera instalación de alguna distribución de Linux. Algún periferico que no anda, algún driver que no se comporta como debería, etc. Ante la falta de conocimiento sobre el asunto, se debe luchar para lograr que el sistema funcione como debe. En este punto mucha gente se frustra y vuelve hacia atrás (a seguir usando lo que usaba antes). Esta etapa es la linea de fuego (un colador) que filtra a los curiosos que realmente quieren aprender de todos aquellos a los que no les interesa.

2 – Utilizar activamente el software libre

Una vez que se entiende la esencia y el funcionamiento básico, se está preparado para adoptar software libre en el uso diario. En esta etapa es donde realmente uno se asienta en el ámbito de la comunidad libre y comienza a entender la filosofía de compartir y aprender colaborativamente. Podriamos decir que se entienden las libertades 0 y 2.

En esta etapa el usuario ha adquirido un nivel importante de curiosidad y suficiente destreza como para evacuar sus dudas mediante la búsqueda e interpretación de la información disponible en la red. En este punto se ha alcanzado un espíritu de investigación muy rico que permite aprender y progresar rápidamente.

3- Aportar a la comunidad

La tercer etapa es aquella en la que el usuario ya no solo utiliza software libre y se siente parte de la comunidad, sino que de alguna forma comienza a realizar aportes. Esto se debe a que se alcanza un nivel de comodidad, capacidad de investigación y de transmisión del conocimiento que facilita la realización de aportes. No todos llegan a este nivel, pero aquellos que lo hacen se sienten muy cómodos con la utilización de herramientas libres y a veces hasta se complica el uso de herramientas privativas debido justamente a la falta de las libertades fundamentales. En este punto se entienden y dominan las 4 libertades.

Conclusión

Para que un usuario realmente llegue a captar la esencia de las libertades, debe haber tenido suficiente tiempo de pasar por las etapas mencionadas anteriormente. Para que esto ocurra, pueden llegar a pasar años.

Es muy complicado transmitir las cuatro libertades a un nuevo usuario o a un no usuario y pretender que las entienda rápidamente. Para poder comprender su significado, un usuario debe previamente entender y utilizar herramientas libres, integrarse a la comunidad libre y poder realizar algún aporte (aunque sea comentar algún artículo) a la comunidad.

Un usuario que se encuentra en la tercer etapa ha explotado su curiosidad, su capacidad de investigación y análisis de tal forma que ha adquirido una gran destreza autodidacta para adquirir nuevos conocimientos. Esto es un recurso invaluable y deseable en todos los individuos, y especialmente en aquellos que deban mantenerse actualizados en disciplinas con crecimientos tan marcados y rápidos como lo son las carreras informáticas.

Debido al tiempo que se requiere para dominar las libertades y las capacidades que necesitan educarse para poder realizar lo mencionado anteriormente, es que podemos concluir que la utilización de software libre es una inversión de mediano (y si se quiere de largo) plazo.

Conocimiento-libre.org – En marcha!!

Es un honor poder comunicar que por fín la comunidad tiene sitio oficial y definitivo. Ahora solo faltan los contenidos.

Hemos arrancado el año con muchos proyectos, entre los que se encuentran:

  • La formación de una ONG.
  • La difusión del Software Libre dentro y fuera de la UTN
  • El contacto y la creación de una red con otras universidades
  • La creación de proyectos para realizar actividades fuera de la universidad.
  • Publicación de artículos y revistas, tanto propios como de terceros.
  • Desarrollo de diversas aplicaciones

La comunidad se encuentra abierta a todo el público y cualquiera puede comenzar un grupo nuevo. Lo unico que hace falta tener es una idea y ganas de participar.

Enlace: http://conocimiento-libre.org

Modernizr y Selectivizr – Dos librerías Javascript para potenciar nuestros desarrollos web

Buscando algunas herramientas Javascript y leyendo algunos libros, como Hardboiled Web Design, de Andy Clarke, me he cruzado con estas dos excelentes herramientas para poder potenciar nuestros diseños y desarrollos web y utilizar las últimas tecnologías disponibles, pudiendo controlar mejor el renderizado de nuestros sitios web en navegadores que no soporten dichas tecnologías.

Modernizr

Modernizr es una librería Javascript que nos permite tener un mayor control sobre la aplicación de CSS3 y HTML5. Esta librería detecta las capacidades el navegador web del usuario y en base a eso añade clases al tag <html> de nuestros documentos web. De esta forma, podemos referenciar cualquier elemento interno del documento y alterarlo mediante estilos para que se muestre correctamente en navegadores que no tengan soporte para dichas nuevas tecnologías

Por ejemplo, al momento de escribir este artículo, el navegador que estoy utilizando es Firefox 3.6.13. Gracias a Modernizr, la etiqueta <html> queda de la siguiente forma:

 
<html lang="en" dir="ltr" id="modernizr-com" class=" js flexbox canvas canvastext 
no-webgl no-touch geolocation postmessage no-websqldatabase no-indexeddb 
hashchange no-history draganddrop no-websockets rgba hsla multiplebgs 
backgroundsize borderimage borderradius boxshadow textshadow opacity 
no-cssanimations csscolumns cssgradients no-cssreflections csstransforms 
no-csstransforms3d no-csstransitions fontface video audio localstorage 
sessionstorage webworkers applicationcache svg no-inlinesvg no-smil svgclippaths">

De esta forma, podremos referenciar mediante estilos CSS, cualquier elemento del documento que no soporte alguna tecnología específica. En mi caso particular, podemos ver que Firefox 3.6.13 soporta columnas CSS3 (csscolums), pero no soporta reflexiones (no-cssreflections).

Entonces, supongamos que diseñamos un sitio con gradientes CSS, pero queremos que para el caso en que el navegador no soporte gradientes CSS3 se muestre un color específico, podríamos utilizar el siguiente código:

 
.no-cssgradients #elemento {
     background-color: color;
}

De esta forma, si el navegador no soporta gradientes CSS, Modernizr añadirá la clase .no-cssgradients al tag y el selector se validará, aplicando el color de fondo definido.

Sitio oficial: http://www.modernizr.org

Selectivizr

Algunos navegadores, como Internet Explorer, en sus versiones 6 – 8, no tienen un soporte completo de selectores CSS, pero gracias a esta librería podremos aplicar dichos selectores sin problemas.

De esta forma podemos dar estilos a nuestros sitios web aprovechando toda la potencia que nos brindan todos los selectores y pseudoselectores disponibles.

Selectivizr aprovecha los frameworks de Javascript disponibles, como Jquery, Mootools o Prototype para brindar el soporte extendido de selectores. Dependiendo del framework del que dispongamos será la cantidad de selectores admitidos por Selectivizr. En su sitio web podemos encontrar una tabla comparativa al respecto.

Sitio oficial: http://selectivizr.com/

Un poco de DJing – Consola Hercules MK4

Hercules Mk4

Hercules Mk4

Desde hace un tiempo que le tenía ganas, y en uno de esos ataques de locura que nos agarra a algunas personas tomé la decisión de comprarme una pequeña consola de DJ para conectar a la computadora y utilizar con algún software.

Lo que compré fue una Hercules MK4. Es una pequeña consola que se conecta por USB a la computadora, y mediante algún software como VirtualDJ, Traktor, o Mixxx (si hablamos de software libre) podemos hacer nuestras mezclas con resultados de gran calidad.

Además, la consola viene con una placa de sonido integrada, con 2 canales de entrada y dos de salida. De esta forma podemos utilizar un canal de salida para hacer preescucha con auriculares y otro para enviar la mezcla a algún equipo de sonido. Las entradas sirven para conectar dispositivos externos, tales como bandejas, ipods, etc y hacerlos participar de nuestras mezclas.

La consola pesa 1.15kg, tiene el tamaño aproximado de una Notebook de 13” y está hecha de un plástico muy resistente. Todo esto permite que la máquina sea muy portable. En la caja del aparato viene una bandolera para engancharsela y llevarla, pero yo prefiero meterla en la mochila junto con la computadora. También viene con un plástico cobertor muy resistente.

La máquina ya está, ahora falta el DJ, así que no se extrañen si empiezan a ver artículos relacionados en este blog. Hasta quien sabe, en algún futuro puedo llegar a subirles algunos de mis resultados!!, pero eso no será hasta dentro de un tiempo, cuando empiece a hacer mezclas decentes.

Hardboiled Web Design – Por Andy Clarke

Si sos desarrollador o diseñador web, este es un libro que no podés dejar de leer. Hardboiled Web Design explica como traer las últimas tecnologías de la W3c (HTML5 y CSS3) a tus sitios web sin tener que preocuparte por los navegadores anteriores.

Generalmente se aplica el concepto de “lograr que se vea igual en todos los navegadores”. Por otro lado, Andy Clarke presenta la idea de “dar más beneficios a aquella gente que tenga navegadores que puedan soportarlos”. Dichos beneficios se refieren tanto al aspecto visual como a la usabilidad y a la accesibilidad. Esto significa que aquellas personas que utilicen navegadores como Google Chrome, Opera 11, Safari 5, Firefox 3.+ o IE9 podrán gozar de las últimas tecnologías en lo que se refiere al desarrollo de interfaces web, mientras que los que utilicen navegadores más antiguos podrán seguir disfrutando de un sitio funcional, que muestre correctamente (pero no igual) el contenido.

Esto permite que apliquemos todo el poder de las nuevas tecnologías a partir de este momento, que es cuando son novedad, en vez de esperar a que se estandaricen, lo que puede suceder dentro de varios años.

El autor ha explicado perfectamente la utilización de HTML5 y CSS3, mediante ejemplos prácticos de fácil entendimiento. Además, nos provee de enlaces a herramientas de código abierto que nos facilitan la aplicación de los últimos borradores de la W3C  y aún así mantener sitios usables y accesibles para navegadores que no los soportan.

El libro está en inglés y no se si pueda haber una traducción al español, pero si tenés la posibilidad, te recomiendo que lo leas de principio a fin.

La comunidad de software libre en marcha …

Por fin se puede decir que la comunidad de software libre está en marcha.

Realmente estoy muy contento de que esto se pueda llevar a cabo. Es verdad que todavía falta gente y muchas cosas por hacer, pero en este momento le damos inicio a la comunidad.

Un post cortito. Es más que nada una invitación para que se sumen a http://comunidadlibre-utn.co.cc .

Aplicaciones para sincronizar tu vida digital

No es raro que hoy en día uno utlice más de una computadora y teléfonos móviles, y tenga toda su información repartida en los almacenamientos de los distintos dispositivos. Esto para muchos resulta un problema, pero gracias a algunas aplicaciones gratuitas podemos sincronizar todos los aparatos y tener toda la info disponible desde cualquiera de ellos. Existen varias alternativas para lograr el cometido, pero paso a comentarles sobre dos que particularmente me han dado buenos resultados: Dropbox y Mozilla Sync

Dropbox

DropboxEste servicio nos brinda la posibilidad de tener un directorio compartido entre todas las máquinas, teléfonos móviles u otros dispositivos que utilicemos. Nos brindan 2GB de espacio (en su versión gratuita) para que sincronicemos la información y tengamos un backup en la nube. Cabe destacar que también brindan una interfaz web para poder navegar los archivos si estamos utilizando una computadora pública o algún dispositivo que no permite la instalación de la aplicación.

Además, Dropbox nos permite compartir directorios entre varios usuarios, de forma de que lo que agrega uno puede ser leido por el resto. Una excelente alternativa cuando pensamos en trabajo colaborativo.

Si bien el servicio gratis es de tan solo 2gb podemos estirarlo hasta 8gb. Por cada referido que sumemos nos acreditaran 250mb de espacio adicional a nuestra cuenta.

Para poder realizar la sincronización se necesita instalar en cada dispositivo a utilizar una pequeña aplicación gratuita que se encuentra disponible para Windows, Linux, Mac, IPhone, Ipad, Blackberry y teléfonos que dispongan de una instalación de Android.

Link: Dropbox.com

Mozilla Sync

Esta aplicación es especial para los usuarios de Mozilla Firefox. Mozilla Sync es un complemento que se instala en el navegador permitiendo la sincronización de marcadores, historial de navegación y contraseñas guardadas entre otras cosas. Cuando descargamos el agregado y lo instalamos, debemos crear una nueva cuenta en los servidores de Mozilla para que la sincronización funcione adecuadamente.

El sistema permite mezclar la información de las diferentes máquinas o dejar que una solo reciba información de otra. Esto hace que la sincronización sea lo suficientemente flexible como para adaptarse a las diferentes necesidades.

Link: https://mozillalabs.com/sync/

Comunidad de usuarios de Software Libre en la UTN

Lo que leerán a continuación es un post que hice para el foro de Los Pibes de la UTN:

Hola, que tal:

Escribo aquí porque estoy comenzando una comunidad o grupo de usuarios de software libre dentro de la facultad, para poder compartir conocimientos e información al respecto.

Mi idea es crear un grupo independiente de todos los existentes en la facultad (CETEM, agrupaciones políticas, grupos de investigación, etc) que persiga la idea de compartir el conocimiento e información para enriquecer a todos los participantes. Esto se lograría a través de una plataforma web dedicada a la comunicación, reuniones presenciales en la facultad, etc. También tengo como idea en un futuro brindar charlas, talleres, etc, de forma abierta a quien se interese.

Creo firmemente que el Software Libre y de Código abierto ha tenido una evolución enorme en este último tiempo, facilitandole el uso a nuevos usuarios sin tanta experiencia en el ámbito de la informática. También estoy convencido, como usuario de software libre, que es una opción muy viable como herramienta de aprendizaje, no solo en lo que respecta a la informática, sino también a la vida.

Por otro lado, creo que la UTN FRM tiene un problema serio al no tener un grupo de gente que se dedique de lleno a la promoción de este tipo de tecnologías porque al haber un crecimiento tan grande, la brecha tecnológica que se está produciendo cada vez es mayor. No estoy en contra de las herramientas que se utilizan actualmente, pero me parece que cada vez más rápido aparecen mejores opciones y la universidad va muy lento como para adoptarlas. Nosotros como comunidad debemos ayudar a que este proceso se acelere.

Como último punto, veo que en la facultad hay muchos alumnos que van y cursan y se quedan con lo que les dan en clases. Me parece que eso es impropio de la mentalidad de un ingeniero, porque si bien la UTN tiene por misión crear en nosotros los cimientos para un ingeniero, es nuestra misión lograr que ese ingeniero sea realmente bueno. Si podemos fomentar el espíritu proactivo en los estudiantes creo que estaríamos dando un gran paso. Podemos lograr esto utilizando herramientas libres porque no solo que nos “obligan” a que despertemos ese espíritu proactivo, sino que además nos brindan la posibilidad de CREAR cosas nuevas a partir de ellas.

Bueno, dicho todo esto, les comento que he creado un grupo en google[1] para que puedan registrarse y comencemos un debate entre todos sobre como será este grupo. Este grupo será temporal (o tal vez no) y cuando tengamos una base más sólida podremos armar el resto de la comunidad y hacerla funcionar.

Cuento con ustedes!

[1] http://groups.google.com/group/comunidad-libre-utn-frm