Ahorrando tiempo con TextMate y Subversion

Como llevo una temporada sin postear, aprovecho unos segundos de tiempo libre para contaros un pequeño truco motivado por el espíritu de la Infinita Vagancia™ y el típico comentario de “molaría que TextMate hiciera…” (en este caso, de David Alonso)

El truco de hoy es la típica chorrada que te molesta 80 veces al día, y cuando la resuelves te das cuenta de lo poco que nos queremos en general (resolverlo no llevó más de 2 minutos)

Escenario: usas Subversion desde línea de comando, pero escribes tus mensajes de commit con TextMate (y si no lo haces, ahora te cuento cómo)

Problema: cuando escribes tu mensaje de commit, tienes que guardar el documento y luego cerrarlo para que se “registre” el mensaje y se haga el commit.

Idea: guardar y cerrar con un atajo de teclado, pero sólo en los mensajes de commit de Subversion.

Usando TextMate como editor de mensajes de commit

Si quieres usar TextMate para editar tus mensajes de commit, la cosa es bastante simple. Tienes que asegurarte de tener instalada la utilidad “mate” (usando el menú “Help » Terminal Usage…”) y añadir esto en tu fichero .bash_profile:

export SVN_EDITOR='mate -w'

Para ello, cuando hayas instalado ‘mate’ puedes abrir una ventana de Terminal.app (que por defecto inicia una sesión en tu carpeta $HOME) y escribir:

mate .bash_profile

Se abrirá el fichero .bash_profile si existe, y si no se creará.

Añade la línea “export …” donde quieras, cierra el fichero y cierra la ventana de Terminal.app (necesitas abrir una nueva para que el fichero .bash_profile se vuelva a leer)

Siguiente paso: el comando de TextMate

Una de las múltiples maravillas de TextMate es el sistema de “scoping”.

De una forma muy simplificada, el “scoping” es una forma de identificar qué tipo de texto estás editando. Mediante un sistema de expresiones regulares, TextMate puede reconocer en qué lenguaje estás programando; Y dentro de ese lenguaje, si estás editando un String, una función, un número…

Afortunadamente, los tipos que mantienen el bundle de Subversion tuvieron la deferencia de identificar cuándo un fichero es un mensaje de commit de Subversion.

El scope para un mensaje de commit es

text.subversion-commit

Otra maravilla de TextMate es que puedes limitar un comando a un scope, de forma que podemos escribir un comando que sólo funcione cuando estamos editando un mensaje de commit.

Para hacer nuestra vida más fácil, vamos a crear un comando que guarde y cierre el documento actual, y asignarlo a la combinación de teclas ⌘ + S (que ya estamos usando para guardar)

Así que abrimos el editor de Bundles con ⌃ + ⌥ + ⌘ + B y creamos un nuevo comando en el bundle de Subversion:

Nuevo Comando de TextMate

Le asignamos un bonito nombre:

Nombrando el Comando

lo rellenamos de contenido:

Comando Save and Commit

y cerramos la ventana del Bundle Editor.

A partir de ahora, cuando escribamos

svn ci nuestro_bello_fichero_modificado

se abrirá una ventana de TextMate con esta pinta:

Ventana de Commit

donde podemos escribir nuestro mensaje de commit, y al pulsar ⌘ + S para guardar, se cerrará automáticamente y empezará nuestro commit :)

Y eso es todo, de momento…

Arreglando las teclas Inicio y Fin en Mac

Si eres un usuario de Mac que viene del mundo Windows (o Linux) te habrás dado cuenta de que el comportamiento de las teclas “Inicio” y “Fin” en Mac no tiene nada que ver con otros sistemas operativos.

Lo mismo sucede con las teclas “Avanzar Página” y “Retroceder Página”, que en Mac avanzan y retroceden, pero no mueven el cursor de sitio…

Si quieres que la tecla “Inicio” vaya al principio de la línea, la tecla “Fin” vaya al final, y las teclas de Avanzar y Retroceder página funcionen de una forma racional, sólo tienes que crear un ficherito de texto con este contenido:

{
  "\UF729"  = "moveToBeginningOfLine:";
  "$\UF729" = "moveToBeginningOfLineAndModifySelection:";
  "\UF72B"  = "moveToEndOfLine:";
  "$\UF72B" = "moveToEndOfLineAndModifySelection:";
  "\UF72C"  = "pageUp:";
  "\UF72D"  = "pageDown:";
}

y guardarlo en ~/Library/KeyBindings/DefaultKeyBinding.dict (creando la carpeta si no existe todavía)

Poseso! :)

Mejora tu productividad con la carpeta “Current”

Inauguro una nueva categoría en el blog, “Productividad”, donde iré compartiendo trucos y técnicas que uso a diario para trabajar menos (y mejor)

Como dijo el gran Sergio Gil:

Para mí hay dos tipos de vagos, el vago bueno y el vago malo. Al vago bueno no le gusta trabajar, y hace cosas increíblemente ingeniosas para no tener que hacerlo

El primer truco es una técnica bastante simple para no tener que acordarte de dónde están los ficheros con los que andas trasteando.

Básicamente, consiste en tener en alguna parte (yo la tengo en el escritorio) una carpeta “Current” (o como quieras llamarla) donde irás copiando accesos directos a lo que tengas entre manos en cada momento.

Yo la tengo en el escritorio porque:

  1. Es más fácil tirar cosas dentro usando Exposé
  2. Es fácil de ver (sólo tengo 4 iconos)
  3. En cualquier otro sitio se me olvida que está y dejo de usarla :)

Mi escritorio actual es una cosa así:

Escritorio minimalista

y como veréis la carpeta “Current” no tiene pérdida :)

Además de en el escritorio, tengo un acceso directo a “Current” en el Sidebar del Finder, con lo que tengo acceso a la carpeta desde todas las aplicaciones a la hora de abrir y guardar ficheros:

TextMate: Open

Por último, para tener siempre la carpeta a un atajo de teclado de distancia, he cambiado una de las preferencias menos utilizadas del Finder: la carpeta por defecto para nuevas ventanas.

Carpeta por defecto para nuevas ventanas

Así, cada vez que pulso ⌘ N en el Finder tengo mi ventana de “Marrones en Curso” lista…

Como veréis, en “Current” tengo sobre todo accesos directos a carpetas. Para crear un acceso directo, basta con arrastrar el elemento mientras pulsamos ⌥ y ⌘. El cursor se convertirá en el símbolo de acceso directo, y ya podemos arrastrar el icono a Current. Otro detalle de agradecer es que podemos cambiar el nombre del acceso directo y seguirá llevándonos al mismo sitio (algo muy útil si todas tus carpetas de código en todos tus proyectos se llaman “Code” :)

Y eso es todo (que no es poco para ser el primer truco :)

Capturando webs con Paparazzi, the lazy way

Si trabajas pintando webs, o tienes que enviar pantallazos de páginas, o guardas un archivo de sitios, o si tu trabajo tiene remotamente que ver con internet y con imágenes, Paparazzi es una herramienta que no debe faltar en tu arsenal.

Si además eres un vago redomado y ni siquiera Quicksilver es suficientemente cómodo para tí, aquí tienes un regalito: un bookmarklet que capturará en Paparazzi la URL que estés visitando en ese momento.

Shot this! (el enlace tiene Javascript, así que no lo verás en Bloglines. Gracias a Belingo por el tip :)

Arrastra el link a tu barra de favoritos, y tendrás tus capturas de pantalla a un sólo click de ratón (o, si tu nivel de vagancia alcanza las más altas cotas, pulsando ⌘ + numerodefavorito):

Safari Bookmark Shortcuts

El bookmarklet está probado en Safari, Camino y Firefox (en los dos últimos tendrás que marcar un checkbox de seguridad la primera vez que lo ejecutes)

¡A capturar!

Technorati tags:

GTD con Quicksilver, Mail.app y Actiontastic (Primera Parte)

Nota: en este post presupongo que ya sabes qué es GTD y Quicksilver, y que tienes cierta curiosidad por mejorar tu flujo de trabajo y la gestión de tu tiempo.

Si lo de GTD te suena a siglas de un partido político, te recomiendo que te des un paseo por estos enlaces:

En castellano no he encontrado nada en Google, a pesar de que el libro lleva unos meses publicado en nuestro idioma. Si alguien conoce algún recurso interesante sobre GTD en castellano, que avise en los comentarios.

Empezamos

Este post no pretende ser un curso completo de GTD. Es, simplemente, una recolección de técnicas que uso a diario para gestionar el trabajo.

Vaya por delante que es más GTD en la filosofía que en la práctica. GTD es una técnica que requiere disciplina, y eso es algo de lo que siempre he carecido :)

En primer lugar, voy a exponer sobre qué 3 bases se apoya mi flujo de trabajo:

Flow State

o la capacidad para “desconectar” del entorno y concentrarte exclusivamente en la tarea que tienes entre manos. También conocido como “la zona”. Si no sabes de qué estoy hablando y trabajas con ordenadores, te debes a ti mismo leer este artículo e investigar sobre el tema.

Inbox 0

o “0 mensajes en la bandeja de entrada”. Un poco más adelante contaré por qué es importante y cómo se consigue.

Memoria 0

que es una medida simple para reducir el stress: deja de mantener en la cabeza listas de cosas. Hay mil herramientas para esto, y una de ellas es perfecta para ti.

Mis herramientas

Como ya digo, hay cientos de herramientas para gestionar tu flujo de trabajo. Basecamp, Backpack, Remember The Milk, Palms, Smartphones, agendas, Moleskines, servilletas, pizarras…

Cada persona es un mundo, y se sentirá mejor usando una u otra según su personalidad o el contexto de trabajo. Por ejemplo, Basecamp es una muy buena herramienta en el trabajo, pero para casa prefiero Backpack. Un buen lugar donde mantenerse informado sobre estas herramientas es el blog de Merlin Mann: 43 folders.

Personalmente, mi arsenal para GTD consiste en:

  • una agenda de papel, con anillas. Después de usar varias PDAs, teléfonos, wikis, Outlook… siempre acabo confiando en algo que casi nunca falla: el papel.
  • Mail.app, el cliente de correo de Apple. Para gestionar el correo Como Dios Manda™ tienes que usar una cuenta IMAP. Se puede decir más alto, pero no más claro :)
  • Quicksilver, el programa definitivo que vale para (casi) todo.
  • MailActOn, un plugin para Mail.app que vale su peso en oro.
  • Actiontastic, un descubrimiento reciente que me ha conquistado (y que es en realidad el culpable de que esté escribiendo este post)

Inbox 0

El concepto de “Inbox 0″ lo acuñó Merlin Mann, y en 43 folders tienen una sección especial dedicada al asunto.

La bandeja de entrada de nuestro cliente de correo es la puerta por donde entra hoy por hoy la mayoría de nuestro trabajo, en forma de citas, tareas, recordatorios o los malditos “coñacitos de reenviar”.

Si miras tu bandeja de entrada y tienes 450 mails, 37 de ellos sin responder y 15 marcados como “Urgente” puedes pensar que tienes un problema de saturación, pero lo más probable es que simplemente te falte sólo un poco de organización.

Merlin Mann publicó un truco infalible para vaciar tu bandeja de entrada: mueve todos los mensajes a otra carpeta.

Sí, yo también me reí mucho cuando lo leí por primera vez.

Y luego lo probé.

Y entonces dejé de reirme.

Adelante. Crea una carpeta “@archivo” (la arroba es para que salga la primera en la lista de carpetas) y arrastra todos los correos de la bandeja de entrada.

Vaciando la bandeja de entrada

Si no te atreves (como me pasó a mí la primera vez que lo intenté :) deja sólo los correos de la última semana. O el último mes. O del tiempo que necesites para sentirte a salvo. Pero mentalízate de que el objetivo final es este:

Inbox Zero

Para archivar los mensajes que vayan llegando a partir de ahora, vamos a usar una convención de GTD: los contextos.

Un contexto es un “sitio” en el que se realiza una tarea. Aquí “sitio” puede ser un lugar físico, un programa, un estado mental…

Mis contextos en Mail.app son:

  • @archive, donde se guarda todo una vez que se ha procesado (siguiendo la “regla de los 2 minutos” de David Allen)
  • @do, donde guardo los mails que contienen tareas que tardaré más de 2 minutos en realizar.
  • @later, donde guardo mails con información interesante para revisar y que no tengo tiempo de mirar ahora mismo. Aquí sólo guardo mails que tienen o podrían tener algo que ver con proyectos que estén activos. Si no, su sitio es @archivo.
  • @reply, donde guardo los mails que voy a tardar más de 2 minutos en responder.

Para archivar los mensajes uso MailActOn, un plugin de Mail.app que te permite asignar atajos de teclado a reglas de filtrado de correo:

Reglas de MailActOn

Si me llega un mail que quiero archivar, simplemente pulso CTRL + A y desaparece de la bandeja de entrada. CTRL + D lo mueve a @do, CTRL + S (de “Save”) lo mueve a @later y CTRL + R lo mueve a @reply. Todas las teclas están bastante cerca, con lo que normalmente no suelo perder más de 2 segundos en sacar un mensaje de la bandeja de entrada (salvo que lo vaya a responder en menos de 2 minutos, entonces se queda en la bandeja hasta que envíe la respuesta)

O sea, esto:

Workflow GTD simplificado

Contextos

De momento la cosa parece complicada, pero en realidad una vez que te haces con el sistema de archivo de mails se convierte en algo natural y lo harás sin pensar (que es la idea de todo el sistema, en realidad)

Pero salvo que te paguen por archivar emails, todavía no hemos hecho nada productivo (intenta pedir un aumento de sueldo por tener 0 mensajes en la bandeja de entrada, a ver qué pasa… :)

Merlin Mann afirma que tiene configurado su cliente de correo para descargar los mensajes nuevos una vez cada hora. Salvo que trabajes en un servicio de urgencias, en una central nuclear, o arreglando bugs de la beta de La Coctelera, no pasa nada si tardas (como mucho) una hora en contestar un mail (en serio).

La idea es que el tiempo que no estés archivando correos estés currando (sorprendente esto de la economía capitalista, oiga), y entonces es cuando realmente empiezan a ser útiles los contextos.

Digamos que ya has archivado tus mails. El siguiente paso, según cómo sea tu forma de trabajo, es entrar en la carpeta @do o en @reply, y empezar a cerrar tareas.

En estas dos carpetas, tengo una vista por orden cronológico. Primero, los mails más antiguos. Empiezo por el primero, y voy completando las tareas usando el “clásico” flujo de GTD.

Hay quien recomienda reservar un tiempo fijo al día para contestar emails (y tengo algún compañero que es super fan de esa idea), pero yo normalmente suelo hacer sesiones de curro intenso de 45 minutos seguidas de sesiones de 15 de “intendencia” (ordenar mails, contestar pendientes en @reply… leer el Bloglines :)

Los días en que hay mucho jaleo, cambio las sesiones de 45 minutos por sesiones de “Hasta Que Veas Borroso™” (con el cliente de mail cerrado) con pausas más largas.

Para el tema del Flow State, iTunes y unos cascos decentes son una ayuda inestimable.

En el próximo episodio, veremos cómo usar Quicksilver y Actiontastic para convertir mails en tareas y para captura de “marrones” que no vengan por email, y cómo la “Memoria 0″ nos permitirá “desconectar” del trabajo con más facilidad.

¡Hasta la próxima!

Technorati tags: , ,

iPhone, mi teoría de la conspiración

Como ya se ha escrito de todo sobre el iPhone, y mis principios periodísticos me impiden volver a repetir lo que ya ha contado todo el mundo, voy a exponer una teoría sobre el iPhone que, de momento, no he leído en ninguna parte.

La idea va tal que así: la demanda de Cisco a Apple es un estudiado plan de márketing de Apple y Cisco.

Me explico:

A la izquierda del cuadrilátero, Cisco

Cisco tiene registrado el término iPhone desde 1996, y presentó el pasado diciembre su iPhone.

El iPhone de Cisco es un trasto que sirve, básicamente, para usar Skype sin encender un ordenador.

En el mercado americano, un iPhone de Cisco cuesta unos 180 dólares.

Imaginemos que Cisco ha encontrado un nicho de mercado sin explotar, y venden… no sé… un millón de iPhones

Imaginemos que I+D, fabricación, promoción y distribución les ha costado… hmmm… el 50% del precio del trasto (que tampoco es exagerar demasiado): 90 dólares.

Esto nos da un beneficio aproximado de 90 millones de dólares.

A la derecha del cuadrilátero, Apple

Salvo que acabes de salir de un coma profundo, ya has leído todo lo que hay que saber del iPhone de Apple.

Steve Jobs dijo en la keynote del martes que esperan hacerse con una cuota de mercado del 1%: 10 millones de terminales.

Teniendo en cuenta la experiencia de Apple en mercados similares (cuando presentaron el iPod, el mercado de reproductores de MP3 ya era bastante maduro), creo que se ha quedado corto, pero son sus cifras.

Imaginemos que el iPhone de Apple tuviera el mismo coste de fabricación, distribución y profundo que el de Cisco: el 50%.

Si podemos aceptar que los distribuidores del iPhone se llevasen un 50% de los beneficios (algo realmente extraordinario en el mercado de la cacharrería, donde lo normal es algo menos del 5%), y para simplificar los cálculos imaginamos que sólo se vendiera el modelo más barato, la operación le reportaría a Apple 125 dólares por terminal.

O sea, 1250 millones de dólares

El coste de la promoción

Apple presenta un producto que saldrá dentro de 6 meses…

¿Cómo consigues 6 meses de publicidad gratis?

Es tan fácil como inventarte un pleito… Apple paga a Cisco el doble de lo que esperan ganar vendiendo el CiscoPhone (180 millones de dólares) a cambio de que sigan pleiteando hasta que salga el ApplePhone.

Las dos marcas aparecen semana tras semana en todos los medios de comunicación.

La imagen de Apple se mantiene intacta (son “unos tios muy chulos que van de sobrados frente a Cisco”) y la de Cisco tampoco sufre (al fin y al cabo, Cisco tiene una reputación intachable fabricando equipamiento enterprise de redes, y el mercado doméstico se la trae al fresco)

Si la jugada sale bien, al final del circo Apple le regala a Cisco una ínfima parte de lo que hubiera costado la publicidad… digamos… 170 millones de dólares.

Hay quien dirá… ¿y entonces el iPhone de Cisco? ¿Cómo puede una compañía invertir en I+D, desarrollo y distribución de un producto títere a cambio de hipotéticos beneficios futuribles?

Pero si te has hecho esta pregunta es que todavía no has visto fotos del iPhone de Cisco… :P

Nota: Todo esto no es más que una absurda idea producto de una sobredosis de tallarines chinos. Cualquier parecido con la realidad es pura coincidencia y los datos económicos son absolutamente ficticios. Supongo que alguien me copiará en inglés, lo republicará en su blog, lo enviará a Digg y se hará rico con los AdWords. En ese caso, molaría que se enrollara y me mandara un iPhone (el de Apple, por favor) el día de mi cumpleaños.

Technorati tags: , , ,

Próximo libro sobre TextMate

La editorial Pragmatic Books (mundialmente conocida por sus fantásticos libros sobre Ruby y Rails) está preparando un libro sobre nuestro editor favorito: TextMate: Power Editing for the Mac.

De momento está en beta, pero por lo poco que he leído en los extractos en PDF el libro promete…

Si piensas que no le estás sacando todo el partido a TextMate, invertir en este libro es totalmente recomendable.

Update: Acabo de terminar de leer una beta del libro (la revisión 1.02, a la que le faltan aún unos cuantos capítulos) y tengo que decir que es una joya. Im-pres-cin-di-ble si quieres convertirte en “Power User”.

I love TextMate

Llevo una semana obligándome a usar NetNewsWire y MarsEdit para escribir posts en Apple Weblog.

También le di una oportunidad a ecto), pero es casi tan poco eficaz como MarsEdit.

Y he decidido que no le llegan ni a la suela de los zapatos a TextMate y su “Blogging Bundle

La combinación de TextMate (con unas funciones tan increíblemente útiles como “enlaza esta palabra con el primer resultado que aparezca en Google cuando la buscas”) y QuickSilver (con un trigger personalizado que inserta en el texto la URL de la web que tenga abierta en Safari) deja en ridículo a programas dedicados que cuestan una pasta absurda (para hacer lo que hacen como lo hacen)

TextMate en acción

Post patrocinado por “Programas que valen más de lo que cuestan™”

Herramientas para desarrollo web “hardcore” en Mac

A raíz del post sobre jQuery, estuve revisando la web de AquaPath para ver si había alguna novedad.

Y me he encontrado con una colección de herramientas impresionante para desarrolladores web estilo “hardcore” (i.e: de los que escriben su código directamente con unos y ceros : )

Algunas, como XMLNanny, ya las conocía. Pero hay suculentas novedades en la lista.

Algunas de las herramientas que encontraremos son:

  • XMLNanny: Un validador XML y XHTML, perfecto para validar código que tienes en local sin volverte loco con los validadores del W3C.
  • Safari Guide: Para evaluar expresiones XPath, XQuery, XSLT y JavaScript en el documento que tengamos abierto en Safari.
  • AquaPath: Una utilidad que nos permitirá evaluar expresiones XPath 2.0 en documentos XML (incluyendo XHTML), viendo el resultado gráficamente.
  • OttoMate: Para automatizar el testing de sitios web usando Automator, parecido a Selenium, pero para Safari.
  • XML-RPC Client: Un cliente gráfico para servicios XML-RPC (WordPress, por ejemplo)

Hay más, pero así de repente estas son las más interesantes (o al menos las que yo entiendo para qué sirven :)