Inserta tus fotos de Instagram en tu web

Estoy en pleno proceso de rediseño de la web, y una de los primeros problemas que me he encontrado es al intentar integrar mis imágenes de instagram en mi web.

Hay varias opciones:

  1. Utilizar uno de los plugins de wordpress que insertar las fotos de Instagram.
  2. Hacer un componente propio que haga exactamente lo que quieras.

En mi caso, opté por la segunda opción. Encontré un código jquery  + php muy sencillo que hace este proceso. El problema ha sido el registrar mi aplicación en Instagram para poder obtener el access token, y sobre todo me ha costado obtener mi numero de usuario. Ya lo sé, es una tontería, pero nunca antes me había tenido que pelear con ello.

Para registrarla he seguido los pasos del articulo de Dan Pavitt:

var access_token = location.hash.split('=')[1];

if (location.hash) {

} else {
    location.href="https://instagram.com/oauth/authorize/?display=touch&client_id=[clientid]&redirect_uri=[callbackuri]/&response_type=token";
}

Es necesario remplazar [clientid] y  [callbackuri] por el Client ID y la Redirect URI que te aparece al dar de alta al cliente.

Este proceso solo debes de ejecutarlo una vez, y solo vale para obtener un token de acceso que te permitirá obtener tus fotos de Instagram.

El último datos que necesitaremos será nuestro identificador de usuario. En un principio yo pensé que será el Client ID que nos devolvió nuestro cliente, pero resulta que no.

Yo he usado esta aplicación de Instagram para obtener mi id de usuariohttp://yvesvanbroekhoven.github.com/get-your-instagram-user-id/ pero entiendo que tiene que haber una forma mas sencilla de hacerlo.

Una vez que tengamos toda esta información ya podremos utilizar el código que nos devolverá nuestras imágenes:

$(function() {

$.ajax({
  type: "GET",
  dataType: "jsonp",
  cache: false,
  url: "https://api.instagram.com/v1/users/[userid]/media/recent/?access_token=[access_token]",
  success: function(data) {
    for (var i = 0; i < 6; i++) {
      if(data.data[i]) { // to prevent a bug with non missing images
         $(".instagram").append("<div class="instagram-placeholder"><a href="' + data.data[i].link + '" target="_blank"><img class="instagram-image" src="' + data.data[i].images.thumbnail.url + '" alt="" /></a></div>");
      }
    }
  }
});
});

Evidentemente tendremos que remplazar [userid] y [access_token] por los datos correctos.

Aquí podéis ver en funcionamiento este ejemplo:

Ahora ya solo me queda el integrar estas imágenes con un slider chulo y listo. Pero eso es otra historia.

Mostrar imágenes por tag

Tal como me ha comentado charlescuellar, tambien podemos obtener las imágenes de instagram por tag, en lugar de por usuario.

Tan solo es necesario remplazar la url de llamada a la API por esta:

</pre>
https://api.instagram.com/v1/tags/[tag]/media/recent/?access_token=[access_token]
<pre>

iosSlider: Responsive and touchable Carousel

Después de llevar todo el día buscando un buen carrusel para usar en mis proyectos he conseguido encontrar lo que buscaba:

  • Un carrusel que se adapte en tamaño, para poder ser usado en los proyectos de responsive design.
  • Válido tanto para ordenadores de escritorio como para terminales táctiles (móviles y tablets)
  • Que las animaciones se hicieran con el acelerador hardware de CSS3 para que funcione de una manera más fluida.
  • Opensource

Finalmente me he decantado por iosSlider . Tiene muy buena pinta, y está muy bien documentado.

Todavía no me he «peleado» con el, pero ya me muero de ganas por meterle mano.

Otra alternativa también muy atractiva era TouchCarousel, pero el hecho de que sea un plugin de pago (aunque tan solo son 10$) me ha hecho decantarme por iosSlider.

jQuery Event Calendar Plugin – english version

I’m trully glad to publish today my first jQuery plugin. It has taken a big amount of hours of hard work, but as long as I see the results, I realize that it has all been worth it.

DEMO Page / jQuery Event Calendar Plugin examples | jQuery Event Calendar Plugin download

Introduction


jQuery Event Calendar Plugin is another plugin to show events in a calendar directly in your web app.

The presentation of the events is made in a really comfortable way, as long as you can see all the following events at eyesight, or just a particular date event (displaying the whole month or just a day).

This widget shows the current day and all the other days that have events scheduled.

So… just another calendar plugin

Well, it is, but it also goes far beyond.

There are several jQuery plugins to visionate and manage calendars and events:

But… even when we had done a great research, none of them adjusted with the needs that we have in our projects, and if they did, they were prepaid plugins that we couldn’t nor wanted to use in our OpenSource projects.

In particular, this plugin has been created for an OpenSource project that we are developing in  Paradigma Tecnológico for agile project management using Scrum, a project I’ll show you in a very short period of time.

Also, it has been develop for responsive design, so you can work fine with it in desktop, tablet and even smartPhones

How does it work?

The first thing we have to know is how the plugin recieves the events. There are some methods to communicate between the plugin and the events, but in all cases the information has to be represented as a json with the following structure:

The plugin is highly customizable, so you are able to modify it through these parameters:

  • Send the json to the plugin in an inline JavaScript function or on an extern file.
  • Cache the received events or make new calls on every date change.
  • Change the calendar size to every width we need (it is 100% responsive, it is 100% fluid)
  • Supports all languages
  • Limit the number of events to show
  • Weeks start on Sundays or Mondays
  • Show the days in a calendar view, by weeks or all the month in a single line
  • Show the event description, or not
  • Open the event links in a new window, or not
  • Change the velocity of the animation when changing dates
  • Show the events inside a panel with scroll to avoid the widget from changing its size

We encourage you to visit the demo page of the plugin to see all its posibilities in action, and the explanation of each parameter that has been used.

And, if you like it, don’t doubt on downloading the plugin

And now, what?

I’m thinking on improving the plugin, so any kind of bugs you find on it will be highly welcomed.

Following tasks:

  • timeago integration
  • Make the plugin 100% responsive: addapt to its content as it already does, but also to the browser size changes. Already done

jQuery Event Calendar Plugin

Hoy tengo el gustazo de hacer publico mi primer plugin jQuery. Han sido unas cuantas horas de trabajo, pero creo que el resultado merece la pena.

Página de DEMO/EJEMPLOS de jQuery Event Calendar Plugin | DESCARGA de jQuery Event Calendar Plugin

Introducción a jQuery Event Calendar Plugin

jQuery Event Calendar Plugin es otro plugin más para visionar eventos en un calendario en tu aplicación web.

La representación de los eventos es realmente cómoda, ya que de un simple vistazo vemos los próximos eventos que tengamos, o los eventos de una fecha en particular (mes completo o día).

El widget nos muestra tanto el día actual, como los días en los que hay eventos.

Pues vaya…. otro plugin más de calendario

Pues si y no. Me explico.

Es cierto que hay montones de plugins jQuery para la gestión y visionado de calendarios y eventos:

Pero lo cierto es que por unos motivos u otros ninguno de ellos se adaptaba a las necesidades que teníamos en nuestros proyectos, y si se adaptaban, eran plugins de pago que no podíamos ni queríamos usar en nuestros proyectos OpenSource.

En particular el desarrollo de este plugin ha sido creado para un proyecto OpenSource que estamos desarrollando en Paradigma Tecnológico para la gestión de proyectos ágiles con Scrum, y del cual pronto os hablaremos.

¿Cómo funciona?

Lo primero que debemos conocer es como recibe el plugin los eventos. Hay varios métodos de comunicación entre el plugin y los eventos, pero en todos los casos la información debe de ser representada en un json con la siguiente estructura:

El plugin es altamente configurable, pudiendo modificarlo a través de parámetros:

  • Enviar al plugin el json a través del propio fichero JS, o tenerlo en un fichero externo
  • Cachear los eventos recibidos, o realizar nuevas llamadas con cada cambio de fecha
  • Representar el calendario al tamaño deseado (todavía no es 100% responsive o fluido, pero estamos trabajando en ello para la próxima versión)
  • Posibilidad de traducirlo al idioma deseado
  • Limitar el número de eventos a mostrar
  • Definir el día de comienzo de la semana
  • Mostrar los días en modo calendario por semanas o todo en una sola linea
  • Mostrar o no la descripción de los eventos
  • Abrir los links de los eventos en nueva ventana o no
  • Cambiar la velocidad de animación en el cambio de fechas
  • Mostrar los eventos en un panel con scroll, y así evitar cambios en el tamaño del widget.

Os recomendamos visitar la página de demo del plugin para ver todas las posibilidades en acción, y la explicación de los parámetros usados.

Si os gusta no dudéis en descarse el plugin

¿Y ahora qué?

Pues por mi parte tengo algunas tareas para mejorar el plugin y la intención de resolver todas las incidencias que surjan.

Próximas tareas:

  • Integración del plugin timeago
  • Realizar cambios necesarios para convertir el plugin en 100% responsive: aparte que se adapte al ancho de su contenedor, que eso ya lo hace ahora, que se adapte a los cambios de tamaño del navegador. Ya hecho

Trucos para mejorar resolución de imágenes en móviles iPhone y Android

No sabíamos muy bien por que las imágenes de nuestras aplicaciones web no se veian 100% nitidas en nuestros terminales móviles, pero gracias al buen artículo publicado en thesedays.com hemos mejorado la resolución de las imágenes en móviles iPhone y Android.

Por defecto, iPhone 4 muestra las imágenes al 200% de su tamaño, ya que su resolución es mucho mayor que la de su hermano pequeño. La solución es duplicar las imágenes de la aplicación al doble de su tamaño y usar una media querie en nuestro CSS que haga referencia a dicha imagen para este tipo de dispositivos.

.myImage {
 height: 40px;
 width: 100px;
 -webkit-background-size: 100px 40px;
 background: url(&quot;images/myImage.jpg&quot;);
}

@media screen and(-webkit-device-pixel-ratio: 2) {
 .myImage {
 background: url(&quot;images/myImage@2x.jpg&quot;);
 }
}

Debemos de tener en cuenta dos lineas de este CSS:

  • -webkit-background-size: fuerza al navegador a mostrar la imagen de fondo al tamaño deseado. Aquí pondremos el tamaño de la copia «pequeña». Así la copia grande de la imagen se repesentará al tamaño de la pequeña
  • @media screen and (-webkit-device-pixel-ratio: 2):  Media querie para iPhone 4. Lo que esté desde de las llaves solo lo ejecutara iPhone 4 (o futuros terminaes que tengan un pixel ratio de 2)

¿Y que pasa con los móviles Android?

Vale, haciendo esto todo nos va a ir mucho mejor en iPhone 4, pero que pasa con los Android. Yo tengo un Samsung Galaxy S II, y tenía el mismo problema. También veía las imágenes poco nítidas.

Mi primera solución, ha sido el remplazar la media query del pixel ratio por otra para todos los navegadores webkit (practicamente todos los que se usan ahora en móviles y tablets):

@media screen and (-webkit-min-device-pixel-ratio:0) {
}

Con esto podremos hacer el «truquito» del redimensionado de imágenes en todos nos navegadores webkit.

El resto de navegadores seguirá viendo la imagen pequeña sin problemas.

Estoy empezando utilizar esta técnica, y puede que surjan muchos bugs. Si conocéis algún sistema mejor para resolver este problema contármelo, y lo publicaremos en la web.

Últimos consejos

Tampoco debemos de olvidarnos de otros trucos para mejorar nuestra maqueta en móviles como:

  • Usar la siguiente meta etiqueta:
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no&quot; /&gt;
  • Forzar al navegador a no redimensionar el texto con la rotación de la pantalla
body {
-webkit-text-size-adjust: none;
}
  • definir un ancho minimo de 320 pixels
min-width: 320px

Media Queries en Internet Explorer 6-8

Surgen muchos problemas a la hora de hacer aplicaciones web fluidas con responsive design. Uno de ellos es que Internet Explorer (hasta su versión 9) no acepta nativamente las css media-queries (mostrar estilos diferentes según el tamaño del navegador).

Hay unos cuantos plugins javascript que solucionan este problema:

  • respond.js: quizás el más popular, pero yo no lo he usado por que la necesidad de tener que incluir varias llamadas a diferentes ficheros. El motivo de tener que hacer esto es que el plugin hace una petición por ajax de los CSS con cada redimensión.
  • css3-mediaqueries-js: Mi elegido por la simpleza, y por que simplemente funciona. Su alcance es más limitado, pero es mas que suficiente para el uso que yo hago de

Y vosotros, ¿Cual habéis usado?

Zepto.js, buena alternativa incluso para Internet Explorer

Como los que me sufrís todos los días ya sabéis, últimamente me esta dando muy fuerte por el desarrollo de aplicaciones web adaptadas tanto para PC como para móviles [Responsive design] y por los templates de Javascript.

En realidad no creo que haya alternativa a «pringarse» con estos dos temas, ya que el futuro (bueno, en realidad el presente) del desarrollo de front pasa por su dominio. Y si, ya que que mi propia web necesita un rediseño para adaptarse a los móviles, pero tranquilidad, todo llegará.

Hoy quiero hablar de Zepto.js, un viejo conocido que ya he use hace tiempo en algún proyecto móvil, y que ahora he querido recuperar para un nuevo proyecto que estamos desarrollando en Paradigma Tecnológico para una importante cadena hotelera.

Aunque es una aplicación pensada principalmente para dispositivos móviles, debe de ser también usable desde navegadores de escritorio (Chrome, Firefox, Explorer,…).

Este asunto del soporte para navegadores me ha echado atrás en alguna ocasión para optar por Zepto,js como framework Javascript, pero resulta, que las cosas han cambiado, y ahora Zepto.js no solo da soporte a navegadores webkit, si no que también soporta Firefox, Opera, Blackberry,…

Esto solo nos deja a nuestro «querido» Explorer como navegador no soportado. Es cierto que esto es un problema, pero como todo problema tiene una solución.

Ante este problema hay varias alternativas:

  • Descartar Zepto.js y optar por jQuery Mobile: El soporte de Navegadores y entornos que tiene jQuery Mobile es muy amplio, pero para mi es una mala alternativa, ya que el peso de jQuery + jQuery Mobile me parece un gran impedimento para el desarrollo de aplicaciones móviles que carguen rapido en los dispostivos con las velocidades de conexion que disfrutamos hoy en día.
  • Aprovecharse de que Zepto.js y jQuery usan la misma sintaxis para usar un «plan B» en el caso de navegadores no soportados por Zepto.js: Esta ha sido mi elegida. Es muy sencillo el cargar jQuery solo en los casos en los que zepto.js no sea soportado. De este modo solo el usuario que use un navegador no estándar deberá «sufrir» los tiempos de carga de la librería jQuery.

El código para cargar jQuery (o hacer lo que se quiera) en caso de no soportar Zepto.js es:

if ('__proto__' in {}) {
// IS NOT IE
} else {
// IS IE
}

Y vosotros ¿Qué tal vuestra experiencia con Zepto.js? ¿ Preferís algún otro framework Javascript para móviles?

 

Mi resumen de UXSpain 2012

Este pasado fin de semana tuve la suerte de ser invitado junto a otros compañeros de Paradigma al evento de UXSpain en el que se trataron las bienaventuranzas de la experiencia de usuario.

Lo primero que quiero hacer es felicitar a la organización, ya que fue casi perfecta. El lugar, la Universidad de Salamanca, fue inmejorable. Un lugar bien comunicado, y muy interesante turísticamente para el visitante. El catering, puntualidad, audio, auditorio, etc… muy bueno.

La única crítica que puedo hacer es respecto al nivel de algunas charlas. Creo que la temática era demasiado ecléctica,  y en muchas charlas se echaron en falta casos prácticos.

Yo destaco sobre el resto:

Desde Paradigma quisimos aportar nuestro granito de arena al evento con la interesante charla de Nacho Herranz y con el desarrollo de una aplicación web para realizar el seguimiento del hashtag #uxsp en twitter.

uxspain hashtag traking app

Aunque en líneas generales me llevo mucho positivo este fin de semana, lo mejor sin duda a sido el tener la oportunidad de conocer y compartir buenos momentos con @kremaster

Nos vemos el próximo año!

Convierte tu WP e-commerce Plugin en multi imagen

Estoy empezando a trastear con el Plugin de WordPress WP e-commerce y de momento me parece muy completo y sencillo.

En la tienda que estoy haciendo necesito que los productos que quiero vender tengan varias imagenes asociadas, y con la versión gratuita de este plugin esta opción esta capada. Podría comprar su version de pago, Gold Cart, que tiene dicha función y solo cuesta 40$, pero he preferido buscarme las castañas por mi cuenta, y tras pelearme un poco con el codigo lo he conseguido.

Tras investigar unas cuantas páginas para ver como podía convertir mi WP e-commerce plugin en multi imagen y ver que ninguna me funcionaba decidi crear una nueva función que me hiciera este trabajo.

Encontré una buena aproximación, pero la estructura de la base de datos ya no era la misma, así que hice unos cambios:

Añadir este codigo en el fichero functions.php

// function to receive all the images related to one product
function get_all_images($product) {
	global $wpdb;
	return $wpdb->get_results( "SELECT guid, menu_order FROM wp_posts WHERE post_type='attachment' AND post_parent=$product ORDER BY menu_order ASC" );
}

Y en la pagina donde se presenta el detalle de mi producto, wpsc-single-product.php añado esto donde se mostraba la imagen individual:

// multimage product hack for e-commerce
if ( function_exists( 'get_all_images' ) ) { // check if function exists
	foreach ( get_all_images(wpsc_the_product_id()) as $product_image )
		{
		echo "<img src='".$product_image->guid."' alt='".wpsc_the_product_title()."' />";
		}
} else {
  // simple image
}

Con estos dos sencillos pasos ya puedes mostrar tantas imagenes como quieras a tus productos en el WP e-commerce Plugin.

Ahora solo queda presentarlo de una manera mas bonito.

¿ Conocéis algún sistema mejor?

Efecto rebote con slideDown() de jQuery

Cada cierto tiempo me encuentro con un problema al mostrar cierto tipo de paneles con el método .slideDown() de jQuery.

Lo que me pasaba es que al irse desplegando el panel tomaba una altura superior a la de su contenido, para luego volver a su tamaño real cuando terminaba la animación.

Siempre pensé que era un problema relacionado con los margins y los paddings del elemento a mostrar, pero por fin he encontrado la solución a este problema, y parece que es de lo mas sencilla.

Al parecer jquery tiene problemas para detectar el tamaño real del texto que contiene el panel, y la solución es tan sencilla como definirle la anchura. Por ejemplo:

.element-to-slide { width:100%; }