El miedo hiere más que las espadas

Como muchos programadores, soy un perfeccionista, y muuuuuchas veces, mientras estoy programando una nueva vista o cualquier tontería, me encuentro que estoy divagando con otras posibles soluciones, o revisando la arquitectura de la aplicación completa, o navegando en la wikipedia sobre esa nueva tecnología que tal vez podría ayudar en este o futuros proyectos, en lugar de estar programando la cosa que tengo que programar.

El miedo hiere más que las espadas. Es una frase de "Game of Thrones" que Syrio Forel, dancarín del agua, le enseña a Arya Stark. Muchas veces nos paralizamos en hacer lo que tenemos que hacer, pensando que lo podríamos hacer mejor si tan sólo lo hicieramos con tal nueva tecnología, si tan sólo la arquitectura de la aplicación considerara tal o cuál cosa, si tan sólo no estuviera lloviendo afuera, si tan sólo.

Hay veces que tenemos que recordarnos que el miedo hiere más que las espadas y más nos vale mejor ponernos a escupir código.

El miedo hiere más que las arquitecturas endebles.
El miedo hiere más que los correos con explicaciones cortas.
El miedo hiere más que las tecnologías obsoletas.

Usando views handlers para mostrar el total de una vista de inventario

Hay veces que quieres desplegar información específica en una vista además de los datos que traes de tus nodos. Bien puede ser para desplegar simplemente una descripción de tu vista, o tal vez un subtítulo con datos de tu argumento, o incluso un subtotal si estás mostrando datos de productos o algo así.

Este tipo de cosas las puedes insertar en el header y footer de tu view. Y en los casos más sencillos puedes simplemente insertar un "text area" donde pongas el texto estático. Pero hay veces que quieres más ;-).

Pudiera ser tentador habilitar el módulo "PHP Filter" y poner código de PHP ahí mismo en tu vista. Para algo sencillo puede ser suficiente, pero si tu código van a ser más de 3 líneas te recomiendo usar un views_handler que sirve precisamente para eso y así podrás meter tu código en un control de versiones y editarlo con vi o emacs.

Manos a la obra, vamos a implementar un modulo views_total para desplegar el total de un inventario. El views_total.info está fácil:

name = Views Total
description = Implements an area handler to display the inventory summary
package = Other
core = 7.x

files[] = views_total.module
dependencies[] = "views"

; Views handlers
files[] = views_total_handler_area_summary.inc

El views_total.module simplemente implemente el hook_views_api para indicarle a views que existimos:

<?php

/**
 * Implements hook_views_api().
 */
function views_total_views_api() {
  return array(
    'api' => 3,
  );
}

En el views_total.views.inc finalmente declaramos nuestro handler que va a estar en la "tabla global" porque no estámos adjuntándonos a ninguna tabla de nuestra BD.

<?php

/**
 * Implements hook_views_data.
 */
function views_total_views_data()
{
  $data = array();

  $data['views_total']['table']['group'] = t('Global');
  $data['views_total']['table']['join'] = array(
    '#global' => array(),
  );

  $data['views_total']['summary'] = array(
    'title' => t('Inventory summary'),
    'help' => t('Display the total of items in the inventory'),
    'area' => array(
      'handler' => 'views_total_handler_area_summary',
    ),
  );

  return $data;
}

Y finalmente, viene el bueno, nuestro handler:

<?php

/**
 * Definir un area handler para que el total del inventario se pueda agregar a la vista
 */
class views_total_handler_area_summary extends views_handler_area {

  function option_definition() {
    $options = parent::option_definition();

    // Quitamos opciones del formulario de edición del handler que no queramos.
    // las opciones vienen heredadas del views_handler_area
    unset($options['empty']);

    return $options;
  }

  function options_form(&$form, &$form_state) {
    parent::options_form($form, $form_state);

    // Quitamos el empty también del display
    unset($form['empty']);
  }

  // Esto es lo que se va a desplegar en la vista
  function render($empty = FALSE) {
    if (!$empty) {
      $total = 0;
      foreach ($this->view->result as $result) {
        $total += $result->node_taxonomy_index_nid;
      }
      return "<table class="views-table"><tr><th>Total de equipos</th><th class="views-field-nid">$total</th></tr></table>";
    }

    return '';
  }
}

Puedes inspeccionar el $this->view->result con un print_r o un krumo (si tienes devel instalado) para ver qué variables te pueden servir.

Para hacer este modulito me basé mucho en el código del submodulo line_item del módulo commerce para Drupal 7.

El Risk y la mala suerte

Tags: 

Vengo de la peor partida de Risk que he jugado en la vida. Con decir que en mi último intento de ataque perdí más de 15 tropas mientras a mi rival le quité sólamente 6. Fuí el primero en salir y aunque al final al menos me divertí mientras todos gritaban en mi última batalla, la verdad uno no puede quedar satisfecho después de semejante paliza.

Que bonito es el Risk

Quiero por lo menos encontrar y sacar alguna enseñanza que venga de esa masacre. Supongo que en el risk, como en la vida, tienes días de buena suerte y mala suerte. Todos sabemos que la suerte puede cambiar en cualquier momento, pero si estás en un momento débil, y te encuentras con que la suerte no está de tu lado, hay que recordar que si quieres seguir en el juego tienes que ser muy disciplinado, escoger cuidadosamente cada batalla, e incluso a veces pasar algunos turnos esperando tiempos mejores. Ya que es en esos momentos cuando es más fácil que en unos cuantos tiros del dado quedes completamente aniquilado.

El niño robot

Tags: 

Cuando era pequeño recuerdo que yo era un robot. No como quien jugando se imagina que es un robot del futuro o algo así. No, yo realmente era un robot.

No recuerdo muy bien cómo me di cuenta. Creo que empezó como un presentimiento pero que poco a poco se convirtió en certeza.

Mi papá me contó de la vez que de chiquito me llevó al tío vivo. Mi papá gritaba "Hey Joaquín!!!" y me hacía gestos para que me riera mientras el carrucel daba vueltas, pero yo no dejaba de analizar la maquinaria que hacía que aquella cosa girara, mientras los otros niños no paraban de reír y jugar en su caballito.

Mi hermano también sabía que yo era un robot. Jugábamos luchitas, y cuando me cansaba de fingir que no podía con él, utilizaba mi fuerza robótica para lanzarlo muy lejos. Él se quedaba asombrado.

Me gustaba jugar futbol, porque ahí mi determinación robótica encontraba algo en que concentrar todo su esfuerzo. Objetivo: ningún delantero debe meter gol. Y me desconcertaba un poco cuando algún amigo se enojaba, porque yo, siendo robot, no entendía del todo las emociones humanas.

No crean que no tenía sentimientos. Como dije, disfrutaba el futbol, había una niña que me encantaba aunque nunca se lo dije y lloré cuando al entrar a segundo año de primaria descubrí que mi mejor amigo se había cambiado de escuela. Pero cada sentimiento que me llegaba era como un nuevo programa que yo tenía que analizar lentamente antes de que finalmente quedara instalado en mi sistema.

Con todo terminé adaptándome a la vida como humano a tal punto que ahora por fin puedo decir, soy un niño de verdad.

O no?

¿Cómo escribir un artículo / blog / ensayo?

Tomé un curso del open university, a través del iTunes sobre cómo escribir un ensayo. El título del curso es "Start Writing Essays". Estas son mis notas. Pero si tienes 20 minutos (eso toma el curso), te recomiendo escucharlo. Lo puedes escuchar por internet o bajar a tu iTunes.

Lo primero es hacer la investigación sobre tu tema. El chiste es que tengas confianza sobre tu conocimiento sobre el tema a tratar y durante el proceso puedes ir tomando notas e identificando ideas que quieres que formen parte de tu ensayo. Apunta citas de libros, personajes o autores que encuentres. Es una buena idea asignar un periodo de tiempo definido para la investigación para evitar seguir en esto indefinidamente.

Una vez tengas algo masticado el tema lo primero que viene a la mente es darle un título a tu ensayo. Éste le da identidad a tu escrito y una intención. Puede que cambie mientras escribas el ensayo, pero es una buena manera de empezar y te da un buen punto de comparación para que una vez que termines veas si realmente cumpliste con la intención que te habías propuesto con el título.

Opinión. Si tienes una opinón respecto al tema, muestrala. Si estas escribiendo un cuento, o un texto informativo, o simplemente explicando algo, es posible que no exista una opinón. Pero al menos detente a pensar un momento en si tu texto está comunicando efectivamente tu opinión sobre el tema. Y casi se me olvida, pero que nunca te pase a tí, pon tu opinión a prueba y en tu investigación busca opiniones contrarias.

Estilo. Algo debe de ser dicho sobre el estilo. Pero no demasiado, cada quien tiene el suyo. Simplemente escúchate hablar, y quizás en el proceso de escribir termines cambiando tu estilo de hablar porque descubres que eres muy grosero (ups! me proyecté). Cómo es tu vocabulario? Académico? Callejero? Jovial? (jojo). Al final depende de tí y del público al que estás escribiendo. Simplemente diría que no hay que forzarlo o exagerarlo. Lo importante es comunicar una idea. Un buen consejo de Helena Kennedy que escuché en el curso es que al escribir imagines que estás hablando con alguien. Ella al escribir para una revista se imagina hablando con sus hermanas, cuando escribe para una columna en el periódico está platicando con su mamá y cuando es para un texto especializado se ve en una converzación con sus colegas.

Si sigues estos consejos creo que muy difícilmente te vas a bloquear, porque investigando tienes la mayoría del material listo y simplemente tienes que ir rellenando. No tienes que empezar desde el principio. Revisa tus notas, escribe las ideas principales, las conclusiones y la mejor manera de empezar llegaran sólas con el tiempo. Si sí te llegas a bloquear el consenso general es que lo mejor es distraerte. Tómate una cerveza, lava los platos, salte a correr, platica con alguien, lee algo, ¡salte del tema! Y regresa después =).

Que buenos eran los Muppets!

Y para muestra basta un botón, pero pondré dos jeje:

Capitalizar la primer letra de una columna en MySQL

Mi compañero Elías está metiendo datos de un catálogo de un cliente a su página web que le estamos haciendo. El nombre de todos los productos vienen en mayúsculas, pero por el diseño de la página web no queremos que se vea así, sino que solamente la primer letra esté capitalizada. Para facilitar la entrada de datos lo que hacemos es meter todos los datos como vienen y después usar SQL para cambiar la columna.

La sentencia que utilizamos al final es:

update node set title = CONCAT(UPPER(LEFT(title, 1)), LOWER(MID(title,2)));

Mis propósitos para el 2011

Personales

  • Decir las cosas a tiempo. Ejemplo: contestar los correos en cuanto llegan.
  • Usar más vocabulario y frases típicas, decir menos groserías
  • Escribir o dibujar 1 ves al mes
  • Guitarra: Sacar 5 canciones nuevas este año
  • Hacer ejercicio o estiramientos por la mañana 3 veces por semana
  • Agua fría al bañarme 3 veces por semana

Familiares

  • Salir de viaje en pareja 2 veces en el año
  • Salir de viaje familiar 2 veces en el año
  • Abonar 30,000 pesos a la cuenta del infonavit (aparte del pago normal)
  • Casa: tener librero, biombo, mueble de cocina, mueble de tv, pasto y más flores para fin de año
  • Orar 1 v al día en pareja

Comunidad

  • Ayudar a preparar un retiro/campamento

Profesional

  • Sacar un producto (SaaS)
  • Salir a las 7pm de trabajar
  • Tener 1 meetup bimestral

redirigir los dominios www usando aegir y nginx

Desde hace algunos meses que usamos aegir para manejar todos los sitios de drupal de clientes que hosteamos en nuestro servidor. Es una bendición del cielo =). Pero por ahí acabamos de hacer una pequeña modificación. Usualmente, todos los dominios que manejamos tienen su version con www y sin www. Como www.elevare.org y elevare.org. Ambos queremos que funcionen. Con aegir tu puedes crear alias para tus sitios, pero como esto es una regla general, pues hicimos una modificación a la regla de nginx para que jale en TODOS los sitios www:

## www. redirect
if ($host ~* ^(www\.)(.+)) {
  set $rawdomain $2;
  rewrite ^/(.*)$  http://$rawdomain/$1 permanent;
}

Con esta regla de nginx puesta en el servidor default, todos los dominios con www serán redirigidos al dominio sin www. Presto =).

Un retorno a Hattrick

Este mensaje me llegó hace ya un año, desde hattrick que es un sitio donde diriges un equipo de futbol, entrenas a tus jugadores, vendes y compras para tu equipo y mil cosas más. La verdad está muy chido, pero después de unos años lo dejé. Luego me llegó este mensaje chantajista... y pues volví =P jeje. Qué mendigos! hasta me acordaba del jugador, Arco Busing.


¡Hola entrenador!

Soy Arco Busing, el antiguo capitán de tu equipo de Hattrick: Las Cabezas. ¿Te acuerdas de mí?

Quería contarte que las cosas ya no son como eran antes en el antiguo vecindario. Los aficionados echan en falta un equipo al que seguir... y yo siento lo mismo. ¿Estarías dispuesto a retomar tu carrera como mánager?

De hecho, jefe, este podría ser el momento para darle otra oportunidad. Han cambiado muchas cosas en Hattrick. Hay un diseño nuevo, los servidores son más rápidos y hay un montón de características nuevas desde que te fuiste.

Pensamos que sería increíble tenerte de vuelta con nosotros. Echa un vistazo al nuevo sitio aquí - y si sientes que te gusta, podrás empezar con un equipo nuevo ¡ahora mismo!

Y si lo haces, ¡puedes estar seguro de que tanto los otros antiguos jugadores como yo estaremos siempre en los palcos!

Pages

Subscribe to La gaceta de la cabeza RSS
Drupal theme by Kiwi Themes.