Merge lp:~vikingcarl/memolis-docs/lisfs-docs into lp:memolis-docs

Proposed by carlviking
Status: Merged
Merge reported by: Maxime Simon
Merged at revision: not available
Proposed branch: lp:~vikingcarl/memolis-docs/lisfs-docs
Merge into: lp:memolis-docs
Diff against target: 101 lines (+78/-10)
2 files modified
memolis/rdc/architecture.lisfs.tex (+66/-0)
memolis/rdc/architecture.tex (+12/-10)
To merge this branch: bzr merge lp:~vikingcarl/memolis-docs/lisfs-docs
Reviewer Review Type Date Requested Status
Memolis 2 Pending
Review via email: mp+24569@code.launchpad.net

Description of the change

LISFS part of "reprise de code" doc !

added :
- architecture.lisfs.tex
- diag.png

changed :
- architecture.tex

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'memolis/rdc/architecture.lisfs.tex'
2--- memolis/rdc/architecture.lisfs.tex 1970-01-01 00:00:00 +0000
3+++ memolis/rdc/architecture.lisfs.tex 2010-05-02 21:36:25 +0000
4@@ -0,0 +1,66 @@
5+\subsection{LISFS}
6+
7+\subsubsection{Principes généraux}
8+
9+LISFS est un système de fichiers logique :
10+\begin{itemize}
11+ \item D'une part, cela veut dire qu'il se comporte comme un système de fichiers (SGF) classique pour le système Linux : il répond aux commandes shell (\code{cd}, \code{ls}, \code{mv}...) ainsi qu'aux fonctions de navigation des languages de programmation (pour C++, \code{file.open}, \code{file.close}, \code{opendir}, \code{readdir} ...) même si il les interprète d'une façon qui lui est propre.
12+ \item D'autre part, cela veut dire qu'il ne référence pas les fichiers de la manière classique grâce à une arborescence de dossiers statique, mais en les liant à un certain nombre d'attributs. Il utilise de plus des propriétés logiques pour comparer ces attributs, et donc que là où dans un SGF traditionnel, \code{ls A} sélectionne exactement les fichiers appartenant au répertoire A; dans LISFS, \code{ls A} sélectionne tous les fichiers qui ont une propriété B telle que B A.
13+\end{itemize}
14+
15+\paragraph{}Cela veut dire que si on crée deux dossiers à la racine d'un LISFS (\code{mkdir A}, \code{mkdir B}), on peut alors créer des objets comme suit : \code{touch A/obj1} ou bien \code{touch A/B/obj2}. Dans ce cas, un \code{ls B} donnera \code{obj2}, alors qu'un \code{ls A} donnera \code{obj1} et \code{B}. Ici, B est appelé un incrément de A.\\
16+\\
17+On peut de plus utiliser des attributs valués, c'est à dire des couple présentés sous la forme 'attribut:valeur' (par exemple 'nom:bob' ou 'age:18'). On peut ensuite lier ces attributs à des logic, permettant plus d'opérations logiques pour ces attributs (par exemple \code{age:>18} pour obtenir tous les fichiers ayant un attribut age valué par un entier supérieur à 18).Cela permet une navigation plus intuitive et plus modulable au sein des fichiers, et donc une approche plus « humaine » du stockage d'informations, ce qui nous intéresse particulièrement pour la réalisation d'une prothèse mémoire.
18+
19+\subsubsection{Installation}
20+
21+\paragraph{}L'installation de LISFS est malaisée car elle se base sur des \textit{packages} désormais obsolètes, qui peuvent causer des incompatibilités avec le reste des \textit{packages} installés.\\
22+\\
23+La solution que nous avons trouvé a consisté à utiliser LISFS sur un Unix très dépouillé : \textit{Archlinux v 2009.08}, en y installant les versions obsolètes des \textit{packages} tels que demandés dans la documentation de LISFS. (\textit{ocaml}, \textit{camlidl}, \textit{libdb4.3}, \textit{libdb4.3-dev}, \textit{db4.3-util}, \textit{libfuse2}, \textit{fuse-utils}, \textit{libfuse-dev} ; voir aussi le fichier \textit{code/trunk/install-debian.txt} dans les sources de LISFS sur \textit{https://gforge.inria.fr/projects/lisfs/})\\
24+\\
25+Ensuite, une copie brutale d'un LISFS fonctionnel dans le \code{/home} d'Archlinux a été la seule solution trouvée pour l'installation elle-même. Une copie du LISFS utilisé se trouve sur ??????
26+
27+\subsubsection{Utilisation}
28+
29+\paragraph{}Pour utiliser LISFS ainsi installé, il faut le remonter à chaque redémarrage du système par la commande :\\
30+\code{temp/lfs/mount.lfs -real\_mode -fuse\_allow\_others ~/lismeta ~/lis}\\
31+où \code{~/lis} sera le dossier racine de votre LISFS.\\
32+\\
33+\textbf{Accès via un shell :}\\
34+\\
35+Pour les attribut non valués, la syntaxe est comme nous l'avons vu très similaire à un SGF classique.\\
36+Pour les attributs valués, un \code{mkdir A} permet de créer l'attribut, puis on peut faire des \code{ls A:a} directement, les valeurs étant générées à la volée(ici, a). \\
37+\\
38+On peut de plus noter l'existence de pseudo-attributs comme \code{/.ext}, qui permet d'accéder à tous les fichiers ayant le répertoire courant comme attribut, ou \code{/.strict} et \code{/.relaxed} qui permettent de modifier les paramètres d'affichage des sous-dossiers.\\
39+Il existe de plus des attributs valués réservés, comme \code{name:}, qui associe à chaque fichier son nom (par exemple, le fichier \code{file.txt} aura automatiquement l'attribut \code{name:file}).\\
40+\\
41+\textbf{Utilisation via un programme C++ :}\\
42+\\
43+Nous avons choisi d'utiliser les classes \code{ifstream} et \code{ofstream} pour accéder aux fichiers, offrant entre autres les méthodes suivantes:\\
44+\code{ifstream file} : crée un fichier en lecture.\\
45+\code{ofstream file} : crée un fichier en écriture.\\
46+\code{file.open(string pathname)} : ouvre un fichier ayant pour chemin d'accès \code{pathname}\\
47+\code{file.close()} : ferme un fichier précédemment ouvert.\\
48+\code{file >> string text} : écrit le contenu du fichier dans la variable text.\\
49+\code{file << string text} : remplace le contenu du fichier par le contenu de la variable text.\\
50+\\
51+Pour naviguer dans les dossiers, nous avons utilisé les méthodes \code{opendir()}, \code{closedir()} et \code{readdir()}.
52+
53+\subsubsection{Interface}
54+
55+\paragraph{}Pour le projet Mémolis, nous utilisons LISFS en considérant les fichiers comme des objets (rendez-vous, rappel...) et les attributs valués comme des \textit{tags} de ces objets. Donc le chemin d'accès à un objet se compose de ses \textit{tags} et de son \textit{hashcode}, c'est à dire du \textit{timestamp} de l'instant de sa création. (exemple \code{title:medecin/tag:urgent/longitude:34.53/latitude:28.56/287345885478.obj}). Une requête est donc un chemin d'accès à un dossier.\\
56+\\
57+Nous avons réalisé une interface générique pour LISFS, qui est constituée principalement de deux classes C++ se trouvant dans \textit{???/lis-php/} :
58+\begin{itemize}
59+\item \textbf{LISObject} : représente un objet nouvellement créé ou bien extrait de LISFS. Il est caractérisé par un ensemble de tags valués et par un hash code. On peut lui ajouter ou retirer des tags valués, puis « l'écrire » dans LISFS, ce qui a pour effet de l'ajouter au système de fichiers avec pour attributs ses tags valués dans le cas d'un nouvel objet, ou bien de déplacer le fichier existant dans le cas d'un objet plus ancien que l'on aurait modifié.
60+\item \textbf{LISRequest} : représente une requête que l'on voudrait envoyer dans le système de fichier. On peut lui ajouter des tags sélectionnés ou antisélectionés, puis la soumettre à LISFS, qui rend en réponse la liste des objets correspondant à la requête. On peut aussi demander la liste des incrément pour cette requête, c'est à dire la liste des tags pouvant affiner la requête.
61+\end{itemize}
62+
63+\paragraph{}Ces objets C++ sont ensuite enveloppés dans du PHP, afin d'être utilisable par le serveur.\\
64+Cet "enveloppement" est fait dans le fichier \textit{???/lis-php/lis.cc}, où doivent être ajoutés toutes les classes et méthodes que l'on veut pouvoir utiliser de l'extérieur.\\
65+Toute la documentation sur cette technologie peut être trouvée ici :\\
66+\textit{http://devzone.zend.com/article/4486}\\
67+\textit{http://devzone.zend.com/article/1021-Extension-Writing-Part-I-Introduction-to-PHP-and-Zend}\\
68+\textit{http://devzone.zend.com/node/view/id/1022}\\
69+
70+\includegraphics[width=11cm,height=8cm]{diag.png}
71\ No newline at end of file
72
73=== modified file 'memolis/rdc/architecture.tex'
74--- memolis/rdc/architecture.tex 2010-04-24 06:58:26 +0000
75+++ memolis/rdc/architecture.tex 2010-05-02 21:36:25 +0000
76@@ -1,10 +1,12 @@
77-\section{Architecture} % (fold)
78- \subsection{Architecture globale} % (fold)
79- Client $\leftrightarrow$ Server $\leftrightarrow$ Site Web
80- % subsection architecture_globale (end)
81-
82- \input{architecture.serveur}
83-
84- \input{architecture.client}
85-
86-% section architecture (end)
87+\section{Architecture} % (fold)
88+ \subsection{Architecture globale} % (fold)
89+ Client $\leftrightarrow$ Server $\leftrightarrow$ Site Web
90+ % subsection architecture_globale (end)
91+
92+ \input{architecture.serveur}
93+
94+ \input{architecture.lisfs}
95+
96+ \input{architecture.client}
97+
98+% section architecture (end)
99
100=== added file 'memolis/rdc/diag.png'
101Binary files memolis/rdc/diag.png 1970-01-01 00:00:00 +0000 and memolis/rdc/diag.png 2010-05-02 21:36:25 +0000 differ

Subscribers

People subscribed via source and target branches