{ "nodes": [{ "uri": "https:\/\/log.exos.ninja\/pmdclock", "content": "# Manejando tiempos pomodoro desde la consola *like a boss*.\r\n## Presentando pmdclock\r\n\r\nHace tiempo vengo usando (o intentando usar) la t\u00e9cnica [pomodoro](https:\/\/es.wikipedia.org\/wiki\/T%C3%A9cnica_Pomodoro), para el que no la conozca es un m\u00e9todo para manejar tiempos de concentraci\u00f3n y relajo entre tareas.\r\n\r\nA falta de un programa que me haya gustado para manejar estos tiempos, termin\u00e9 usando [kteatime](https:\/\/www.kde.org\/applications\/games\/kteatime) que no tiene nada que ver con la t\u00e9cnica, pero b\u00e1sicamente es un timer con tiempos preconfigurables.\r\n\r\nQueriendo probar hace tiempo la creaci\u00f3n de demonios tipo *agents* con [node.js](http:\/\/log.exodica.com.ar\/?q=node.js) me puse a hacer una utilidad pero con las siguientes caracter\u00edsticas:\r\n\r\n* Que sea de linea de comando\r\n* Que tenga un daemon para no tenerlo ocupando un tty\r\n* Que notifique cuando se terminan los tiempos\r\n* Que guarde un registro de las actividades y el tiempo de sobra o falta para perfeccionar las pr\u00f3ximas estimaciones\r\n* Que se pueda implementar con [i3wm](https:\/\/i3wm.org\/) + [i3blocks](https:\/\/github.com\/vivien\/i3blocks) (y otras cosas)\r\n\r\nDe ah\u00ed que naci\u00f3:\r\n\r\n[pmdclock](https:\/\/github.com\/exos\/pmdclock), CLI clock agent\/client for pomodoro \r\n\r\n## Instalando\r\n\r\nLa instalaci\u00f3n por [npm](https:\/\/www.npmjs.com\/package\/pmdclock) es sencilla:\r\n\r\n $ sudo npm install -g pmdclock\r\n\r\nOtra forma ser\u00eda hacerlo desde las fuentes:\r\n\r\n $ git clone https:\/\/github.com\/exos\/pmdclock.git\r\n $ sudo npm install -g\r\n\r\n## Configurando\r\n\r\nEl archivo de configuraci\u00f3n ser\u00e1 ```~\/.pmdclock\/config.yml```, cualquier cosa se configura ah\u00ed (se crea el archivo si no existe).\r\n\r\nLos par\u00e1metros completos se encuentran en [el README](https:\/\/github.com\/exos\/pmdclock\/blob\/develop\/README.md#configure). \r\n\r\nPor ejemplo, para hacer que cuando se termine el tiempo reproduzca un sonido podemos escribir:\r\n\r\n runCmd: \"mplayer \/usr\/share\/sounds\/freedesktop\/stereo\/complete.oga\"\r\n\r\n## Uso\r\n\r\nEl uso de pmdclock es sencillo, con las opciones por defecto los tiempos ser\u00e1n los comunes de pomodoro, osea, 25 minutos de concentraci\u00f3n, 5 de descanso, y 25 de descanso largo, que se activa autom\u00e1ticamente despu\u00e9s de 4 pomodoros completados.\r\n\r\nIgualmente hay que tener en cuenta que usa un agent, para eso tenemos que activarlo primero:\r\n\r\n $ pmdclock agent\r\n Starting agent\r\n $\r\n\r\nEste comando nos devolver\u00e1 al prompt y ya est\u00e1 listo, si se desea cerrar este agent, se puede hacer por medio del comando:\r\n\r\n $ pmdclock agent -k\r\n\r\nPero hay que tener en cuenta que si hay un timer activado este se perder\u00e1.\r\n\r\nComo notaste tambi\u00e9n, la forma de uso esta basado en comandos tipo git, para verlos todos solo tenemos que hacer:\r\n\r\n $ pmdclock --help\r\n\r\nPara ver los parametros de cada comando:\r\n\r\n $ pmdclock rest --help\r\n\r\nBueno, empezamos a trabajar, primero que nada debemos comenzar un pomodoro, al cual le podemos, opcionalmente, dar una descripci\u00f3n:\r\n\r\n $ pmdclock start -n \"Pelando papas\"\r\n Task started!\r\n $\r\n\r\nEsto nos devolver\u00e1 al prompt, as\u00ed que la pregunta ser\u00e1, \u00bfcomo saber que esto esta corriendo?, bueno como dije esto funciona con un agent y funciona 100% en background, esto es as\u00ed porque est\u00e1 pensando para usar en la misma terminal que desarrollemos. Por defecto igualmente seremos notificados a trav\u00e9s de libnotify (notificaciones en el escritorio), por lo que no te preocupes de pasarte de tiempo.\r\n\r\nPara ver como va, podemos ejecutar:\r\n\r\n $ pmdclock info\r\n Pelando papas finish in 17 minutes\r\n\r\nComo ver\u00e1n los tiempos son todos *humanizados*, si queremos una salida mas detallada, podemos usar ```--format```:\r\n\r\n $ pmdclock info --format \"%n lleva %e y se termina en %r\"\r\n Pelando papas lleva 07:13 y se termina en 18:47\r\n\r\nDonde ```%n``` es el nombre, ```%e``` es el tiempo que pas\u00f3 y ```%r``` el tiempo restante (estos \u00faltimos es mm:ss). Para ver la lista completa de variables [pueden ver el README](https:\/\/github.com\/exos\/pmdclock\/blob\/develop\/README.md#0-info-variables)\r\n\r\nSi quer\u00e9s cambiar la salida por defecto para no tener que andar usando ```--format``` se puede cambiar desde la configuraci\u00f3n:\r\n\r\n infoFormat: \"%n lleva %e y se termina en %r\"\r\n\r\nAhora solo nos queda concentrarnos en nuestra tarea por los pr\u00f3ximos 25 minutos, una vez terminemos (no importa si es antes o despu\u00e9s de ser notificados), podemos indicar que terminamos:\r\n\r\n $ pmdclock finish\r\n Pelando papas finish in 27 minutes\r\n\r\nSiguiendo con la t\u00e9cnica pomodoro, lo que nos queda ahora es tomarnos un peque\u00f1o descanso de 5 minutos, para eso tenemos el comando *rest*:\r\n\r\n $ pmdclock rest\r\n Rest started!\r\n\r\nClaramente, si usamos pomodoro correctamente, no tendr\u00edamos que tener una pausa entre terminar una tarea y empezar un descanso y viceversa, as\u00ed que podemos cambiar de una a la otra si necesidad de terminarla con *finish*:\r\n\r\n $ pmdclock start\r\n Task started!\r\n $ pmdclock rest\r\n Task finished! in 27 minutes\r\n Rest started!\r\n\r\nDe esta forma podemos conseguir un flujo mas continuo.\r\n\r\nTodas las actividades que hagamos, ser\u00e1n guardadas en un historial, para poder consultarlas y ver que tan bien llevamos los tiempos, para ver este historial, debemos hacer uso del comando *list*:\r\n\r\n $ pmdclock list\r\n \u250c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\r\n \u2502 \u2502 Name \u2502 Started \u2502 Finished \u2502 On time \u2502\r\n \u2502 * \u2502 Pelando papas \u2502 Today at 9:00 AM \u2502 Today at 9:27 AM \u2502 2 mins \u2502\r\n \u2502 - \u2502 Rest \u2502 Today at 9:27 AM \u2502 ... \u2502 -3 mins \u2502\r\n \u2514\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\r\n\r\nEste historial lo podemos borrar cuando queramos con:\r\n\r\n $ pmdclock clear\r\n History clear, 2 tasks deleted.\r\n\r\nComo vimos antes, si llegamos a las 4 tareas realizadas, la pr\u00f3xima vez que indiquemos un descanso este autom\u00e1ticamente nos creara un *large rest*:\r\n\r\n $ pmdclock rest\r\n Large rest started!, be happy\r\n\r\nEsto tambi\u00e9n es configurable y podemos tambi\u00e9n forzar un descanso corto:\r\n\r\n $ pmdclock rest --short\r\n\r\nBueno hasta ah\u00ed tenemos el funcionamiento b\u00e1sico, luego ir\u00e9 pasteando mas cosas.\r\n\r\nSi les interesa el proyecto, no duden en [enviar bugs e ideas](https:\/\/github.com\/exos\/pmdclock\/issues).\r\n\r\nSaludos.", "created": "2017-01-18 08:40:51"}] }