Feia temps que no postejava i la veritat es que no he tingut gaire temps per posar-me a postejar. Es una llastima no haver postejat res sobre Venecia, pq realment es un lloc molt guapo i vam passar 5 dies de conya entre bolets i carrers d'aigua

.
El fet es que ultimament se m'amontonen massa les coses, i aixo que tampoc en tinc tantes a fer..o potser si, pero no em se quadrar les hores i enrecordar-me/forçar-me a fer-les quan toca.
Aixi que aquest dissabte passat vaig decidir escriure un altre programa per tal de dominar el mon

. Una agenda.
Potser dit aixi sembla que sigui poca cosa, pero el fet es que perl i unix donen per escriure bastantes palles mentals en molt poc temps, aixi que vaig implementar, una agenda, un sistema de notificacions d'anotacions amb capacitat de categoritzar-les per tags, un sistema d'alarmes, una agenda d'adreces personals, un bloc de notes, un sistema user-local d'actualitzacions (nomes cal root en la primera instal.lacio) i un sistema de sincronització distribuida per tal de tenir totes aquestes dades en totes les meves maquines x).
I el nom...crec que es forç suggerent:
calma (aka Calendar manager).
La criatura té 2 dies de vida pero ja esta prou crescudeta, utilitza el sistema de fitxers per emmagatzemar les dades, aixi que es facil buscar notes per shell o fer frontends (java, Gtk2, php, cgi, etc..).
El programa permet ser manejat desde linea de comandes o desde la shell propia (si l'executem sense parametres), aixi podem cridar a totes les funcionalitats de l'agenda i automatitzar-ho al cron pq ens envii un mail/sms/bluetooth dient-nos tot el que tenim per fer avui.
( calma --today | mail my@mail.com ).
També el podem integrar amb el MUA per tal de recollir direccions de correu:
console:
$ calma --get test-user email
test-user@server.com
Feia temps que buscava alguna cosa que em soluciones tot aixo de tenir una agenda, alarmes, anotacions, etc. I que ho pogues sincronitzar facilment entre diferentes maquines per tal de no perdre notes faci on les faci.
Doncs bé anem a instal.lar-lo
Instal.lació:
El procés d'instal.lació es molt senzill, encara que nose si fer-lo en forma de paquet amb tarball i demes, pero el tiempo dirà
Primera sessió amb la calma:
Per defecte ens creara el directori
~/Calendar on emmagatzemara totes les notes, alarmes, contactes, etc.
Pero podem configurar-ho en el
~/.calmarc, per exemple:
console:
$ cat ~/.calmarc
@RemoteHosts=("user\@remotehost.org:./Calendar");
$CalmaAlertPreogram="/usr/pkg/bin/zenity --info --text";
$Editor="/usr/pkg/bin/vim";
$IgnoreSystem=1;
1;
$
Fixeu-vos que la arroba del host ssh remot té una contrabarra davant, no us la oblideu! (fallo tipic). Ara..anem a veure el --help.
console:
$ calma --help
calma v0.2.3:
--about Information about this program.
--daemon Executes the calma daemon in background.
--help Shows this helpy stuff.
--cal [-t] [-l] Shows a colorized calendar of the current month.
--ls [-a|-t|-c] Shows all notes (or '-a'larms)for the target date.
--rm [-a|-t|-c] Removes the target matching the expression.
--sync [url] Syncronizes a remote calendar to your local CalmaDir.
--commit [url] Commit your local calendar to a remote one.
--tag [name] [expr] Tags as 'name' for the matching notes.
--get [name] Get the contact information.
--contact [name] Adds a new contact.
--update Updates calma to the latest version.
--date Shows local current time.
--edit [-c] Edits a target note.
--today Shows notes for today.
--todo Edits the 'TODO' file.
--grep [keyword] List all notes contain this keyword.
--view [expression] Show contents of notes matching the expression.
--alarm [title] Adds a new alarm.
--note [title] Adds a new note to the calendar.
date string format: [[YYYY/]MM/]DD].
targets for ls and rm: (-a)alarm, (-t)tags, (-c)contacts.
$
Suposo que amb el temps anire sintitzant més les comandes, pero son força facils d'aprendre. I com veureu, aquestes comandes les podem utilitzar sense posar els '--' davant i dins del prompt del programa:
console:
pancake@mal:~$ calma
Today: 2006/02/13 24:41
=> version
0.2.3
=> cal
February 2006
Su Mo Tu We Th Fr Sa
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28
=> cal -l
February 2006
2006/02/13:
18:28 | post sobre la calma
2006/02/14:
13:01 | trucar a l'albert
13:30 | trucar al fran
2006/02/17:
21:00 | kdd
2006/02/22:
20:00 | Netstrike contra la SGAE
2006/02/27:
21:00 | concert disidencia + terrorismo sonoro
=>
Ara que ja hem vist una mica com funciona...anem a veure com podriem fer algunes accions interessants:
Crear una nota nova
Per crear-la hem d'utilitzar la comanda "--note" i ens anira demanant les dades...es important que la data es posi en format YYYY/MM/DD i que la hora sigui HH:MM, encara no comprovo gaire els inputs i podeu ficar entrades que no seran processades bé. (Ho corregiré aviat

).
console:
$ calma --note
Title: Aixo es una prova
Time (01:01): 10:10
Date (2006/02/14): 2006/02/20
Text: (end with a single-line dot).
howhowhow
.
Store this note? (Y/n)
*message* note stored.
$ calma --ls /prova
2006/02/20/10:10 aixo es una prova
Accedint a la informació:
Tenim diverses formes d'accedir a la db de la calma:
ls : llista totes les notes emmagatzemades.
ls -a : llista totes les alarmes.
ls -t : llista tots els tags.
ls -t feina : llista totes les notes amb el tag "feina".
ls -c : llista tots els contactes que tenim.
cal : mostra l'output del 'cal' colorejat
cal 3 : mostra el calendari colorejat del mes 3 (Març).
cal -l : mostra totes les tasques que tenim per fer aquest mes de forma lineal.
Podem utilitzar masqueres per filtrar els resultats d'aquestes comandes aixi:
ls /java : mostra totes les notes que continguin la paraula "java" en el titol.
ls -c oan : llista tots els noms de l'agenda que continguin aquesta cadena (Joan, joan, joana...)
Poc a poc aniré definint una forma estandar per totes les comandes, pero dic lo mateix d'abans...no costa ni cansa utilitzar-lo

i canviar 4 comandes no es cap catastrofe.
Els tags
La calma ens permet agrupar notes mitjançant
tags. Per exemple, anem a marcar la nota "nopcon" com a "kdd" aixi:
console:
=> tag kdd nopcon
- 2006/02/17/21:00-nopcon.0x03
Tag this note to kdd? (Y/n)
Note tagged.
=>
Com veieu el primer argument es el nom del tag. El qual sera creat si no existeix i el segon es la string que ha de contenir el titol de la nota. Haurem de respondre una a una "Y" o "n", o <enter> per defecte

.
Ok, ara anem a veure tots els tags que tenim i les notes contingudes en el tag de "kdd":
console:
=> ls -t
concerts
kdd
mataro
=> ls -t kdd
2006/03/04 10:00 - Jornades KDE
2006/02/17 21:00 - nopcon 0x03
=>
Sincronitzant...
La sincronització es fa mitjançant
rsync. Per tant podem utilitzar diferents protocols per comunicar-nos entre maquines (ssh, rsync, ftp...). El fet de ser distribuit ens obliga a tenir com a minim algun node intermig per centralitzar totes les maquines que hi accedeixin o tenir 2 nodes sincronitzats entre ells, fins hi tot poden encadenar sincronitzacions en forma d'arbre amb comandes per ssh automatitzades.
Tenim 2 comandes basiques per manejar les sincronitzacions:
commit : comiteja l'arbre de notes de l'agenda ($CalmaDir) a un o més hosts remots. (Fa una copia identica del que tenim en local a la maquina remota).
sync : sincronitza la nostre agenda local a partir d'una remota. (simplement afegirem les notes que no tinguem, pero no perdrem res.
Aixi que ja sabeu...acostumeu-vos a fer 'sync' abans de cada commit, o com a minim cada cop q canvieu de maquina
Ella mateixa crea un fitxer anomenat:
~/Calendar/commit quan cal commitejar canvis, aixi que podem mirar si existeix i cridar al
calma --commit.
Updating
La calma integra un suport d'actualitzacions local a nivell d'usuari, sense necessitat de ser root. Mira si existeix el ~/.calma al arrencar, i si existeix l'inclou i continua l'execució des d'ell. Cada calma porta hardcodejada la URL origen, aixi que fent:
console:
$ calma --update
Ja tindriem la ultima versió actualitzada, sense pujar a root ni re

. Si fem servir l'update a user-level haurem de definir la variable $IgnoreSystem=1; en el ~/.calmarc per tal d'evitar cada cop que l'arrenquem si volem executar la versio del sistema o la local.
Alarmes
Com es de suposar tot plegat necessita un sistema d'alarmes que ens avisin quan hem de fer certa tasca.
Hi han 2 tipus d'alarmes:
- Les de les notes : S'activen quan es l'hora i el dia fixada per una nota.
- Les alarmes 24h : S'activen per l'hora.
Ambdues executen el programa definit a $CalmaAlertProgram, per defecte porta el "zenity", que pels qui no el conegueu, es el que hauria de ser el "gdialog", usease, un dialog pero amb Gtk2.
#
$CalmaAlertProgram="zenity --info --text";
Ara mateix el que fa es executar el callback com 1 argument amb l'string completa de la hora el dia el titol i el contingut de la nota.
FMI: Per mes info...mireu-vos les comandes "ls -a", "rm -a" i "alarm".
Etzetera..
Com podeu veure explicar com fer servir la calma es un pel llarguet, pero no es dificil d'entendre i manejar, ara us ho deixo amb algunes comandes que trobareu utils:
$ calma --today # mostra totes les tasques per avui.
$ ls /xerrada # busquem tots els posts que tinguin "xerrada" en el titol.
$ view xerrada # mostra tot el contingut de les notes amb "xerrada" al titol.
$ edit xerrada # edita el post que tingui "xerrada"
$ edit -c pep # edita la fitxa persona d'en "pep" :P
$ contact # crea un nou contacte
$ todo # edita el ~/Calendar/todo
TODOs
La veritat es que es algo que sempre havia necessitat, sobretot pel tema que si algu em diu q vagi a fer algo, sudo de fer-ho, pero si es un programa en perl el qui m'ho diu...m'apalanco menys en fer-ho.
Molaria tenir diversos frontends, al menys un per web i un amb Gtk2. M'agradaria integrar-lo amb el doblog per tal de tenir una barra on llisti els events proxims interessants o coses aixi. Fins hi tot podria generar RSS o permetre importar fitxers xCal o iCal de forma modular, es a dir, agendes solapades sobre la nostra agenda i que podem treure o posar les que volguem

.
Ja em direu que tal si el proveu!

a mi m'esta sent molt util..i l'anire millorant constanment, aixi que si l'useu, acostumeu-vos a fer "calma --update" de cop en quant

.
[add comment] [view comments] (7)