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 prefijo _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 []

Lovely Charts

Lovely Charts es una herramienta para dibujar diagramas de flujo, sitemaps, diagramas organizacionales, wireframes y más. Lo que me gustas es que me puedo enfocar en pensar en lo que quiero hacer y no en dibujar cuadritos y lineas.

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?

Que es un contrato para un freelancer?

Cualquier cosa que pueda ir mal … irá mal. (Ley de Murphy)

Hay tanto de verdad en esas palabras, aunque parezcan una broma, reflejan una verdad que no puedo tratar de ocultar tras la inseguridad de decirle a un potencial cliente que tiene que firmarme un contrato donde se especifique lo que voy a hacer y como me vá a pagar. Hacer que un cliente me firme un contrato no lo va a hacer sentir mal, mucho menos se va a ofender, muy por el contrario, un contrato le da la seguridad de que estoy dispuesto a cumplir con mi parte. Al mismo tiempo que me asegura a mi que el vá a cumplir la suya.

untitled-1

Aunque un contrato es un documento legal, no tiene que ser escrito con la tonalidad monótona que tienen este tipo de documentos. Un documento puede ser escrito en un tono jovial, pero debe mantener la claridad correcta de lo que ambas partes esperan y estan dispuestas a cumplir.

Pero, tu eres un buen tipo, tu trabajas para clientes perfectos … nada malo te va a pasar.

Piensalo bien, pues aunque tu seas una publicitaria de una sola persona, o trabajes para una agencia, a veces la cosa se pone dura y la gente se pone necia. En ese momento un contrato asesino te puede devolver esa sonrisa y salvarte de una situación muy desagradable.

 Un contrato es importante en el proceso de mantener las amistades y las sonrisas por que define, entre otras cosas:

  • Las metas del proyecto
  • Lo que tu vas a hacer
  • Lo que te tienen que entregar
  • En que tiempo se va a realizar
  • Cuanto te van a pagar
  • Como te van a pagar
  • Quienes estan involucrados

Existen contratos que no estan diseñados para ser entendidos en una primera lectura (ni en una segunda), o sin ayuda de un abogado. Muchas veces yo he firmado contratos que realmente no he entendido completamente, sin saber realmente en que me estoy metiendo, eso me convierte en un loco. Pero comenzar un proyecto sin firmar un contrato me convierte en un maldito estupido.

OJO

Hay que poner especial atención en lo que se firma en un contrato, porque así como un contrato nos puede librar de un momento difícil, un contrato firmado a la ligera y sin entender todos los puntos especificados puede causarnos un muy mal momento, o peor aún, mas de un momento.

20 scripts de greasemonkey para mejorar la experiencia en Twitter

Buscando un buen cliente para Twitter en Ubuntu me encontré con este enlace con 20 scripts que resuelven varias de los exigencias en un buen cliente y mejoran considerablemente la experiencia de Twitter.

Miniposts en WordPress

Los minipost son entradas cortas, generalmente con enlaces interesantes que uno suele ver intercalado entre los posts regulares en algunos blogs.

Algunos ejemplos de blogs que utilizan miniposts incluyen blogpocket, Duarte 101 y ALT1040

En resumen hay que realizar 3 pasos:

  • Crear una categoría para los miniposts (miniposts)
  • Modificar el index.php del template
  • Publicar los miniposts como un posts cualquiera, solo hay que asignarle la categoría (miniposts)

Haciendolo

Primero hay que crear una categoría para guardar los miniposts, yo uso miniposts, pero se puede elegir cualquier nombre, lo importante es anotar el numero de id de la categoría (ID).

Ahora hay que modificar la plantilla para que cuando WP vaya a mostrar un post que pertenezca a la categoría “miniposts” lo muestre de forma diferente a como mostraría cualquier post de otra categoría.

Hay que encontrar la linea que dice:
<?php if (have_posts()) :  while (have_posts()) : the_post(); ?>

Justo debajo de esta linea introducir el siguiente codigo:

<?php if (in_category(35) && !is_single()): ?>
<ul class="miniposts">
  <li id="p<?php the_ID(); ?>">
    <?php echo wptexturize($post->post_content); ?>
    <!--
    <?php trackback_rdf(); ?>
    -->
  </li>
</ul>
<?php else: ?>

Y debajo continuamos el Loop con los elementos que no pertenecen a nuestra categoría de miniposts.

Optimizando

Según el método que llevamos, si publicamos dos miniposts seguidos se van a crear dos listas. así que para perfeccionar eso vamos a introducir el código de una función llamada stupid_hack que busca mediante una expresión regular  que busca los </ul> que estén seguidos de un <ul class=”miniposts”> para así unir todas las listas continuas de miniposts en una sola que contenga tantos miniposts seguidos como los hayan

function stupid_hack($str) {
  return preg_replace(’|</ul>\s*</ul class=”linklog”>|’, ”, $str);
}
ob_start(’stupid_hack’);

Este codigo puede ser llamado desde cualquier lugar del documento.

Dandole estilo

Se pueden personalizar los miniposts aplicandoles a las listas una clase como .miniposts y cambiar el tamaño, el color o la tipografia.

Mario Kart en la vida real

Este video es de un tipo vestido de Mario, manejando un carrito en una ciudad de verdad, tirandole cascaras de guineos a los otros carros. simplemente demente!

HTML-Ipsum

Siempre he tenido a Lipsum en mis favoritos,  navegando encontré uno un poco mas util: HTML-Ipsum

Via: For a Beautiful Web

Una red social en cada website

Fijándome en las iniciativas de Google y su acercamiento a la web social, hay dos proyectos que mencionar. El primero es Google Profiles. Un profile es basicamente como aparece nuestra información en todos los servicios de Google donde podemos generar contenido. Puedes editar tu perfil aquí.

Otra iniciativa importante y que fue lnzada al publico hace unos dias es Google Friend Connect, que permite a los responsables de los websites incluirles características sociales. Con Google Friend Connect cualquier dueño de un website puede copiar y pegar algunas lineas de código y tener características sociales en su sitio sin necesariamente saber programar, solo escogiendo funcionalidades lista para usar como Registro de usuarios, mensajes, reviews, invitaciones, galerías de usuarios y aplicaciones desarrolladas con Open Social.

Las ventajas directas de este tipo de estructura son la facilidad de implementación y la cantidad de personas que pueden ser parte de nuestra red social solo con su cuenta de Google o con su openID, sin necesidad de programar un sistema de usuarios.

Tienes un website al que le incluirias estas caracteristicas? Que tanta cantidad de websites necesitan estas caracteristicas?