Como usar tu propia URL como tu OpenID

Una de las ventajas de OpenID es la delegación. Esto significa que en vez de tener tu dirección de OpenID como:

tunombre.myopenid.com

puede ser:

tudominio.com

Un OpenId es simplemente una dirección. Mi OpenID es retrorock.info la dirección de este blog. Puedo usarlo para loguearme en cualquier sitio que soporte OpenID y como soy el único que tiene control sobre el homepage de mi blog, soy la única persona que puede usar esta identidad.

Lo primero es crear una cuenta OpenID, lo mas probable ya tengas una. (más…)

Moviendo la lógica de presentación de los views en CodeIgniter

Trabajando en proyectos cada vez más grandes, como programadores nos vemos obligados a aprender nuevas técnicas para acelerar el proceso de producción de código. Cuando repetimos fragmentos de nuestra aplicación en distintos archivos estamos ampliando las probabilidades de error, a parte de que tendremos que reparar el error en cada uno de los archivos.

Anteriormente hablaba de como usar helpers para no repetir código un mismo fragmento de código una y otra vez.

El tema le toca ahora a los views, que por costumbre acumulan una gran cantidad de código repetido. (más…)

Sirviendo los archivos estáticos del admin de Django en Webfaction

Esta es una guía corta sobre como servir los archivos media (CSS, JS) del panel de administración de Django desde la misma máquina y desde el mismo servidor Apache. Esta es una buena idea porque es más rápido y como debemos economizar los procesos de Apache2/mod_python no usaremos ninguno de esos procesos para servir contenido estático.

- Crea una aplicación nueva en el control panel. Llámala admin_media. En App Type selecciona symbolic link to static-only app. En Extra info escribe la dirección donde se encuentran los archivos de media del panel de control (<direccion home>/lib/python2.5/django/contrib/admin/media) Esto va a crear un archivo $HOME/webapps/admin_media que es un link a <direccion home>/lib/python2.5/django/contrib/admin/media

- Edita el record de tu website, monta admin_media en /media y reinicia el Apache.

Marcando links externos con CSS

En el post anterior hablaba sobre las caracteristicas de un buen link, siguiendo el tema, creció la necesidad de hablar sobre los diferentes tipos de links.

Un detalle muy importante cuando diseñamos interfaces es que cada elemento debe identificar su función a primera vista. Si todos los elementos de nuestros websites son iguales, como sabremos a que darle click para ir a otra página?

Tratando de lograr que el visitante no se confunda buscando los links, surge una nueva característica de un buen link: El link especifica claramente al usuario que va a abandonar el website.

Para lograr esto necesitamos dos cosas; buscar un ícono que identifique a la mayor cantidad de visitantes que el link al clickearlo va a otra página y como adjuntarlo a cada uno de los links externos con CSS.

No hay una convención clara sobre que ícono utilizar, aunque la mayoría usa el de Wikipedia external otros usan un ícono parecido (pero en vez de un cajita, con una página). Lo más probable es que se cree una convención cuando esta técnica adquiera más popularidad.

Para aplicarle el estilo usamos

 a[href^="http:"] {
        background: url(/images/external.png) right center no-repeat;
        padding-right: 12px;
}

Usando selectores de CSS3 no tenemos que asignar una clase a los links o ejecutar ningún código en el servidor para seleccionar los links externos.

Esta regla de CSS nos dá algunas pistas sobre como marcar otros tipos de links como los mailto:

5 tips para diseñar tus links

Los links son la base del proceso de navegación en internet. Dependiendo de los links y el contenido del sitio a donde llevan, el visitante decidirá si quiere regresar o no.

Las últimas tendencias han desarrollado la busqueda de un estilo de escritura para satisfacer las necesidades y los gustos de los diferentes usuarios y los constantes cambios de los motores de búsqueda (Search Engines)

Usualmente los autores usan los links para reforzar un concepto, un grupo de links puede servir como el enfoque de un website. Pero, un grupo de links no tiene el mismo efecto sobre el lector, y no es tan legible como el texto linear.

Teniendo en cuenta el problema de los links, debemos usar texto relevante en nuestros links (anchor text), mantener una consistencia visual que identifique a los links entre el texto y diferenciar los links que han sido visitados y los que no.

Los links deben ser usados como refuerzo del contenido, no como su sustituto.

  1. Colores diferentes para links visitados y no visitados
    Los Links que fueron clickeados deben diferenciarse de una manera u otra de los que no; La mejor manera de hacerlo es utilizando alto contraste de color. Los links deben resaltarse lo mas posible en el texto del website en cualquier caso, los colores brillantes son preferibles.Por otra parte los links que ya fueron visitados deben tener un color un poco mas pálido o gastado, aunque no usando la misma escala cromática que los links no vistados, porque esto podría confundir a los visitantes.
  2. El texto es lo suficientemente grande y los links no están muy cerca unos de otros
    Los usuarios deben llegar a su destino voluntariamente, no porque hayan hecho click a link por error.
  3. El contenido importante es accesible desde más de un link
    Si el contenido es accesible desde diferentes sitios en el website, es mucho más probable que los visitantes encuentren lo que andan buscando. Cada usuario busca información de formas distintas, dependiendo de su interpretación de un problema y del layout del website. Algunos encuentran los links importantes facilmente cuando tienen un texto especifico, otros lo encuentran mas facilmente cuando tienen un texto alternativo.
  4. El texto de los links tiene una buena cantidad de palabras
    El texto de los links deben ser lo suficientemente largo para que el usuario entienda de que se trata y lo suficientemente corto como para que no llene una línea completa. Algunos estudios han demostrado que los usuario entienden mejor la prosa y que los links con 8 a 9 palabras tienen mejores resultados. Una buena explicación de Long Tails.
  5. El texto del link es descriptivo
    La confusión en los usuarios debe ser combatida a toda costa. En cuanto a esto, debemos poder mirar todos los links en nuestro website y poder sacar una conclusión contundente de qué vamos a encontrar si los seguimos. Un ejemplo contraproducente de esto son los links que dicen “click aquí” por que no ofrecen una pista sobre lo que uno va a encontrar del otro lado.

Como comparto desde Twitter con mis amigos de Facebook

Muchos de mis amigos en Facebook que no tienen  cuenta de Twitter seguro piensan que me estoy volviendo loco.

Aunque considero que con el tiempo Facebook y Twitter serán menos comparables, por ahora, para mi, son complementarios.

A partir de que sincronicé Twitter con Facebook estoy recibiendo mas conversación con mis amigos de Facebook, aunque al principio muchos no entendían y algunos siguen sin entender, encuentran ocasión para comentar en mis status y generamos conversaciones a partir de mis updates de Twitter.

A proposito soy @himself en Twitter.

Python 2.6 & Mysql

Cualquiera que esté programando en Python y use Mysql ya debe haberse encontrado con MysqlDB. También debe haberse dado cuenta que no hay una versión para Python 2.6 en la página de descarga. Esto es bastante desconcertante porque Python se movio a la version 2.6 dias antes de finalizar el 2008 y solo despues anunciaron Python 3.0. Porque MysqlDB no está al día?

Así que estoy estancado con Python 2.5? No necesariamente – Si usas Linux, puedes compilar la fuente de MysqlDB en tu instalacion de Python, o si estas en Windows puedes simplemente descargar este obscuro release de MysqlDB

Artículo original en inglés

CodeIgniter, Google Analytics y código reusable

Gran parte de la versatilidad de un buen framework radica en la capacidad de permitirnos reusar código, así vamos creando nuestro propio framework con una biblioteca de funciones y clases que podemos volver a usar y volver a usar y volver a usar …

Para poder escribir código reusable, debemos abstraer los procesos lo más posible, de modo que no tengamos que cambiar los archivos originales para encontrar la solución a nuevos problemas.

Para explicar mejor este concepto, un buen ejemplo sería crear un Helper para añadir el tracking code de Google Analytics.

El problema con Google Analytics es que el te da un código que ponemos antes de </body> en cada una de las paginas de nuestro website. así que sería una buena idea tener una función que nos permita escribir google_analytics(). Esto ayudaría a la portabilidad. Si el código de analytics cambia, solo tendríamos que cambiar el archivo de configuración o el Helper en vez de cambiar manualmente todos los templates.

El primer paso es definir lo que queremos:

  • Un Helper que  nos permita llamarlo para que nos imprima el código de Google Analytics con su tracking code.
  • Que verifique en un archivo de configuración, si queremos que se imprima el código y el tracking code.
  • Que opcionalmente se le pueda pasar el tracking code a la función y tome el tracking code de este argumento y no del archivo de configuración.

Comenzamos por crear un archivo de configuracion y añadir los items ( como explica la guía de codeigniter1 ) que vamos a usar en la funcion de Google Analytics

Para crear el Helper hay que tener en cuenta dos reglas:

  1. Los nombres de los archivos de helpers deben tener el sufijo _helper para ser correctamente cargados.
  2. Para utilizar el superobjecto de CodeIgniter ($this) debemos asignarlo a una variable con la función get_instance()

En el archivo analytics_helper.php

El resto es simplemente verificar si hay un tracking code como argumento, sino existe se busca el tracking code del archivo de configuración y se imprime el código de Analytics interpolando el valor del tracking code.

Pueden descargar una copia de los archivos utilizados en este ejemplo aquí. Para aprender o para usarlo en sus proximos proyectos con CodeIgniter.


Modo de uso

Copie analytics.php a la carpeta application/config y sustitúya $config['tracking_code'] por el tracking code correcto.
Copie analytics_helper.php a la carpeta application/helpers
Despues de haber llamado cada uno de estos archivos en config/autoload.php puede llamar la funcion google_analytics(); en el template y el se encarga del resto.

  1. http://codeigniter.com/user_guide/libraries/config.html []

Primeros pasos en pair programming

Desde hace tiempo vengo oyendo hablar sobre el pair programming, sus ventajas y sus implicaciones, pero simplemente no me parecía que esto fuera muy productivo ni que fuera a ayudar tanto de todos modos. A simple vista pair programming se trata de que dos programadores se sienten frente a un monitor continuamente colaborando con un diseño, un algoritmo o cualquier código o prueba.

Cual es el punto? yo he hecho eso muchas veces…

Yo nunca había hecho pair programming teniendo en cuenta que pair programming es un estilo y que es una metodología, y que sobre todo teniendo en cuenta que dos programadores al mismo tiempo no es una redundancia, sino una ruta directa a mayor eficiencia y mejor calidad.

Algunas partes de la metodología

  1. Comiencen con una tarea bien definida. Cuando los dos se sienten deben tener una tarea correctamente detallada y deben tener la seguridad de que van a poder terminarla en una hora o dos
  2. Compartan todo. Todo se trata de que los dos programadores funcionen como una sola mente, mientras uno está en el teclado, el otro está revisando todo y dando retroalimentación. Es importante que se intercambien el turno de escribir y revisar para que uno de los dos no se sienta poco importante o fuera del juego.
  3. Hablen todo lo que sea necesario.  Una buena señal es que los dos implicados esten hablando todo el tiempo. Diciendo lo que van a hacer, pidiendo una idea de una inplementación, preguntando la mejor manera de hacer algo, dando soluciones alternativas, etc. 
    Algunas de las cosas mas comunes que se dicen cuando se esta haciendo pair programming son: Que tu crees de esto? que sigue? confía en mi (cuando una linea de código habla mas que 100 palabras)
  4.  No se cojan las cosas muy a pecho. Cuando una persona tiene el ego muy alto tiende a no aceptar criticas de los demas. También el ego excesivo puede atribuirle una actitud defensiva ante las criticas al programador, o puede pensar que los que se le dice es personal y en su contra.
  5. Suelten el escepticismo. Desarrollen una expectativa de exito. Si uno no espera beneficiarse o disfrutar el proceso es muy difícil que las cosas funcionen correctamente.
  6. Tomense un momento para celebrar. A medida que se vayan completando las tareas hay que felicitarse, por ejemplo, se resolvio ese problema con la base de datos, chocala!

Conoces algunas otras sugerencias para ayudarnos a hacer mejor pair programming?