mise a jour

This commit is contained in:
Yann Esposito 2009-05-22 16:45:53 +02:00
parent e18e4c8c7f
commit 4d51ed48da
4 changed files with 113 additions and 81 deletions

67
IDEAS.txt Normal file
View file

@ -0,0 +1,67 @@
Il est ironique d'utiliser un fichier de TODO list pour
un projet dont le but est justement d'améliorer cet état de fait.
1 - réflexion
a. structure de données
b. visualisation
c. ordre des tâches
d. contextes
e. projets (jusqu'où aller ? quasi-Gantt)
idées en vrac. L'idée GTD n'est pas mauvaise:
- une tâche arrive :
ajout rapide dans (@Inbox)
ou ajout avec questionnement :
* moins de deux minutes ?
oui -> tout de suite (compteur)
non
* est-ce une action ? non -> @notes
oui -> pour moi ? -> non -> qui contacter ?
(nouveau détail de tache)
oui -> détails (contextes, projets, notes, contacts, dépendances...)
- interface :
prochaine tache
liste des taches (ordonée en prenant en compte
les priorités et les dépendances)
début de l'activation de la tâche
fin de l'activation de la tâche pour calculer la durée
notifications :
date maximale pour faire cette tâche
durée maximale que l'on s'autorise à travailler sur une tâche
durée minimale que l'on s'autorise à travailler sur cette tâche
compteurs de 2 minutes
compteurs pour le système (10+2)x5
* Résumé des actions faites:
Affichage des actions faites:
avec cumul ou avec prorata des tâches parallèles
(penser à une hierarchiesation des contextes et projets)
avec affichage des durées intelligentes pour pouvoir écrire 1d 4h
ou 1w 2d 3h par exemple.
(journées de 8h par exemples,
5 jours par semaines, 160h par mois)
* Résumé des actions à faire
- affichage en arbre des dépendances entre tâches (à la Gantt)
- affichage regroupé par projet
- affichage regroupé par contexte
exemple: avec graphviz
État de la tâche activée ou non.
- ordre des tâches :
<date> et <durée> :
1 - tâche de moins de 2 minutes
2 - tâches avec date dépassées
3 - tâches pour aujourd'hui
4 - tâches sans date
5 - tâches sans date de début
6 - tâches avec date de début dans le futur
7 - tâches en attente d'une intervention extérieure
8 - tâches en attente de la fin d'une autre tâche pas encore terminée
Au sein d'un même groupe : c'est la priorité qui prime

View file

@ -1,67 +1,4 @@
Il est ironique d'utiliser un fichier de TODO list pour
un projet dont le but est justement d'améliorer cet état de fait.
1 - réflexion
a. structure de données
b. visualisation
c. ordre des tâches
d. contextes
e. projets (jusqu'où aller ? quasi-Gantt)
idées en vrac. L'idée GTD n'est pas mauvaise:
- une tâche arrive :
ajout rapide dans (@Inbox)
ou ajout avec questionnement :
* moins de deux minutes ?
oui -> tout de suite (compteur)
non
* est-ce une action ? non -> @notes
oui -> pour moi ? -> non -> qui contacter ?
(nouveau détail de tache)
oui -> détails (contextes, projets, notes, contacts, dépendances...)
- interface :
prochaine tache
liste des taches (ordonée en prenant en compte
les priorités et les dépendances)
début de l'activation de la tâche
fin de l'activation de la tâche pour calculer la durée
notifications :
date maximale pour faire cette tâche
durée maximale que l'on s'autorise à travailler sur une tâche
durée minimale que l'on s'autorise à travailler sur cette tâche
compteurs de 2 minutes
compteurs pour le système (10+2)x5
* Résumé des actions faites:
Affichage des actions faites:
avec cumul ou avec prorata des tâches parallèles
(penser à une hierarchiesation des contextes et projets)
avec affichage des durées intelligentes pour pouvoir écrire 1d 4h
ou 1w 2d 3h par exemple.
(journées de 8h par exemples,
5 jours par semaines, 160h par mois)
* Résumé des actions à faire
- affichage en arbre des dépendances entre tâches (à la Gantt)
- affichage regroupé par projet
- affichage regroupé par contexte
exemple: avec graphviz
État de la tâche activée ou non.
- ordre des tâches :
<date> et <durée> :
1 - tâche de moins de 2 minutes
2 - tâches avec date dépassées
3 - tâches pour aujourd'hui
4 - tâches sans date
5 - tâches sans date de début
6 - tâches avec date de début dans le futur
7 - tâches en attente d'une intervention extérieure
8 - tâches en attente de la fin d'une autre tâche pas encore terminée
Au sein d'un même groupe : c'est la priorité qui prime
[X] ajouter la méthode dateRegExp à la classe TaskDateTime qui renvoie une
expression régulière qui matche toutes les dates dans la chaînes de
caractère. De manière à pouvoir les supprimer et retrouver le message
de la task.

53
task.rb
View file

@ -5,7 +5,7 @@ require 'contact.rb'
class Task
def initialize(description, note, contacts,
contexts, projects, dates)
contexts, projects, dates, tags)
# the title of the task
@description=description
# list of additionnal informations about the note
@ -20,29 +20,54 @@ class Task
@projects=projects
# multiple date associated to a task
@dates=dates
# tags
@tags=tags
end
def initialize(description)
@notes=[]
@contacts=[]
@contexts=[]
@projects=[]
@tags=[]
@priority=0
@dates=TaskTime.new()
end
def to_s
return @description +
@contexts.map { |x| x.to_s }.join " " +
@projects.map { |x| x.to_s }.join " " +
@contacts.map { |x| x.to_s }.join " " +
@dates.to_s
@contexts.map { |x| x.to_s }.join(" ") +
@projects.map { |x| '['+x.to_s+']' }.join(" ") +
@contacts.map { |x| x.to_s }.join(" ") +
@dates.to_s +
'{' + @tags.map{ |x| x.to_s }.join(", ") + '}'
end
def task_from_string( raw_input )
# petite difficulté pour retrouver le message dans toute cette Meumeu...
@description = raw_input
@description raw_input.gsub(/ (@|(p|project|c|contact|n|note):)(\w+|"[^"]*")/,"")
@contexts=raw.scan(/ @(\w+|"[^"]*")/).map{ |x| x[0] }
@projects=raw.scan(/ (p|project):(\w+|"[^"]*")/).map{ |x| x[1] }
@contacts=raw.scan(/ (c|contact):(\w+|"[^"]*")/).map{ |x| x[1] }
@notes =raw.scan(/ (n|note):(\w+|"[^"]*")/).map{ |x| x[1] }
@dates =TaskTime.date_from_string(raw_input)
# Regular Expressions for that class
@@StdTokenRegExp=/(\w+|"[^"]*")/
# Context
@@ContextsRegExp=Regexp.new(%{ @#{StdTokenRegExp.inspect}})
# Project
@@ProjectsRegExp=Regexp.new(%{\[#{StdTokenRegExp.inspect}\]})
# Contact
@@ContactsRegExp=Regexp.new(%{ (c|contact):#{StdTokenRegExp.inspect}})
# Notes
@@NotesRegExp=Regexp.new(%{\(#{StdTokenRegExp.inspect}\)})
def from_s( raw_input )
@contexts=raw.scan(ContextsRegExp).map{ |x| x[0] }
@projects=raw.scan(ProjectsRegExp).map{ |x| x[0] }
@contacts=raw.scan(ContactsRegExp).map{ |x| x[1] }
@notes =raw.scan( NotesRegExp).map{ |x| x[0] }
# @contexts=raw.scan(/ @(\w+|"[^"]*")/).map{ |x| x[0] }
# @projects=raw.scan(/\[(\w+|"[^"]*")\]/).map{ |x| x[0] }
# @contacts=raw.scan(/ (c|contact):(\w+|"[^"]*")/).map{ |x| x[1] }
# @notes=raw.scan(/\[(\w+|"[^"]*")\]/).map{ |x| x[1] }
# somehow special for the priority
@priority= raw.scan( /!/ ).length - raw.scan( /\?/ ).length
@description=raw_input.gsub(
Regexp.union(@@ContextsRegExp, @@ProjectsRegExp, @@ContactsRegExp, @@NotesRegExp, /!/, /\?/, @date.dateRegexp),"")
@dates =TaskTime.from_s(raw_input)
end
end

View file

@ -13,4 +13,7 @@ class TaskTime
def initialize()
@creation_date=Time.now
end
def taskTimeRegExp
return Regexp.new(" #[^ ]*")
end
end