summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAche <ache@ache.one>2016-08-07 20:21:53 +0200
committerAche <ache@ache.one>2016-08-07 20:21:53 +0200
commitdfb7ec15b5f20ea7a5c47f625fb731ce148b184d (patch)
tree4f33e4d032fb4ffdb1db26ec969a062d138932d6
Init commit
-rw-r--r--Makefile9
-rwxr-xr-xarticle.c72
-rwxr-xr-xarticle/_liste1
-rwxr-xr-xarticle/article.txt12
-rwxr-xr-xarticle/des.txt11
-rwxr-xr-xarticle/duckduckgo.txt37
-rwxr-xr-xarticle/leC.txt87
-rwxr-xr-xarticle/quisuis.txt48
-rwxr-xr-xarticle/quisuisje.txt48
-rw-r--r--description1
-rwxr-xr-xdesign/.design.css.swpbin0 -> 12288 bytes
-rwxr-xr-xdesign/.sommaire.css.swpbin0 -> 12288 bytes
-rwxr-xr-xdesign/cloud.svg17
-rwxr-xr-xdesign/commentaire.css47
-rwxr-xr-xdesign/confirmation.css96
-rwxr-xr-xdesign/contenu.css174
-rwxr-xr-xdesign/design.css57
-rwxr-xr-xdesign/sommaire.css104
-rw-r--r--dev.c82
-rwxr-xr-xindex.html73
-rwxr-xr-xmain.c453
-rwxr-xr-xmain.h26
-rw-r--r--res/DuckDuckGo_Logo.pngbin0 -> 14784 bytes
-rw-r--r--res/DuckDuckGo_Logo.svg70
-rw-r--r--res/ache.icobin0 -> 1094 bytes
-rwxr-xr-xres/ache.svg28
-rwxr-xr-xres/acheVersionAlpha.xpibin0 -> 6406 bytes
-rwxr-xr-xres/emploi du temps TS3.pdfbin0 -> 1210901 bytes
-rwxr-xr-xres/gith.svg2
-rwxr-xr-xres/rss.svg8
-rwxr-xr-xres/tw.svg21
-rwxr-xr-xres/twit.svg17
-rwxr-xr-xres/wtf.svg28
-rwxr-xr-xres/zeroClickBox1.pngbin0 -> 33536 bytes
-rw-r--r--session_dev.vim458
35 files changed, 2087 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..14c1053
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,9 @@
+
+all: index.fcgi
+
+index.fcgi: main.c dev.c main.h
+ gcc main.c dev.c -lfcgi -o index.fcgi
+ pkill index.fcgi
+ ./index.fcgi &
+
+
diff --git a/article.c b/article.c
new file mode 100755
index 0000000..85de2ca
--- /dev/null
+++ b/article.c
@@ -0,0 +1,72 @@
+#include "main.h"
+
+int main(void)
+{
+ char article[50] = "...", *env;
+ char* tmp_h = NULL;
+ int num = 0, i;
+
+ env = getenv("QUERY_STRING");
+ if(!env || sscanf(env, "article=%d", &num) != 1)
+ num = 0;
+
+ if( env >= 0)
+ {
+ int nb_CR = 0, c;
+ FILE* fichier = fopen("article/_liste", "r");
+ if(!fichier)
+ erreur("Impossible de charger la page. Veuillez reessayer ult&eacute;rieurement.");
+
+ for(nb_CR=-1;nb_CR < num && fgets(article, 50, fichier);++nb_CR);
+
+ if(nb_CR != num)
+ erreur("Article introuvable");
+ for(tmp_h=article;*tmp_h;tmp_h++)
+ if( isspace(*tmp_h) )
+ *tmp_h = '\0';
+
+ }
+ char date[20], titre[50] = "Vive la lettre H !", ident[50];
+ int type = getinfo(article, titre, date, ident);
+ if( titre )
+ start(titre, "Site d'ache : Articles et présentation de mes projets");
+ else
+ start("Ache", "Site d'ache : Articles et présentation de mes projets");
+ { // LOG
+ char chemin[50] = "";
+ char command[100] = "";
+ time_t rawtime;
+ struct tm* UTCTime;
+ FILE* log;
+ time( &rawtime );
+ UTCTime = gmtime( &rawtime );
+ sprintf(chemin, "logs/%.2d.%.2d.%.2d.txt", UTCTime->tm_mday, UTCTime->tm_mon, UTCTime->tm_year);
+ log = fopen(chemin, "a");
+
+
+ if( log )
+ {
+ fprintf(log, "[%.2d:%.2d:%.2d]<%s-%s>%d\n", UTCTime->tm_hour, UTCTime->tm_min, UTCTime->tm_sec, getenv("REMOTE_ADDR"), getenv("HTTP_USER_AGENT"), num);
+ fclose(log);
+ }
+ else
+ {
+ printf("Voir %s", chemin);
+ perror( "Erreur :");
+ return 1;
+ }
+ if( getenv("REMOTE_ADDR") ) {
+ sprintf(command, "wget -q -O - ipinfo.io/%s | tr \"\\n\" \" \" | tr -s ' ' >> %s", getenv("REMOTE_ADDR"), chemin);
+ system(command);
+ sprintf(command, "echo ' ' >> %s",chemin);
+ system(command);
+ }
+ }
+ sideBar();
+ //sommaire();
+ contenu(article, num);
+ voirAussi();
+ end();
+ return 0;
+}
+
diff --git a/article/_liste b/article/_liste
new file mode 100755
index 0000000..f2a81a1
--- /dev/null
+++ b/article/_liste
@@ -0,0 +1 @@
+article/duckduckgo.txt
diff --git a/article/article.txt b/article/article.txt
new file mode 100755
index 0000000..16b6829
--- /dev/null
+++ b/article/article.txt
@@ -0,0 +1,12 @@
+Premier billet|06/09/11|svg|http://ache.nyan.at/perso/ache[200*200].svg
+<div id="intro">Voilà ! C'est fait quelques temps que je souhaitais remetre à jour ce site/blog/portofolio ... Désormais ça c'est fait.</div>
+
+<p>
+Je suis @che, un lycéen de 15 ans. Depuis quelques temps, l'informatique me passionne et notamment la programmation. J'ai débuté en apprenant le langage C et possède quelques connaissances en d'autres langages comme le C++ ou le Python. Ce site a pour but de présenter mes divers projets ainsi que mon activité sur le Web. Pour plus d'informations je vous invite à visiter l'article <strong>"<a href="index.cgi?article=1">Qui suis-je"</a></strong> ou encore <a style="color: #944040" href="/projet">mes réalisations</a>.
+</p>
+
+<h3>À propos de ce site</h3>
+
+<p>Voila, j'ai remis à jour tout le site. Pour ceux qui se souviennent de l'ancien site statique en HTML, vous pouvez oublier. Le site est désormais en C. Oui, oui en langage C grâce au <acronyme value="Common Gateway Interface">CGI</acronyme>. Le C me permet de manipuler le code de la page (un peu comme le PHP). Sinon, ce site utilise l'HTML5 et CSS3 et le JavaScript en Client-side. Tout le design est réalisé sans image. Le logo de cet article est en SVG.</p>
+
+
diff --git a/article/des.txt b/article/des.txt
new file mode 100755
index 0000000..60f902b
--- /dev/null
+++ b/article/des.txt
@@ -0,0 +1,11 @@
+Implémenté le DES|04/01/12|svg|http://ache.nyan.at/perso/ache[200*200].svg
+<div id="intro">Le DES, Data Encryption Standard est un algorithme de chiffrement symétrique, par bloc de 64bits. Il a été inventé par IBM, sous le nom de Lucifer, algo destiné à un usage civile mais qui fût utiliser par des entreprises également. La NSA (National Security Agency, organisme États-Uniens chargé de la sécurité des systèmes de communication entre-autres) l'a légèrement modifier afin de créer le DES en 1976, puis normalisé en 1977, il fût alors utilisé nottament comme le standard de chiffrement des organismes du gouvernement des États-Unis. Puis fût remplacer en 2001 par l'AES (Advanced Encryption Standard) car il n'était plus considérer comme suffisament sûr.</div>
+
+<p>Attention, cet article est technique. Et s'adresse à des personnes ayant déjà une expérience en programmation et en Algorithmique. Ici, j'utiliserais le C pour implémenté cet Algorithme, mais ici, je me consentrerais sûr la théorie et donc vous pourrez aisément l'implémenter dans un autre langage. Cet Article n'étudie pas le DES de manière Mathématique, ceci étant suffisament complexe pour constituer un autre article.
+</p>
+
+<h3>À propos de ce site</h3>
+
+<p>Voila, j'ai remis à jour tout le site. Pour ceux qui se souviennent de l'ancien site statique en HTML, vous pouvez oublier. Le site est désormais en C. Oui, oui en langage C grâce au <acronyme value="Common Gateway Interface">CGI</acronyme>. Le C me permet de manipuler le code de la page (un peu comme le PHP). Sinon, ce site utilise l'HTML5 et CSS3 et le JavaScript en Client-side. Tout le design est réalisé sans image. Le logo de cet article est en SVG.</p>
+
+
diff --git a/article/duckduckgo.txt b/article/duckduckgo.txt
new file mode 100755
index 0000000..827cbef
--- /dev/null
+++ b/article/duckduckgo.txt
@@ -0,0 +1,37 @@
+DuckDuckGo, Google en mieux ?|13/04/2012|svg|http://ache.one/res/DuckDuckGo_Logo.svg
+<div id="intro"> Depuis un certain temps déjà, Google ne se consacre plus entièrement à son moteur de recherche. En effet, la firme est déjà bien implentée dans la plupart des pays occidentaux où elle est le site le plus visité. Mais la concurrence, elle, s'est développée. Les moteurs de recherches tels que DuckDuckGo évoluent avec le temps, jusqu'à devenir plus pratique et ergonomique que Google. <p> DuckDuckGo est un moteur de recherche assez jeune mais qui a beaucoup d'avenir. En effet, il allie rapidité et fonctionnalités innovantes, tout en conservant la vie privée de l'utilisateur</p> </div>
+<h3>Bang ! </h3>
+
+<p> Vous connaissiez le "I'm Feeling Lucky" de Google ("J'ai de la chance" en français). DuckDuckGo lui propose une fonctionnalité similaire du nom de "I'm Feeling Ducky". En effet, il suffit de placer un point d'exclamation ("bang" en anglais) dans les termes de votre recherche afin d'arriver directement sur le premier résultat. Mais ce n'est pas tout, sinon !Bang n'aurait rien d'innovant. DuckDuckGo permet d'accéder simplement à certains sites environs une centaine. Par exemple, "!wfr" permet d'afficher directement la page d'accueil de Wipipédia en Français ("!w" pour la version anglaise). On peut remarquer notamment "!sdz" qui permet d'afficher directement la page d'accueil du site du zéro. Il existe pour tous les sites couramment utilisés comme FaceBook par exemple ("!fb").
+ Toujours pas convaincu ? !Bang peut également prendre des arguments dans ces !Bang afin de créer une véritable ligne de commande. On peut ainsi directement accéder à l'article DuckDuckGo de Wikipédia en français en tapants simplement "!wfr DuckDuckGo". Et cela fonctionne avec énormément de mot-clé comme "!ixquick", "!sp", "!g" (Google), "!answers", ...
+
+DuckDuckGo devient ainsi une véritable ligne de commande dans votre navigateur Web. De quoi satisfaire les adeptes de la console. D'ailleur de nombreux !Bang son adapté au developpement comme "!cpp" pour la man du C++ ou encore "!golang" pour une recherche dans la documentation de GO (le langage de programmation)
+
+Vous pouvez consulter la liste des <a style="color: #944040" href="https://duckduckgo.com/bang.html">!Bang</a> en tappant "!Bang" dans DuckDuckGo.</p>
+
+
+<h3>Zero Click Infobox</h3>
+<p>
+<img class="fr" src="http://ache.nyan.at/res/zeroClickBox1.png" alt="ZéroClickBox"/>
+ Mais qu'est-ce dont encore ce truc-là ? La Zéro Click Infobox, est une boite d'information apparaissant avant les premiers liens et qui essaye de vous apporter l'information que vous recherchez sans que vous ayez besoin de visiter un quelconque autre site. Pratique quand on est pressé. Elle vous propose également quelques liens utiles à tout début de recherche.
+ Afin d'apporter l'information, la Zero Click Infobox va s'appuyer sur d'autres sites comme Wikipédia. Elle permet aussi comme la <a href="https://fr.wikipedia.org/wiki/Calculatrice_Google">calculatrice de Google</a> d'effectuer des calculs directement dans le champ de recherche. Là où DuckDuckGo innove, c'est dans la précision. En effet, Google se plante assez minablement dans des calculs simples pour des raisons des précisions. On connait tous le célèbre <a href="http://www.google.com/search?&amp;q=399999999999999+-+399999999999998">"399 999 999 999 999 - 399 999 999 999 998 = 0"</a> de Google. Pour pallier ce problème de précision, DuckDuckGo va directement chercher sur WorlFramAlpha afin de faire les calculs les plus compliqués (Il traite cependant les plus simples).
+ Mais quitte à utiliser WolframAlpha ... autant utiliser toutes les fonctionnalités disponibles ... C'est ce que propose DuckDuckGo. Ainsi, on peut retrouver certaines informations très rapidement "mass of jupiter" par exemple ou encore "base64 Hello World" qui donne directement "SGVsbG8gV29ybGQ=". Ce système de conversion marche également pour le binaire, rot13, SHA, ... Plus d'info et de fonctionnalités sur leur page d'information <a style="color: #944040" href="http://duckduckgo.com/tech.html">tech Goodies</a>. Toutes les lister seraient trop long.
+</p>
+
+<h3>Respect de la vie privée</h3>
+<p>
+ Contrairement à Google, DuckDuckGo respecte la vie privée de ses utilisateurs. DuckDuckGo reproche à Google de personnaliser les recherches et de créer une sorte de bulle qui réduit les résultats en fonction de vos centres d'intérêts et donc ainsi réduire le nombre d'information auxquelles vous avez accès. DuckDuckGo lui propose donc les mêmes résultats pour tous les utilisateurs. Voir la page <a href="http://dontbubble.us/">dontbubble.us</a> pour plus d'informations.
+ Par ailleurs DuckDuckGo est totalement contre le tracking. Son slogan est d'ailleurs "Google tracks you. We don't." . D'ailleurs, DuckDuckGo n'utilise pas de Coockies (mis à part pour les préférences, mais il propose également une alternative aux Cookies par URL) et ne stocke aucun historique des requêtes. Leur campagne <a href="http://donttrack.us/">donttrack.us</a> essaye d'ailleurs d'être assez choquante.
+ Encore plus de respect de la vie privée ? DuckDuckGo propose la recherche anonyme par l'utilisation de TOR. Ou comment arriver à l'anonymat le plus totale. Vous pouvez également utiliser la version HTTPS qui utilise donc une couche de chiffrement SSL pour que tout soit chiffré du début à la fin.
+</p>
+<h3>Un Moteur de recherche proche de ses utilisateurs</h3>
+<p>
+ DuckDuckGo est le seul moteur de recherche que je connaisse aussi ouvert et aussi à l'écoute de ses utilisateurs. DuckDuckGo vous permets <a style="color: #944040" href="https://duckduckgo.com/newbang.html">d'ajouter vos propres !Bang</a> au site (s'il y a plusieurs demandes, ils l'ajouteront). C'est certainement comme cela qu'on peut retrouver "!sdz" comme !Bang.
+ Pour les utilisateurs trouvant le moteur trop gourmand, DuckDuckGo propose également une version lite de son moteur de recherche. Celui-ci est cependant basique mais l'initiative est preuve de la bonne volonté de DuckDuckGo de vouloir bien faire.
+ DuckDuckGo est aussi une petite communauté. En effet, en plus d'être totalement transparent sur leurs informations (code source, <a href="http://duckduckgo.com/traffic.html">info trafique</a>, ...), ils vous proposent même de participer à l'amélioration du Wiki, de la traduction de DuckDuckGo, au développement du site, ou tout simplement de discuter sur des améliorations à apporter sur #duckduckgo sur Freenode. <a href="https://dukgo.com/base/welcome">Voir la plateforme de développement</a></p>
+
+<p>DuckDuckGo est ainsi une véritable mine d'or. Proposant de nombreuses fonctionnalités innovantes. Il est de ce fait un des meilleurs moteurs de recherche du moment. Personnellement, je l'adopte. Je découvre de plus en plus de fonctionnalité en l'utilisant quotidiennement et ça fait vraiment plaisir de gagner chaque jour en ergonomie. DuckDuckGo vient récemment de dépasser le million de requêtes par jour.
+
+Consulter la page d'accueil de DuckDuckGo pour plus d'info sur l'utilisation du moteur de recherche.
+</p>
+
diff --git a/article/leC.txt b/article/leC.txt
new file mode 100755
index 0000000..d66df07
--- /dev/null
+++ b/article/leC.txt
@@ -0,0 +1,87 @@
+Les pratiques m&eacute;connues du C|12/04/12|svg|http://ache.nyan.at/perso/ache[200*200].svg
+<div id="intro">Le C est un langage proche de la machine, on parle de langage bas-niveau. Conçu dans les années 70, initalement pour le système d'exploitation Unix. C'est désormais l'un des langages les plus popululaire malgrès son certain âge.</div>
+
+<p>
+ Le C est très complet et a énormément de subtilités, même après des années d'apprentissage et de pratique, la maîtrise totale de C langage n'est pas assurée. De plus, c'est un langage qui évolue, tous les 10 ans environ, la norme change, la dernière à ce jour est la norme C11, sortie en décembre dernier. Chaque norme apporte son lot de pratiques nouvelles et celle-ci ne sont pas toujours suivit ou enseignées. Même les normes nouvelles ne sont pas toujours suivit par les compilateurs. Pourtant, certaines pratiques permises par le langage C sont très utiles et méconnue.
+Voyons rapidement quelques'une de ces pratiques.
+</p>
+
+<h3>Le C de base</h3>
+<div id="intro">Depuis le C K&R, ces pratiques n'ont pas beaucoup évoluées mais sont pourtant méconues.</div>
+<h4>L'Opérateur virgule</h4>
+
+<p> Très peu utilisé en pratique, mais peu s'avérer utile de temps à autre. La virgule est souvent utiliser pour constituer des listes de déclarations ou pour une liste de paramètre/argument à transmettre/récupérer à/par une fonction, mais ce n'est pas l'opérateur virgule. L'opérateur virgule lui permet d'associés 2 expressions. L'opérateur virgule s'entoure d'un couple d'expression, la première étant évalué comme de type void. Le résultat de l'opération est celui de la deuxième expression (même type donc).
+Exemple d'utilisation :
+ a = i*=5, b+5;
+Comme l'opération se lit de droite à gauche, le première expression est i*=5 et la deuxième est b+5. À la fin de l'opération, la variable b n'est pas modifiée, a prend la valeur de b + 5 et i est égale à 5 fois sa valeur initiale. L'utilité de l'opérateur virgule peu semblé limité car on aurait put décomposer cette instruction en 2 :
+ i *= 5;
+ a = b + 5;
+C'est pour cela que l'opérateur virgule n'est pas souvent utilisé. On la retrouve courrament cependant dans les for ou les conditions sur 2 lignes (afin de ne pas mettre de crochets).
+ for(int i = 0; b >= i; --b, ++i);
+ if( b == i)
+ b = 0,
+ i = 0;
+
+Ne soyez pas surpris si vous en croisé dans un code ;) .
+</p>
+
+<h4>Les opérateurs # et ##</h4>
+
+<p> Le croisillon et le double croisillon sont 2 opérateurs de processeurs rarement utilisés. Pourtant leurs applications sont multiples. L'opérateur # tout d'abord permet de transformer son opérande en chaine de caractère, c'est pratique pour débugger par exemple.
+ Exemple :
+ #define WTF_WITH( x ) puts( #x " %i - %s", x, __LINE__ )
+Comment ça marche ?
+Avant la compilation, le préprocesseur transphorme WTF_WITH( var ) par printf( "var" " %i - " __LINE__ "\n", var).
+Ici, on a 3 expressions littérales succéssives. Elles sont donc rassemblée en une "var %i - LaLigne\n".
+
+ Maintenant, l'opérateur ## lui concatène 2 marqueurs de position. Pas très explicite voyons tout de suite en pratique :
+ Exemple :
+ #define WTF_WITH( x, y ) x ##y // equivalent à x ## y ou x##y
+Ici, printf("%d", WTF_WITH( var, 2)); donnera après passage du préprocesseur, printf("%d", var2); . Là encore bien pratique pour le debuggage.
+
+Seulement les possibilités de ces 2 opérateurs ne se limites pas au debuggage de code ....
+</p>
+
+<h4>Les unions</h4>
+<p>
+ Vous connaissez les structures ? Et bien les unions, c'est une structure donc vous ne pouvez utiliser que un seul des champs à la fois. L'utilité ?
+ L'optimisation de la taille. En effet, la taille d'une union est égale à celle de son champ le plus lourd. Elle sert également à mieu organiser son code.
+ union ID {
+ char* name;
+ char ID;
+ };
+Ici, l'union ID fait sizeof(char*) bytes. On l'utilise comme une structure.
+Les Unions sont utilisées par exemple par la SDL ...
+</p>
+
+<h3>Et depuis C89 et C99 ?</h3>
+<p>
+ Les normes C89 et C99 ont ajoutés beaucoup de nouveautés. Très peux sont courrament utilisées, et certaines ne sont carrément pas implémentées par les compilateurs. On peut pensée aux nombres complexes par exemple.
+</p>
+<h4>L'initialisation des tableaux</h4>
+<p>
+Depuis C89, on peut initialiser un tableau avec des crochets. Comme ceci :
+ int tab[] = { [0] = 0, [1] = 1, [5] = 4};
+ Ainsi, on peut initialiser le 1000ième éléments dès sa déclaration.
+ On peut également utiliser cette syntaxe afin de créer un tableau de associatif (ou de correspondance).
+ C'est par exemple une méthode très pratique pour convertir une chaine en Base64.
+</p>
+<h4>L'initialisation des structures</h4>
+<p>Personellement, j'ai du mal à voir l'utilité. Depuis C99, il est possible d'initiliser un structure champ par champ.
+ struct coord pointA = {.x = 10, .y = 20};
+</p>
+<h3>Et depuis C11 ?</h3>
+
+<h3>En matière d'obfuscation</h3>
+
+<p>L'obsucation est le fait rendre un code illisible par un humain en complexifiant la lecture d'un code tout en ...</p>
+
+"Hj"[4];
+Les Trigraphes
+La conpressions des chaines littérales
+assert()
+sélection générique C11 http://www.siteduzero.com/forum-83-635220-p4-la-poo-et-le-c.html#r6283122
+stdbool.h
+stdint.h
+Les composés litéraux
+
diff --git a/article/quisuis.txt b/article/quisuis.txt
new file mode 100755
index 0000000..2a8639d
--- /dev/null
+++ b/article/quisuis.txt
@@ -0,0 +1,48 @@
+Qui suis-je|06/09/11|svg|http://ache.nyan.at/cubes_final.svg
+<div id="intro"> Je suis H., un lycéen de 15 ans passionné d'informatique et notamment de programmation. On me retrouve sur internet sous plusieurs pseudo @che, Ache, arobase-che ou tout simplement 'H'. On peut aussi me reconnaitre par mon avatar en pixel art ci-contre. </div>
+
+<p>Au niveau scolaire, J'ai 15ans et je suis en 1er S. D'ailleurs, depuis que cette année, je suis obligé de consacrer de moins en moins de temps à la programmation et de plus en plus au travail scolaire. Sinon j'aime lire, discuter, procrastiner :p et les sciences en générale (appliquées et théoriques). Je n'apprécie pas particulièrement les Jeux Videos (ma dernière console est une GameCube sortie en 2002) et ne regarde que rarement la télévision.
+</p>
+
+<h3>Tu programmes quoi ?</h3>
+<p>
+C'est généralement la première question que l'on me pose. Je programme durant mon temps libre, c'est à dire par passion. Je programme en divers langages (selon mes besoins) mais je maîtrise le langage C et j'ai de bonnes bases en C++ et Python. Je programme diverses choses tels que des scripts en Python pour me faciliter mes tâches quotidiennes (ex: Un script qui me prévient quand un nouvelle article est posté ou encore un autre qui depuis mon portable calcule ma moyenne et l'inscrit dans un fichier sur un serveur) ou en C dernièrement, un bot IRC qui s'occupe de récuperer des messages à ma place quand je suis absent, ou tout simplement le premier truc qui me passe par la tête comme un fractal par exemple... Vous pouvez retrouvez une partie de mes rélisations dans la section <a href="projet/">Prog</a>. Je suis particulièrement actif sur le SiteduZero, site spécialisé dans l'informatique, notamment sur le forum C ou je participe activement.</p>
+
+<h3>Niveau Professionel ?</h3>
+<p>
+J'ai déjà effectué 2 stages dans le secteur de l'informatique. 1 stage dans une entreprise de développement logiciel pendant 2 semaines et un autre dans un SAV d'un magasin spécialisé dans l'informatique (d'une durée d'une semaine). J'ai apprécié les 2 mais j'ai cependant préférer le premier.
+
+</p>
+<h3>Niveau personnel ?</h3>
+<p>Je n'aime généralement pas laisser trop d'informations sur internet. Je ne suis sur aucun réseau social mis-à-part Google+ (que j'utilise rarement sous un pseudonyme) je n'aime en général pas le fichage ; Je tiens à un minimun d'anonymat sur internet. Cependant, je participe couramment à des rencontres IRL, vous pouvez me retrouver aux <a href="http://www.siteduzero.com/forum-83-678142-p1-les-jeudis-du-sdz-nantes.html"> Jeudi du SdZ @ Nantes</a>.</p>
+
+<h3>Contact</h3>
+<p>
+Vous pouvez me contacter par mail à l'adresse: Ache [at] kegtux [dot] org
+Ou encore à l'adresse :
+Ou encore sur <a href="http://www.siteduzero.com/mp-273-224188.html">le Sdz par MP</a>.
+Je suis habituellement très disponible.
+</p>
+<h3>Autres informations</h3>
+<p>Je m'ammuse beaucoup à personaliser mon desktop, à créer des scripts, des images vectorielles, à bidouiller ma tour, ... </p>
+
+<h5>ScreenShoot</h5>
+<p>
+Voici le Desk de mon OS principale. Un Ubuntu modifié utilisant awesome wm, tilda, ...
+<a href="http://img11.hostingpics.net/pics/259903Capture.png"> <img src="http://img11.hostingpics.net/pics/259903Capture.png" width="160" height="100"></a><a href="http://img4.hostingpics.net/pics/953963Capture2.png"> <img src="http://img4.hostingpics.net/pics/953963Capture2.png" width="160" height="100"></a>
+
+Le Desk de mon Kubuntu un peu plus dans le style glossy mais très sympa :
+<a href="http://img4.hostingpics.net/pics/796948capturedcran.png"> <img src="http://img4.hostingpics.net/pics/796948capturedcran.png" width="160" height="100"></a>
+</p>
+<h5>Ma config</h5>
+<p>Je l'ai monté à la suite d'un pari que j'ai gagné :D . J'en suis plutôt fier.</p>
+<div id="intro"><ul>
+<li><strong>Processeur</strong>: AMD Phenom II X4 920 2.8GHz</li>
+<li><strong>Carte Mère</strong>: Asus M4A89TD PRO/USB3 </li>
+<li><strong>RAM</strong>: 4Go DDR3</li>
+<li><strong>DD</strong>: 1To en SATA6</li>
+<li><strong>Carte Graphique</strong>: HD radeon 5570</li></p>
+<ul></div>
+<div id="conclusion">En gros, une configuration qui va certainement durer encore quelques années ...</div>
+
+
diff --git a/article/quisuisje.txt b/article/quisuisje.txt
new file mode 100755
index 0000000..2a8639d
--- /dev/null
+++ b/article/quisuisje.txt
@@ -0,0 +1,48 @@
+Qui suis-je|06/09/11|svg|http://ache.nyan.at/cubes_final.svg
+<div id="intro"> Je suis H., un lycéen de 15 ans passionné d'informatique et notamment de programmation. On me retrouve sur internet sous plusieurs pseudo @che, Ache, arobase-che ou tout simplement 'H'. On peut aussi me reconnaitre par mon avatar en pixel art ci-contre. </div>
+
+<p>Au niveau scolaire, J'ai 15ans et je suis en 1er S. D'ailleurs, depuis que cette année, je suis obligé de consacrer de moins en moins de temps à la programmation et de plus en plus au travail scolaire. Sinon j'aime lire, discuter, procrastiner :p et les sciences en générale (appliquées et théoriques). Je n'apprécie pas particulièrement les Jeux Videos (ma dernière console est une GameCube sortie en 2002) et ne regarde que rarement la télévision.
+</p>
+
+<h3>Tu programmes quoi ?</h3>
+<p>
+C'est généralement la première question que l'on me pose. Je programme durant mon temps libre, c'est à dire par passion. Je programme en divers langages (selon mes besoins) mais je maîtrise le langage C et j'ai de bonnes bases en C++ et Python. Je programme diverses choses tels que des scripts en Python pour me faciliter mes tâches quotidiennes (ex: Un script qui me prévient quand un nouvelle article est posté ou encore un autre qui depuis mon portable calcule ma moyenne et l'inscrit dans un fichier sur un serveur) ou en C dernièrement, un bot IRC qui s'occupe de récuperer des messages à ma place quand je suis absent, ou tout simplement le premier truc qui me passe par la tête comme un fractal par exemple... Vous pouvez retrouvez une partie de mes rélisations dans la section <a href="projet/">Prog</a>. Je suis particulièrement actif sur le SiteduZero, site spécialisé dans l'informatique, notamment sur le forum C ou je participe activement.</p>
+
+<h3>Niveau Professionel ?</h3>
+<p>
+J'ai déjà effectué 2 stages dans le secteur de l'informatique. 1 stage dans une entreprise de développement logiciel pendant 2 semaines et un autre dans un SAV d'un magasin spécialisé dans l'informatique (d'une durée d'une semaine). J'ai apprécié les 2 mais j'ai cependant préférer le premier.
+
+</p>
+<h3>Niveau personnel ?</h3>
+<p>Je n'aime généralement pas laisser trop d'informations sur internet. Je ne suis sur aucun réseau social mis-à-part Google+ (que j'utilise rarement sous un pseudonyme) je n'aime en général pas le fichage ; Je tiens à un minimun d'anonymat sur internet. Cependant, je participe couramment à des rencontres IRL, vous pouvez me retrouver aux <a href="http://www.siteduzero.com/forum-83-678142-p1-les-jeudis-du-sdz-nantes.html"> Jeudi du SdZ @ Nantes</a>.</p>
+
+<h3>Contact</h3>
+<p>
+Vous pouvez me contacter par mail à l'adresse: Ache [at] kegtux [dot] org
+Ou encore à l'adresse :
+Ou encore sur <a href="http://www.siteduzero.com/mp-273-224188.html">le Sdz par MP</a>.
+Je suis habituellement très disponible.
+</p>
+<h3>Autres informations</h3>
+<p>Je m'ammuse beaucoup à personaliser mon desktop, à créer des scripts, des images vectorielles, à bidouiller ma tour, ... </p>
+
+<h5>ScreenShoot</h5>
+<p>
+Voici le Desk de mon OS principale. Un Ubuntu modifié utilisant awesome wm, tilda, ...
+<a href="http://img11.hostingpics.net/pics/259903Capture.png"> <img src="http://img11.hostingpics.net/pics/259903Capture.png" width="160" height="100"></a><a href="http://img4.hostingpics.net/pics/953963Capture2.png"> <img src="http://img4.hostingpics.net/pics/953963Capture2.png" width="160" height="100"></a>
+
+Le Desk de mon Kubuntu un peu plus dans le style glossy mais très sympa :
+<a href="http://img4.hostingpics.net/pics/796948capturedcran.png"> <img src="http://img4.hostingpics.net/pics/796948capturedcran.png" width="160" height="100"></a>
+</p>
+<h5>Ma config</h5>
+<p>Je l'ai monté à la suite d'un pari que j'ai gagné :D . J'en suis plutôt fier.</p>
+<div id="intro"><ul>
+<li><strong>Processeur</strong>: AMD Phenom II X4 920 2.8GHz</li>
+<li><strong>Carte Mère</strong>: Asus M4A89TD PRO/USB3 </li>
+<li><strong>RAM</strong>: 4Go DDR3</li>
+<li><strong>DD</strong>: 1To en SATA6</li>
+<li><strong>Carte Graphique</strong>: HD radeon 5570</li></p>
+<ul></div>
+<div id="conclusion">En gros, une configuration qui va certainement durer encore quelques années ...</div>
+
+
diff --git a/description b/description
new file mode 100644
index 0000000..498b267
--- /dev/null
+++ b/description
@@ -0,0 +1 @@
+Unnamed repository; edit this file 'description' to name the repository.
diff --git a/design/.design.css.swp b/design/.design.css.swp
new file mode 100755
index 0000000..89e9e74
--- /dev/null
+++ b/design/.design.css.swp
Binary files differ
diff --git a/design/.sommaire.css.swp b/design/.sommaire.css.swp
new file mode 100755
index 0000000..7a61c4d
--- /dev/null
+++ b/design/.sommaire.css.swp
Binary files differ
diff --git a/design/cloud.svg b/design/cloud.svg
new file mode 100755
index 0000000..5bace14
--- /dev/null
+++ b/design/cloud.svg
@@ -0,0 +1,17 @@
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1169 160" xml:space="preserve">
+
+ <title>SVG Animation - A New Cloud</title>
+ <g id="screen" transform="translate(0, 0)">
+ <linearGradient id="degrade" gradientUnits="userSpaceOnUse" x1="585" x2="585" y1="0" y2="175">
+ <stop offset="0%" stop-color="#FFF" />
+ <stop offset="100%" stop-color="#888" />
+ </linearGradient>
+ <path d="M0,75 Q30,90 52,118Q61,119 68,124Q90,95 118,90Q140,51 188,68Q265,-20 340,75Q375,80 375,110Q395,115 408,128Q440,110 470,122Q535,64 608,113Q620,112 630,110Q650,70 700,88Q780,30 853,97L867,100Q879,60 917,68Q943,20 988,45Q1066,-20 1140,55Q1160,50 1170,75L1170,175L0,175L0,175"
+ fill="none" stroke="grey" stroke-width="1" style="fill:url(#degrade)" />
+ </g>
+
+</svg>
+
diff --git a/design/commentaire.css b/design/commentaire.css
new file mode 100755
index 0000000..5c8bdec
--- /dev/null
+++ b/design/commentaire.css
@@ -0,0 +1,47 @@
+#commentaires
+{
+ background-color: #c9cbce;
+ -moz-border-radius: 10px;
+ -webkit-border-radius: 10px;
+ border-radius: 10px;
+ width: 90%; height: auto;
+ margin: auto;
+ padding-bottom: 10px;
+}
+#c_intro
+{
+ font-style: oblique;
+ padding-top: 10px;
+ line-height: 250%;
+ padding-left: 25px;
+ text-indent: 10px;
+ font-size: 0.95em;
+ color: #944040;
+}
+#c_contenu
+{
+ text-indent: 100px;
+ font-size: 0.67em;
+ width: 70%; height: auto;
+ padding-left: 15px;
+}
+#c_contenu:after
+{
+ color: #FFF;
+ content: "_______________";
+}
+#c_post
+{
+ width: 70%; height: auto;
+ padding-left: 15px;
+}
+#c_post p
+{
+ font-size: 0.7em;
+ padding-left: 25px;
+
+}
+#c_titre
+{
+ color: #6b633e;
+}
diff --git a/design/confirmation.css b/design/confirmation.css
new file mode 100755
index 0000000..d7e1f97
--- /dev/null
+++ b/design/confirmation.css
@@ -0,0 +1,96 @@
+#boutons
+{
+ float: right;
+ margin: 2px 2px 2px 2px;
+}
+#bouton
+{
+ position: relative;
+ width: 20px; height: 16px;
+ background-color: #819fbc;
+ border: 1px solid #4a6a8b;
+ -moz-border-radius: 2px;
+}
+#bouton:hover
+{
+ -moz-box-shadow: 0px 0px 5px rgba(0,0,0,0.5);
+ -webkit-box-shadow: 0px 0px 5px rgba(0,0,0,0.5);
+ box-shadow: 0px 0px 5px rgba(0,0,0,0.5);
+}
+#reduire
+{
+ position: relative;
+ margin: 1px 0px 0px 1px;
+ width: 18px; height: 14px;
+ background-color: #5a81a8;
+}
+#reduire div
+{
+ position: absolute;
+ margin: 9px 0px 0px 2px;
+ width: 14px; height: 2px;
+ background-color: #dfe5ed;
+ -moz-border-radius: 1px;
+}
+#close
+{
+ position: relative;
+ margin: 1px 0px 0px 1px;
+ width: 18px; height: 14px;
+ background-color: #5a81a8;
+}
+#close div
+{
+ border: 1px solid #486480;
+ -moz-border-radius: 1px;
+ -webkit-border-radius: 1px;
+ background-color: #dfe5ed;
+ position: absolute;
+ margin: 5px 0px 0px 1px;
+ width: 14px; height: 2px;
+}
+#close div:first-child
+{
+ -webkit-transform: rotate(45deg);
+ -moz-transform: rotate(45deg);
+ transform: rotate(45deg);
+}
+#close div:last-child
+{
+ -webkit-transform: rotate(-45deg);
+ -moz-transform: rotate(-45deg);
+ transform: rotate(-45deg);
+}
+#confirmation
+{
+ margin: auto;
+ width: 600px; height: 250px;
+ background-color: #517aa3;
+ border: 1px solid #8ba7c2;
+ -moz-border-radius: 10px;
+}
+#confirmation_mes
+{
+ width: 594px; height: 222px;
+ border: 1px solid #395572;
+ background-color: #e7e7e7;
+ margin: 23px 0px 0px 2px;
+ -moz-border-radius: 10px;
+}
+/*
+ <div id="confirmation">
+ <div id="boutons">
+ <div id="bouton">
+ <div id="close"><div></div><div></div></div>
+ </div>
+ </div>
+ <div id="boutons">
+ <div id="bouton">
+ <div id="reduire"><div></div></div>
+ </div>
+ </div>
+ <div id="confirmation_mes"><br/>
+ Voulez confirmez l'envoye de ce commentaire ?
+ </div>
+ </div>
+*/
diff --git a/design/contenu.css b/design/contenu.css
new file mode 100755
index 0000000..38695a7
--- /dev/null
+++ b/design/contenu.css
@@ -0,0 +1,174 @@
+
+#article {
+ border-top: 3px solid #eaeaea;
+ border-top: 3px solid rgba(51, 51, 51, 0.1);
+ padding: 1.6em 0;
+ border-color: #eaeaea !important; /* Make sure color schemes don't affect to print */
+ margin-left: 10px;
+}
+#contenu_top
+{
+ font-size: 1.5em;
+ font-weight: bold;
+ font-family: OpenSymbol, "Vemana2000", serif;
+ text-shadow: 0 2px 0 #FFF;
+ line-height: 250%;
+ color: #121311;
+}
+#info_article {
+ margin-right: 2%;
+ margin-left: 3%;
+ text-indent: 3%;
+ float: left;
+ width: 95%;
+}
+#autres_articles a
+{
+ display: inline-block;
+ text-indent: 30px;
+ text-decoration: none;
+ font-style: italic;
+ font-size: 0.9em;
+ outline: none;
+ color: #3322F0;
+}
+#autres_articles a:hover
+{
+ color: #222299;
+}
+#autres_articles:before {
+ content: "______________________________";
+}
+#autres_articles a:before {
+ //content: ">_";
+}
+#autres_articles h4
+{
+ text-indent: 10px;
+ font-style: italic;
+}
+#autres_articles
+{
+ float: left;
+
+ width: 100%;
+ top: 0px;
+ text-align: center;
+ margin-bottom: 20px;
+}
+#contenu
+{
+ margin-right: 2%;
+ margin-left: 3%;
+ text-indent: 3%;
+ float: left;
+ width: 83%;
+ background: #FFF;
+ padding-right:0%;
+ padding-left:0%;
+ padding: 1.6em 1.6em;
+
+
+}
+@media only screen and (min-width: 768px) {
+ #autres_articles
+ {
+ float: none;
+ width: auto;
+ background: #f1f1f1;
+ }
+ #contenu {
+ float: none;
+ margin-right: 7%;
+ margin-left: 390px;
+ width: auto;
+
+ font-size:1.3em;
+ padding-right:5%;
+ padding-left:5%;
+
+ border: 1px solid #eaeaea;
+ border: 1px solid rgba(51, 51, 51, 0.1);
+ border-color: #eaeaea !important;
+ margin-top: 50px;
+ }
+ #info_article {
+ padding-left: 290px;
+ }
+}
+#contenu_
+{
+ height: auto;
+}
+#contenu_ p
+{
+ font-size: 1em;
+}
+#contenu_ h3
+{
+ color: #6b633e;
+}
+@media only screen and (min-width: 768px) {
+#contenu_ h3 {font-size: 1.4em;}
+#contenu_top2 {font-size: 1.5em;}
+}
+#intro
+{
+ margin-top: 2.5%;
+ padding-left: 6%;
+ text-indent: 5%;
+ font-size: 0.65em;
+ color: #944040;
+}
+#intro:first-letter
+{
+ font-size: 1.3em;
+ color: #bf5353;
+ font-weight: bold;
+}
+#conclusion
+{
+ margin-top: 2.5%;
+ padding-left: 6%;
+ text-indent: 5%;
+ font-size: 0.9em;
+ color: #575883;
+}
+#contenu_ p
+{
+ text-indent: 6%;
+}
+#contenu_ a
+{
+ text-decoration: none;
+ outline: none;
+}
+#contenu_ a:hover
+{
+ font-style: italic;
+}
+#foot
+{
+
+}
+#foot_cloud
+{
+ background-image: url(../cloud.svg);
+ position: absolute;
+ background-position:bottom left;
+ width: 100%; height: 150px;
+ position: absolute;
+ margin: 45px 0px 0px 0px;
+}
+/*
+ <div id="contenu">
+ <div id="Titre"/>
+ <div id="contenu_top"><div id="contenu_top2"></div>
+ </div>
+ <div id="contenu_"><br/>
+ Voulez confirmez l'envoye de ce commentaire ?
+ </div>
+ <div id="commentaires">
+ </div>
+ </div>
+*/
diff --git a/design/design.css b/design/design.css
new file mode 100755
index 0000000..9179437
--- /dev/null
+++ b/design/design.css
@@ -0,0 +1,57 @@
+@import url("contenu.css");
+@import url("sommaire.css");
+@import url("confirmation.css");
+@import url("commentaire.css");
+
+@font-face {
+ font-family: 'Noto Serif';
+ font-style: normal;
+ font-weight: 400;
+ src: local('Noto Serif'), local('NotoSerif'), url(../font/notoserif.woff) format('woff') ;
+}
+@font-face {
+ font-family: 'Noto Serif';
+ font-style: normal;
+ font-weight: 700;
+ src: local('Noto Serif Bold'), local('NotoSerif-Bold'), url(../font/notoserifbold.woff) format('woff') ;
+}
+@font-face {
+ font-family: 'Noto Serif';
+ font-style: italic;
+ font-weight: 400;
+ src: local('Noto Serif Italic'), local('NotoSerif-Italic'), url(../font/notoserifitalic.woff) format('woff') ;
+}
+
+
+
+body
+{
+ font-family: 'Noto Serif', Verdana, sans-serif;
+ width: 100%;
+ margin: 0px;
+ background: #f1f1f1;
+ color: #333333;
+
+}
+#body_c
+{
+ background-repeat:no-repeat;
+ background-position:top left;
+}
+.fr
+{
+ float: right;
+}
+.fl
+{
+ float: left;
+}
+ache {
+ margin-left: auto;
+ margin-right: auto;
+}
+img {
+ display: block;
+ margin: 0 auto;
+ max-width: 100%;
+}
diff --git a/design/sommaire.css b/design/sommaire.css
new file mode 100755
index 0000000..50fbdfe
--- /dev/null
+++ b/design/sommaire.css
@@ -0,0 +1,104 @@
+
+#sommaire
+{
+ height: 40px;
+ width: auto;
+ text-align: center;
+}
+
+@media only screen and (min-width: 768px) {
+ #sommaire {
+ padding-left: 290px;
+ }
+
+}
+.sommaire_blien
+{
+ display: inline-block;
+ width: 33%;
+ text-align: left;
+ color: #121311;
+ font-size: 0.8em;
+ font-weight: bold;
+ font-family: monospace, serif;
+ text-shadow: 0 1px 0 #DDD;
+ color: #888888;
+}
+.sommaire_blien:before {
+ content: "/";
+}
+.sommaire_blien a
+{
+ color: #888888;
+ outline: none;
+ text-decoration: none;
+}
+.sommaire_blien a:hover
+{
+ color: #BBAABB;
+}
+
+ #side-bar{
+ text-align:center;
+ display: block;
+ /*background: none repeat scroll 0% 0% #F5F6F5;*/
+ position:relative;
+ width:100%;
+ height:auto;
+ text-rendering: optimizelegibility;
+ box-sizing: border-box;
+ background:#F5F6F5;
+ padding-top: 10px;
+ }
+
+@media screen and (min-width: 768px) {
+ #side-bar {
+ position: fixed;
+ top: 0px;
+ bottom: 0px;
+ left: 0px;
+ height: 100%;
+ width: 290px;
+ text-align: center;
+ /*background: none repeat scroll 0% 0% #F5F6F5;*/
+ background:#FFF;
+ border-right: 3px solid rgba(51, 51, 51, 0.1);
+
+ }
+}
+#side-bar h1 {
+ font-family: monospace, "Helvetica Neue", Arial, sans-serif;
+ /*font-family: "PT Sans","Helvetica Neue",Helvetica,Arial,sans-serif;
+*/
+}
+#desc {
+ font-size: 90%;
+ margin-top: 15px;
+}
+#about {
+ font-size: 0.8em;
+ color: #666;
+
+}
+.about_bar {
+ display: inline-block;
+ width: 20%;
+ text-align: left;
+ color: #121311;
+ font-size: 0.8em;
+ font-weight: bold;
+ font-family: monospace, serif;
+ text-shadow: 0 1px 0 #DDD;
+ margin:auto;
+}
+.side-bar svg { margin: 0 auto;
+ display:block;
+}
+
+/*
+ <div id="sommaire">
+ <div id="sommaire_blien">Accueil</div>
+ <div id="sommaire_blien">Blog</div>
+ <div id="sommaire_blien">Liens</div>
+ </div>
+*/
diff --git a/dev.c b/dev.c
new file mode 100644
index 0000000..2b96e2c
--- /dev/null
+++ b/dev.c
@@ -0,0 +1,82 @@
+#include <fcgiapp.h>
+#include <stdlib.h>
+#include "main.h"
+
+
+#define printf(...) FCGX_FPrintF(req->out, __VA_ARGS__)
+#define putsF(b) FCGX_FPrintF(req.out,"%s\n", b)
+#define get_param(KEY) FCGX_GetParam(KEY, req->envp)
+
+
+void handle_req(FCGX_Request *req) {
+ char *value;
+ printf("Content-Type: text/html\r\n\r\n");
+ /*
+ if ((value = get_param("req_METHOD")) != NULL) {
+ printf("%s ", value);
+ }
+ if ((value = get_param("req_URI")) != NULL) {
+ printf("%s", value);
+ }
+ if ((value = get_param("QUERY_STRING")) != NULL) {
+ printf("?%s", value);
+ }
+ if ((value = get_param("SERVER_PROTOCOL")) != NULL) {
+ printf(" %s", value);
+ }*/
+ printf("\n");
+}
+int main(void) {
+ int count = 0;
+ char article[50] = "...", *env;
+ char* tmp_h = NULL;
+ int num = 0, i;
+ int sock;
+
+
+ FCGX_Request req;
+ FCGX_Init();
+ sock = FCGX_OpenSocket(":1337", 5);
+ FCGX_InitRequest(&req, sock, 0);
+
+ while(FCGX_Accept_r(&req) >= 0 ) {
+ handle_req(&req);
+ env = FCGX_GetParam("QUERY_STRING",req.envp);
+ if(!env || sscanf(env, "article=%d", &num) != 1)
+ num = 0;
+
+ if( num >= 0)
+ {
+ int nb_CR = 0, c;
+ FILE* fichier = fopen("article/_liste", "r");
+ if(!fichier)
+ erreur("Impossible de charger la page. Veuillez reessayer ult&eacute;rieurement.", &req);
+
+ for(nb_CR=-1;nb_CR < num && fgets(article, 50, fichier);++nb_CR);
+
+ if(nb_CR != num)
+ erreur("Article introuvable", &req);
+ for(tmp_h=article;*tmp_h;tmp_h++)
+ if( isspace(*tmp_h) )
+ *tmp_h = '\0';
+ char date[20], titre[50] = "Vive la lettre H !", ident[50];
+ int type = getinfo(article, titre, date, ident);
+ if( titre )
+ start(titre, "Site d'ache : Articles et présentation de mes projets", &req);
+ else
+ start("Ache", "Site d'ache : Articles et présentation de mes projets", &req);
+ }
+
+
+ ++count;
+ puts("Try");
+ fflush(NULL);
+ sideBar(&req);
+ //sommaire();
+ slideContenu(article, num,&req);
+ voirAussi(&req);
+ end(&req);
+ FCGX_Finish_r(&req);
+ }
+ return 0;
+}
diff --git a/index.html b/index.html
new file mode 100755
index 0000000..a61a49f
--- /dev/null
+++ b/index.html
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html> <head> <meta charset="utf-8" /><title>DuckDuckGo, Google en mieux ?</title><meta name="viewport" content="width=device-width, initial-scale=1" /><link rel="canonical" href="http://ache.one/"/><link rel="shortcut icon" type="image/svg" href="/res/ache.ico" /><link rel="stylesheet" type="text/css" title="Design" href="design/design.css" /><style>@import url("design/design.css");</style><meta name= "description" content="Site d'ache : Articles et présentation de mes projets" /></head><body>
+<aside id="side-bar">
+<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" id="svg">
+ <g transform="scale(0.125)">
+ <rect width="100" height="100" x="50" y="300" id="rect1" style="fill:#000" />
+ <rect width="100" height="100" x="50" y="400" id="rect2" style="fill:#000" />
+ <rect width="100" height="100" x="50" y="500" id="rect3" style="fill:#000" />
+ <rect width="100" height="100" x="50" y="600" id="rect4" style="fill:#000" />
+ <rect width="100" height="100" x="150" y="600" id="rect5" style="fill:#000" />
+ <rect width="100" height="100" x="250" y="600" id="rect6" style="fill:#000" />
+ <rect width="100" height="100" x="350" y="600" id="rect7" style="fill:#000" />
+ <rect width="100" height="100" x="450" y="600" id="rect8" style="fill:#000" />
+ <rect width="100" height="100" x="550" y="600" id="rect9" style="fill:#000" />
+ <rect width="100" height="100" x="650" y="600" id="rect10" style="fill:#000" />
+ <rect width="100" height="100" x="650" y="500" id="rect11" style="fill:#000" />
+ <rect width="100" height="100" x="650" y="400" id="rect12" style="fill:#000" />
+ <rect width="100" height="100" x="650" y="300" id="rect13" style="fill:#000" />
+ <rect width="100" height="100" x="150" y="700" id="rect14" style="fill:#000" />
+ <rect width="100" height="100" x="550" y="700" id="rect15" style="fill:#000" />
+ <rect width="100" height="100" x="250" y="300" id="rect16" style="fill:#000" />
+ <rect width="100" height="100" x="450" y="300" id="rect17" style="fill:#000" />
+ <rect width="100" height="100" x="150" y="200" id="rect18" style="fill:#000" />
+ <rect width="100" height="100" x="550" y="200" id="rect19" style="fill:#000" />
+ <rect width="100" height="100" x="250" y="100" id="rect20" style="fill:#000" />
+ <rect width="100" height="100" x="450" y="100" id="rect21" style="fill:#000" />
+ <rect width="100" height="100" x="350" y="000" id="rect22" style="fill:#000" />
+ </g>
+</svg>
+<h2> Ache </h2>
+<div id="desc"> Étudiant en Math-Info <br /> <span id="about">GNU\Linux, C, C++, Python, Math, ... <br /> </span></div><nav> <ul> <li class="about_bar">
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20">
+<g transform="translate(-16,-16)scale(0.053)">
+<path d="
+M 630, 425
+A 195, 195 0 0 1 331, 600
+A 142, 142 0 0 0 428, 570
+A 70, 70 0 0 1 370, 523
+A 70, 70 0 0 0 401, 521
+A 70, 70 0 0 1 344, 455
+A 70, 70 0 0 0 372, 460
+A 70, 70 0 0 1 354, 370
+A 195, 195 0 0 0 495, 442
+A 67, 67 0 0 1 611, 380
+A 117, 117 0 0 0 654, 363
+A 65, 65 0 0 1 623, 401
+A 117, 117 0 0 0 662, 390
+A 65, 65 0 0 1 630, 425
+Z"
+style="fill:#777;"/>
+</g>
+</svg>
+</li><li class="about_bar">
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20">
+<g transform="scale(0.02)"><path d="M0 500.288q0 129.32 62.952 234.728 62.952 108.824 170.8 171.288t234.728 62.464q127.368 0 235.704 -62.464 108.336 -62.952 170.556 -171.044t62.22 -234.972q0 -128.832 -62.464 -235.704 -62.952 -108.336 -171.044 -170.556t-234.972 -62.22q-129.32 0 -234.728 62.952 -108.824 62.952 -171.288 170.8t-62.464 234.728zm78.08 0q0 -78.08 30.744 -150.792t83.936 -125.416q53.192 -53.192 125.416 -83.692t150.304 -30.5 150.792 30.5 125.904 83.692q52.704 52.704 83.204 125.416t30.5 150.792q0 83.936 -34.404 160.064t-96.624 131.516 -142.252 80.276v-137.616q0 -51.24 -41.968 -80.032 102.968 -9.272 150.548 -52.216t47.58 -136.152q0 -72.224 -44.408 -121.512 8.784 -26.352 8.784 -50.752 0 -36.112 -16.592 -66.368 -32.696 0 -58.56 10.736t-63.44 37.088q-45.384 -10.248 -93.696 -10.248 -55.144 0 -102.968 11.224 -36.6 -26.84 -63.196 -37.82t-60.268 -10.98q-16.104 30.744 -16.104 66.368 0 25.376 8.296 51.24 -44.408 47.824 -44.408 121.024 0 93.208 47.336 135.664t151.768 52.216q-27.816 18.544 -38.552 54.168 -23.912 8.296 -49.776 8.296 -19.52 0 -33.672 -8.784 -4.392 -2.44 -8.052 -5.124t-7.564 -6.588 -6.344 -6.1 -6.344 -7.564 -5.124 -6.832 -5.856 -7.808 -5.124 -6.832q-22.936 -30.256 -54.656 -30.256 -17.08 0 -17.08 7.32 0 2.928 8.296 9.76 15.616 13.664 16.592 14.64 11.712 9.272 13.176 11.712 14.152 17.568 21.472 38.552 27.328 61 93.696 61 10.736 0 41.968 -4.88v103.456q-80.032 -24.888 -142.252 -80.276t-96.624 -131.516 -34.404 -160.064z" style="fill: #777;"/></g></svg>
+</li><li class="about_bar">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="20" height="20">
+<g transform="scale(0.04)">
+ <path fill="#777" d="M119.9,336.1C89.1,336.1,64,361.2,64,391.9c0,30.8,25.1,55.6,55.9,55.6c30.9,0,55.9-24.9,55.9-55.6 C175.8,361.2,150.8,336.1,119.9,336.1z"/>
+ <path fill="#777" d="M64,192v79.9c48,0,94.1,14.199,128,48.1s48,79.9,48,128h80C320,308.1,204,192,64,192z"/>
+ <path fill="#777" d="M64,64v79.9c171,0,303.9,133,303.9,304.1H448C448,236.3,276,64,64,64z"/>
+</g>
+</svg>
+</li></ul> </nav><nav><ul><li class="sommaire_blien"><a href="http://ache.one">Accueil</a></li><li class="sommaire_blien"><a href="http://projet.ache.one/"><s>Projets</s></a></li><li class="sommaire_blien"><a href="http://ache.one/contact/">Contact</a></li></ul></nav></aside>
+<article id="contenu" role="article" class="post hentry clearfix"><object type="image/svg+xml" data="http://ache.one/res/DuckDuckGo_Logo.svg" style="float:left;width:100px;height:100px;"><img src="http://ache.one/res/DuckDuckGo_Logo.png" alt="Logo Article"/><p>http://ache.one/res/DuckDuckGo_Logo.svg</p></object><header><h1 id="contenu_top2">DuckDuckGo, Google en mieux ?</h1><p>Post&eacute; le <time datetime="2012-04-13">13/04/2012</time></p></header>
+<section class="entry-content clearfix">
+<div id="intro"><br />Depuis un certain temps d&eacute;j&agrave;, Google ne se consacre plus enti&egrave;rement &agrave; son moteur de recherche. En effet, la firme est d&eacute;j&agrave; bien implent&eacute;e dans la plupart des pays occidentaux o&ugrave; elle est le site le plus visit&eacute;. Mais la concurrence, elle, s'est d&eacute;velopp&eacute;e. Les moteurs de recherches tels que DuckDuckGo &eacute;voluent avec le temps, jusqu'&agrave; devenir plus pratique et ergonomique que Google.<br /><p> DuckDuckGo est un moteur de recherche assez jeune mais qui a beaucoup d'avenir. En effet, il allie rapidit&eacute; et fonctionnalit&eacute;s innovantes, tout en conservant la vie priv&eacute;e de l'utilisateur</p><br /></div>
+</section>
+<section class="entry-content clearfix">
+</section>
+</article>
+<div id="autres_articles"><h4>Voir aussi :</h4><div><a href="index.cgi?article=0">DuckDuckGo, Google en mieux ?</a></div></div> <div id="foot"></div>
+</body></html>
diff --git a/main.c b/main.c
new file mode 100755
index 0000000..366ac50
--- /dev/null
+++ b/main.c
@@ -0,0 +1,453 @@
+#include "main.h"
+
+
+char** allocRegex(const char* str_req,const char* str_regex, int nbExp)
+{
+ int err;
+ regex_t preg;
+
+ err = regcomp (&preg, str_regex, REG_EXTENDED);
+ if (err == 0)
+ {
+ int match;
+ size_t nmatch = 0;
+ regmatch_t *pmatch = NULL;
+ nmatch = preg.re_nsub;
+ pmatch = malloc (sizeof (*pmatch) * nmatch);
+ if (pmatch)
+ {
+ match = regexec (&preg, str_req, nmatch, pmatch, 0);
+ regfree (&preg);
+
+ if (match == 0)
+ {
+ char** arg = malloc( nbExp * sizeof *arg);
+ int i;
+ for(i = 0; i < nbExp ; ++i)
+ {
+ int start = pmatch[i].rm_so;
+ int end = pmatch[i].rm_eo;
+ size_t size = end - start;
+ arg[i] = malloc (sizeof *arg[i] * (size + 1));
+ if (arg[i])
+ {
+ strncpy (arg[i], &str_req[start], size);
+ arg[i][size] = '\0';
+ }
+ }
+ return arg;
+ }
+ else
+ goto regexErr;
+ }
+ else
+ goto regexErr2;
+ }
+
+ regexErr:
+ fprintf(stderr, "L'analyse de %s a provoquer une erreur\n", str_req);
+ exit (EXIT_FAILURE);
+ regexErr2:
+ fprintf (stderr, "L'analyse de %s a provoquer 2 erreurs\n", str_req);
+ exit (EXIT_FAILURE);
+}
+#define puts(b) FCGX_FPrintF(req->out,"%s\n", b)
+#define printf(...) FCGX_FPrintF(req->out, __VA_ARGS__)
+void start(char* titre, char* description, FCGX_Request *req) {
+ puts("Content-Type: text/html;\r\n\r");
+ printf("<!DOCTYPE html>\n"
+ "<html> "
+ "<head> "
+ "<meta charset=\"utf-8\" /><title>%s</title>"
+ "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />"
+ "<link rel=\"canonical\" href=\"http://ache.one/\"/>" //<link rel=\"next\" href=\"http://ache.one/index.cgi?page=2\"/>"
+ "<link rel=\"shortcut icon\" type=\"image/svg\" href=\"/res/ache.ico\" />"
+ "<link rel=\"stylesheet\" type=\"text/css\" title=\"Design\" href=\"design/design.css\" />"
+ "<style>"
+ "@import url(\"design/design.css\");"
+ "</style>"
+ "<meta name= \"description\" content=\"%s\" />"
+ "</head>"
+ "<body>\n"
+ , titre, description);
+}
+void end(FCGX_Request *req)
+{
+ puts(" <div id=\"foot\"></div>");
+ puts("</body>"
+ "</html>");
+}
+void sideBar(FCGX_Request *req) {
+ puts("<aside id=\"side-bar\">");
+ afficherSVG("./res/ache.svg", req);
+ puts("<h2> Ache </h2>\n"
+ "<div id=\"desc\">"
+ " Étudiant en Math-Info <br />"
+ " <span id=\"about\">GNU\\Linux, C, C++, Python, Math, ... <br /> </span>"
+ "</div>"
+ "<nav>"
+ " <ul>"
+ " <li class=\"about_bar\">");
+ afficherSVG("./res/tw.svg", req);
+ puts("</li>"
+ "<li class=\"about_bar\">");
+ afficherSVG("./res/gith.svg", req);
+ puts("</li>"
+ "<li class=\"about_bar\">");
+ afficherSVG("./res/rss.svg", req);
+ puts("</li>"
+ "</ul>"
+ " </nav>"
+ "<nav><ul>"
+ "<li class=\"sommaire_blien\"><a href=\"http://ache.one\">Accueil</a></li>"
+ "<li class=\"sommaire_blien\"><a href=\"http://projet.ache.one/\"><s>Projets</s></a></li>"
+ "<li class=\"sommaire_blien\"><a href=\"http://ache.one/contact/\">Contact</a></li>"
+ "</ul></nav>"
+"</aside>");
+}
+void erreur(const char* motif, FCGX_Request *req)
+{
+ start("Erreur", "Page d'erreur", req);
+ puts("<big><big>Error</big></big><br /><br />");
+ puts(motif);
+ end(req);
+ exit(0);
+}
+void afficherSVG(char* chemin, FCGX_Request* req) {
+ char* c = 0;
+ char ligne[201] = {0};
+ FILE* fichier = fopen(chemin, "r");
+ if(fichier)
+ {
+ while( c = fgets (ligne, 200, fichier) ) {
+ if( strstr(ligne, "<svg ") || strstr(ligne, "< svg"))
+ break;
+ }
+ if( c ) {
+ do
+ printf("%s", ligne);
+ while( fgets(ligne, 200, fichier) );
+ }
+ }
+}
+void voirAussi(FCGX_Request *req)
+{
+ fprintf(stdout, "Hello\n");
+ int nbArt = 0, i = 0;
+ FILE* fichier = fopen("article/_liste", "r");
+
+ if( !fichier ) {
+ perror("");
+ return;
+ }
+ char t[50] = {0};
+ char* tmp_h = NULL;
+
+ printf("%s", "<div id=\"autres_articles\"><h4>Voir aussi :</h4>");
+ while(fgets(t, 50, fichier))++nbArt;
+ rewind(fichier);
+
+ if( nbArt<5 )
+ {
+ while( fgets(t, 100, fichier))
+ {
+ char date[20] = {0}, titre[50] = {0}, ident[50] = {0};
+ for(tmp_h=t;*tmp_h;tmp_h++)
+ if( isspace(*tmp_h) )
+ *tmp_h = '\0';
+
+ getinfo(t, titre, date, ident);
+ printf("<div><a href=\"index.cgi?article=%d\">%s</a></div>", i++, titre);
+ }
+ fclose(fichier);
+ }
+ else
+ {
+ char tab[4] = {-1, -1, -1, -1};
+ while(i<4)
+ {
+ char date[20] = {0}, titre[50] = {0}, ident[50] = {0};
+ int has, z;
+ rewind(fichier);
+ do
+ has = rand() % nbArt;
+ while( memchr(tab, has, 4) );
+ z = has;
+ while( fgets(t, 100, fichier) && has-- );
+ for(tmp_h=t;*tmp_h;tmp_h++)
+ if( isspace(*tmp_h) )
+ *tmp_h = '\0';
+ getinfo(t, titre, date, ident);
+ printf("<div><a href=\"index.cgi?article=%d\">%s</a></div>", z, titre);
+ tab[i++] = z;
+ }
+ fclose(fichier);
+ }
+ printf("</div>");
+}
+void slideContenu(char* article, int num, FCGX_Request* req)
+{
+ char d[20], t[50] = "Vive la lettre H !", i[50];
+ int type = getinfo(article, t, d, i);
+ (void)num;
+ int year, month, day;
+ sscanf(d, "%d/%d/%d", &day, &month, &year);
+ printf( "<article id=\"contenu\" role=\"article\" class=\"post hentry clearfix\">");
+ switch(type)
+ {
+ case 0:
+ {
+ char tab[50] = {0};
+ strncpy(tab, i, strrchr(i, '.')-i);
+ strcat(tab, ".png");
+ printf("<object type=\"image/svg+xml\" data=\"%s\" style=\"float:left;width:100px;height:100px;\">"
+ "<img src=\"%s\" alt=\"Logo Article\"/>"
+ "<p>%s</p>"
+ "</object>",i,tab,i);
+ }
+ break;
+ case 1:
+ printf("<img id=\"fr\" src=\"%s\" alt=\"%s\" />", i, i);
+ break;
+ case 2:
+ printf("<iframe src=\"%s\" frameborder=\"0\" style=\"border:0;overflow:hidden;width:100px;height:100px;float:left;\"></iframe>", i);
+ }
+ printf(
+ "<header>"
+ "<h1 id=\"contenu_top2\">%s</h1>"
+ "<p>Post&eacute; le <time datetime=\"%d-%.2d-%d\">%s</time></p>"
+ "</header>"
+ , t, year, month, day, d);
+
+ puts("<section class=\"entry-content clearfix\">");
+ lireIntro(article, req);
+ puts("</section>");
+ puts("</article>");
+}
+void contenu(char* article, int num, FCGX_Request* req)
+{
+ char d[20], t[50] = "Vive la lettre H !", i[50];
+ int type = getinfo(article, t, d, i);
+ (void)num;
+ int year, month, day;
+ sscanf(d, "%d/%d/%d", &day, &month, &year);
+ printf(
+ "<article id=\"contenu\" role=\"article\" class=\"post hentry clearfix\">"
+ "<header>"
+ "<h1 id=\"contenu_top2\">%s</h1>"
+ "<p>Post&eacute; le <time datetime=\"%d-%.2d-%d\">%s</time></p>"
+ "</header>"
+ , t, year, month, day, d);
+ switch(type)
+ {
+ case 0:
+ {
+ char tab[50] = {0};
+ strncpy(tab, i, strrchr(i, '.')-i);
+ strcat(tab, ".png");
+ printf("<object type=\"image/svg+xml\" data=\"%s\" style=\"float:right;width:200px;height:200px;\">"
+ "<img src=\"%s\" alt=\"Logo Article\"/>"
+ "<p>%s</p>"
+ "</object>",i,tab,i);
+ }
+ break;
+ case 1:
+ printf("<img id=\"fr\" src=\"%s\" alt=\"%s\" />", i, i);
+ break;
+ case 2:
+ printf("<iframe src=\"%s\" frameborder=\"0\" style=\"border:0;overflow:hidden;width:250px;height:250px;float:right;\"></iframe>", i);
+ }
+ puts("<section class=\"entry-content clearfix\">");
+ lireArticle(article, req);
+ puts("</section>");
+ puts("</article>");
+}
+#define putchar(a) FCGX_PutChar( a, req->out)
+void lireArticle(char* chemin, FCGX_Request* req)
+{
+ int c = 0;
+ FILE* fichier = fopen(chemin, "r");
+ if(fichier)
+ {
+ while((c = fgetc (fichier)) != '\n');
+ while((c = fgetc (fichier)) != EOF)
+ {
+ if(c != 195)
+ if(c != '\n')
+ putchar(c);
+ else
+ printf("%s", "<br />");
+ else
+ {
+ c = fgetc (fichier);
+ switch(c)
+ {
+ CaSe(160, "&agrave;");// a
+ CaSe(162, "&agrave;");
+ CaSe(164, "&acirc;");
+ CaSe(128, "&Agrave;");
+ CaSe(130, "&Acirc;");
+ CaSe(132, "&Auml;");
+ CaSe(169, "&eacute;");//e
+ CaSe(168, "&egrave;");
+ CaSe(170, "&egrave;");
+ CaSe(171, "&euml;");
+ CaSe(137, "&Eacute;");
+ CaSe(136, "&Egrave;");
+ CaSe(138, "&Ecirc;");
+ CaSe(139, "&Euml;");// o
+ CaSe(180, "&otilde;");
+ CaSe(182, "&ouml;");
+ CaSe(148, "&Ocirc;");
+ CaSe(150, "&Ouml;");// u
+ CaSe(185, "&ugrave;");
+ CaSe(187, "&ucirc;");
+ CaSe(188, "&uuml;");
+ CaSe(153, "&Ugrave;");
+ CaSe(155, "&Ucirc;");
+ CaSe(156, "&Uuml;");
+ CaSe(174, "&icirc;");// i
+ CaSe(175, "&iuml;");
+ CaSe(142, "&Icirc");
+ CaSe(143, "&Iuml;");
+ CaSe(167, "&ccedil;");// c
+ CaSe(135, "&Ccedil;");
+ default:
+ printf("%d", c);
+ }
+ }
+ }
+ fclose(fichier);
+ }
+}
+void lireIntro(char* chemin, FCGX_Request* req)
+{
+ int c = 0;
+ FILE* fichier = fopen(chemin, "r");
+ if(fichier)
+ {
+ while((c = fgetc (fichier)) != '\n');
+ while((c = fgetc (fichier)) != EOF && c != '\n') {
+ if(c != 195)
+ if(c != '\n')
+ putchar(c);
+ else
+ printf("%s", "<br />");
+ else
+ {
+ c = fgetc (fichier);
+ switch(c)
+ {
+ CaSe(160, "&agrave;");// a
+ CaSe(162, "&agrave;");
+ CaSe(164, "&acirc;");
+ CaSe(128, "&Agrave;");
+ CaSe(130, "&Acirc;");
+ CaSe(132, "&Auml;");
+ CaSe(169, "&eacute;");//e
+ CaSe(168, "&egrave;");
+ CaSe(170, "&egrave;");
+ CaSe(171, "&euml;");
+ CaSe(137, "&Eacute;");
+ CaSe(136, "&Egrave;");
+ CaSe(138, "&Ecirc;");
+ CaSe(139, "&Euml;");// o
+ CaSe(180, "&otilde;");
+ CaSe(182, "&ouml;");
+ CaSe(148, "&Ocirc;");
+ CaSe(150, "&Ouml;");// u
+ CaSe(185, "&ugrave;");
+ CaSe(187, "&ucirc;");
+ CaSe(188, "&uuml;");
+ CaSe(153, "&Ugrave;");
+ CaSe(155, "&Ucirc;");
+ CaSe(156, "&Uuml;");
+ CaSe(174, "&icirc;");// i
+ CaSe(175, "&iuml;");
+ CaSe(142, "&Icirc");
+ CaSe(143, "&Iuml;");
+ CaSe(167, "&ccedil;");// c
+ CaSe(135, "&Ccedil;");
+ default:
+ printf("%d", c);
+ }
+ }
+ }
+ fclose(fichier);
+ }
+}
+#undef putchar
+
+
+#undef puts
+#undef printf
+/*
+void confirmation(void)
+{
+ puts("<div id=\"menu\">"
+ "<div id=\"boutons\">"
+ "<div id=\"bouton\">"
+ "<div id=\"close\"><div></div><div></div></div>"
+ "</div>"
+ "</div>"
+ "<div id=\"boutons\">"
+ "<div id=\"bouton\">"
+ "<div id=\"reduire\"><div></div></div>"
+ "</div>"
+ "</div>"
+ "<div id=\"menu_mes\"><br/>"
+ "Voulez confirmez l'envoye de ce ??? ? "
+ "</div>"
+ "</div>");
+}*/
+int getinfo(char* chemin, char* titre, char* date, char* image)
+{
+ char line[300] = "", type[5] = "";
+ char** infos;
+
+ FILE* fichier = fopen(chemin, "r");
+ if(fichier)
+ {
+///*
+ fgets(line, 300, fichier);
+ line[strlen(line)-1] = 0;
+ infos = allocRegex(line, "([[:print:]]+)\\|([[:print:]]+)\\|([[:print:]]+)\\|([[:print:]]+)()", 5);
+ fclose(fichier);
+
+ strcpy(titre, infos[1]) ;
+ strcpy(date , infos[2]) ;
+ strcpy(type , infos[3]) ;
+ strcpy(image, infos[4]) ;
+
+ free(infos[0]), free(infos[1]), free(infos[2]), free(infos[3]), free(infos[4]), free(infos);
+/*
+ fscanf(fichier, "%[^|\n]s", titre);
+ fscanf(fichier, "|%[^\n|]s", date);
+ fscanf(fichier, "|%[^\n|]s", type);
+ fscanf(fichier, "|%[^\n|]s", image);
+ fclose(fichier);
+ */
+ return ((!strcmp(type, "svg")) ? 0 : (!strcmp(type, "png")) ? 1 : (!strcmp(type, "js")) ? 2 : -1);
+ }
+ return -2;
+}
+void imput_(char* str)
+{
+ char* str2 = str;
+ do
+ {
+ if(*str == '+')
+ *str2++ = ' ';
+ else if(*str == '%')
+ {
+ int u = 0;
+ char t[3] = "";
+ sscanf(++str, "%2c", t);
+ sscanf(t, "%x", &u);
+ *str2++ = u;
+ ++str;
+ }
+ else
+ *str2++ = *str;
+ }while(*str++);
+}
diff --git a/main.h b/main.h
new file mode 100755
index 0000000..a4f028b
--- /dev/null
+++ b/main.h
@@ -0,0 +1,26 @@
+#ifndef H_MAIN
+#define H_MAIN
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <ctype.h>
+#include <regex.h>
+#include <fcgiapp.h>
+
+#define CaSe(a, b) case a : printf("%s", b); break
+void start(char* titre,char* description, FCGX_Request *req);
+void end(FCGX_Request *req);
+void contenu(char*,int, FCGX_Request*);
+void confirmation(void);
+int getinfo(char*,char*,char*,char*);
+void lireArticle(char* chemin, FCGX_Request*);
+void lireIntro(char* chemin, FCGX_Request*);
+void erreur(const char*, FCGX_Request *req);
+void imput_(char*);
+void lireCommentaires(const char*);
+char** allocRegex(const char*,const char*, int);
+void voirAussi(FCGX_Request*);
+void afficherSVG(char*,FCGX_Request*);
+#endif
diff --git a/res/DuckDuckGo_Logo.png b/res/DuckDuckGo_Logo.png
new file mode 100644
index 0000000..780a444
--- /dev/null
+++ b/res/DuckDuckGo_Logo.png
Binary files differ
diff --git a/res/DuckDuckGo_Logo.svg b/res/DuckDuckGo_Logo.svg
new file mode 100644
index 0000000..4b53b6e
--- /dev/null
+++ b/res/DuckDuckGo_Logo.svg
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="Layer_1" x="0px" y="0px" width="200px" height="200px" viewBox="0 0 250 200" enable-background="new 0 0 250 200">
+<metadata id="metadata116">
+<rdf:RDF>
+<cc:Work rdf:about="">
+<dc:format>
+image/svg+xml</dc:format>
+<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+<dc:title/>
+</cc:Work>
+</rdf:RDF>
+</metadata>
+<defs id="defs114"/>
+<g id="g3" transform="scale(2) translate(-65 -29)">
+<path sodipodi:type="arc" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path3038" sodipodi:cx="136.62799" sodipodi:cy="77.17086" sodipodi:rx="56.555824" sodipodi:ry="59.859772" d="m 193.18382,77.17086 a 56.555824,59.859772 0 1 1 -113.111654,0 56.555824,59.859772 0 1 1 113.111654,0 z" transform="matrix(1,0,0,0.97402597,-9.3287956,2.7818376)"/>
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="277.5186" y1="-668.0073" x2="277.5186" y2="-548.688" gradientTransform="matrix(1 0 0 -1 -150 -530)">
+<stop offset="0" style="stop-color:#D14427" id="stop6"/>
+<stop offset="1" style="stop-color:#E55225" id="stop8"/>
+</linearGradient>
+<path fill="url(#SVGID_1_)" d="M179.717,78.348c0,28.828-23.369,52.201-52.199,52.201c-28.83,0-52.199-23.373-52.199-52.201 c0-28.828,23.369-52.199,52.199-52.199C156.348,26.149,179.717,49.52,179.717,78.348z M187.178,78.348 c0,32.947-26.713,59.66-59.66,59.66c-32.947,0-59.66-26.713-59.66-59.66c0-32.947,26.713-59.66,59.66-59.66 C160.465,18.688,187.178,45.4,187.178,78.348z M182.256,78.348c0-30.229-24.51-54.736-54.738-54.736 c-30.227,0-54.738,24.508-54.738,54.736s24.512,54.736,54.738,54.736C157.746,133.084,182.256,108.576,182.256,78.348z" id="path10"/>
+<g id="g12">
+<g id="g14">
+<g id="g16">
+<g id="g18">
+<g id="g20">
+<defs id="defs22">
+<path id="SVGID_2_" d="M179.922,78.207c0,28.895-23.506,52.4-52.404,52.4c-28.893,0-52.396-23.508-52.396-52.4 c0-28.891,23.506-52.396,52.396-52.396C156.416,25.81,179.922,49.316,179.922,78.207z"/>
+</defs>
+<clipPath id="SVGID_3_">
+<use xlink:href="#SVGID_2_" overflow="visible" id="use26"/>
+</clipPath>
+<g clip-path="url(#SVGID_3_)" id="g28">
+<path fill="#D5D7D8" d="M148.482,154.541c-1.801-8.285-12.262-27.039-16.229-34.969c-3.965-7.93-7.939-19.11-6.129-26.322 c0.327-1.312-3.436-11.307-2.354-12.014c8.415-5.49,10.633,0.598,14.002-1.863c1.738-1.273,4.09,1.047,4.693-1.059 c2.158-7.568-3.006-20.76-8.768-26.527c-1.885-1.879-4.773-3.059-8.031-3.686c-1.254-1.713-3.275-3.361-6.138-4.879 c-3.188-1.697-10.121-3.938-13.717-4.535c-2.492-0.41-3.055,0.287-4.119,0.461c0.992,0.088,5.699,2.414,6.615,2.549 c-0.916,0.619-3.607-0.029-5.324,0.742c-0.865,0.391-1.512,1.877-1.506,2.58c4.91-0.496,12.574-0.016,17.1,2 c-3.602,0.41-9.08,0.867-11.436,2.105c-6.848,3.609-9.873,12.035-8.07,22.133c1.804,10.075,9.738,46.849,12.262,59.129 c2.525,12.263-5.408,20.189-10.455,22.354l5.408,0.363l-1.801,3.967c6.484,0.719,13.695-1.441,13.695-1.441 c-1.438,3.965-11.176,5.412-11.176,5.412s4.691,1.438,12.258-1.447c7.575-2.883,12.261-4.688,12.261-4.688l3.605,9.373 l6.854-6.846l2.884,7.211C144.875,164.643,150.285,162.836,148.482,154.541z" id="path30"/>
+<path fill="#FFFFFF" d="M150.66,152.859c-1.795-8.289-12.256-27.043-16.227-34.975c-3.968-7.935-7.933-19.112-6.129-26.321 c0.334-1.309,0.34-6.668,1.428-7.379c8.41-5.494,7.813-0.184,11.186-2.645c1.74-1.27,3.133-2.805,3.738-4.912 c2.164-7.572-3.006-20.76-8.773-26.529c-1.879-1.879-4.768-3.062-8.025-3.686c-1.252-1.717-3.271-3.361-6.132-4.881 c-5.391-2.863-12.074-4.006-18.266-2.883c0.99,0.09,3.256,2.137,4.168,2.273c-1.381,0.936-5.053,0.816-5.029,2.896 c4.916-0.492,10.303,0.285,14.834,2.297c-3.602,0.41-6.955,1.299-9.311,2.543c-6.854,3.602-8.656,10.812-6.854,20.914 c1.807,10.096,9.742,46.869,12.256,59.127c2.527,12.258-5.402,20.188-10.449,22.352l5.408,0.359l-1.801,3.973 c6.484,0.717,13.695-1.443,13.695-1.443c-1.438,3.972-11.176,5.406-11.176,5.406s4.686,1.443,12.258-1.445 c7.578-2.883,12.267-4.684,12.267-4.684l3.602,9.373l6.854-6.85l2.889,7.211C147.064,162.955,152.469,161.15,150.66,152.859z " id="path32"/>
+<path fill="#2D4F8E" d="M109.211,70.074c0-2.092,1.693-3.787,3.789-3.787c2.09,0,3.785,1.695,3.785,3.787 c0,2.094-1.695,3.787-3.785,3.787C110.904,73.861,109.211,72.168,109.211,70.074z" id="path34"/>
+<path fill="#FFFFFF" d="M113.697,68.812c0-0.545,0.441-0.984,0.98-0.984c0.543,0,0.984,0.439,0.984,0.984 c0,0.543-0.441,0.984-0.984,0.984C114.139,69.797,113.697,69.355,113.697,68.812z" id="path36"/>
+<path fill="#2D4F8E" d="M135.057,67.828c0-1.793,1.461-3.25,3.252-3.25c1.801,0,3.256,1.457,3.256,3.25 c0,1.801-1.455,3.258-3.256,3.258C136.518,71.086,135.057,69.629,135.057,67.828z" id="path38"/>
+<path fill="#FFFFFF" d="M138.914,66.746c0-0.463,0.379-0.842,0.838-0.842c0.477,0,0.844,0.379,0.844,0.842 c0,0.469-0.367,0.842-0.844,0.842C139.293,67.588,138.914,67.215,138.914,66.746z" id="path40"/>
+<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="255.5088" y1="-590.3633" x2="264.0762" y2="-590.3633" gradientTransform="matrix(1 0 0 -1 -150 -530)">
+<stop offset="0.0056" style="stop-color:#6176B9" id="stop43"/>
+<stop offset="0.691" style="stop-color:#394A9F" id="stop45"/>
+</linearGradient>
+<path fill="url(#SVGID_4_)" d="M114.076,59.101c0,0-2.854-1.291-5.629,0.453c-2.77,1.742-2.668,3.523-2.668,3.523 s-1.473-3.283,2.453-4.891C112.162,56.576,114.076,59.101,114.076,59.101z" id="path47"/>
+<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="282.4629" y1="-587.7539" x2="290.2676" y2="-587.7539" gradientTransform="matrix(1 0 0 -1 -150 -530)">
+<stop offset="0.0056" style="stop-color:#6176B9" id="stop50"/>
+<stop offset="0.691" style="stop-color:#394A9F" id="stop52"/>
+</linearGradient>
+<path fill="url(#SVGID_5_)" d="M140.268,58.841c0,0-2.051-1.172-3.643-1.152c-3.268,0.043-4.162,1.488-4.162,1.488 s0.549-3.445,4.734-2.754C139.463,56.8,140.268,58.841,140.268,58.841z" id="path54"/>
+</g>
+</g>
+</g>
+</g>
+</g>
+<path fill="#FDD20A" d="M124.59,84.678c0.379-2.291,6.299-6.625,10.49-6.887c4.201-0.264,5.51-0.205,9.01-1.043 c3.508-0.838,12.535-3.088,15.033-4.242c2.504-1.156,13.102,0.572,5.631,4.738c-3.234,1.809-11.945,5.131-18.172,6.988 c-6.219,1.861-9.99-1.777-12.059,1.281c-1.646,2.432-0.334,5.762,7.098,6.453c10.037,0.93,19.66-4.52,20.719-1.625 c1.064,2.895-8.625,6.508-14.527,6.623c-5.891,0.111-17.776-3.896-19.553-5.137C126.475,90.588,124.096,87.697,124.59,84.678z" id="path56"/>
+</g>
+<g id="g100">
+<path fill="#65BC46" d="M129.133,115.975c0,0-14.1-7.521-14.33-4.47c-0.238,3.056,0,15.509,1.643,16.451 c1.646,0.938,13.395-6.108,13.395-6.108L129.133,115.975z" id="path102"/>
+<path fill="#65BC46" d="M134.535,115.501c0,0,9.635-7.285,11.754-6.815c2.111,0.478,2.582,15.51,0.701,16.224 c-1.881,0.696-12.908-3.816-12.908-3.816L134.535,115.501z" id="path104"/>
+<path fill="#43A244" d="M125.719,116.771c0,4.931-0.709,7.049,1.41,7.517c2.112,0.473,6.105,0,7.518-0.938 c1.41-0.94,0.232-7.281-0.235-8.465C133.938,113.714,125.719,114.657,125.719,116.771z" id="path106"/>
+<path fill="#65BC46" d="M126.615,115.675c0,4.933-0.707,7.05,1.41,7.519c2.109,0.474,6.104,0,7.518-0.938 c1.41-0.941,0.232-7.279-0.238-8.466C134.834,112.618,126.615,113.562,126.615,115.675z" id="path108"/>
+<path fill="#FFFFFF" d="M140.029,128.698c-4.133,1.052-8.46,1.613-12.916,1.613c-4.715,0-9.282-0.637-13.631-1.811l0.05,0.413 c4.334,1.165,8.884,1.796,13.581,1.796c4.511,0,8.89-0.573,13.068-1.649L140.029,128.698z" id="path110"/>
+</g>
+</g>
+
+
+</svg>
+
diff --git a/res/ache.ico b/res/ache.ico
new file mode 100644
index 0000000..ba2b618
--- /dev/null
+++ b/res/ache.ico
Binary files differ
diff --git a/res/ache.svg b/res/ache.svg
new file mode 100755
index 0000000..c3dae48
--- /dev/null
+++ b/res/ache.svg
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+
+<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" id="svg">
+ <g transform="scale(0.125)">
+ <rect width="100" height="100" x="50" y="300" id="rect1" style="fill:#000" />
+ <rect width="100" height="100" x="50" y="400" id="rect2" style="fill:#000" />
+ <rect width="100" height="100" x="50" y="500" id="rect3" style="fill:#000" />
+ <rect width="100" height="100" x="50" y="600" id="rect4" style="fill:#000" />
+ <rect width="100" height="100" x="150" y="600" id="rect5" style="fill:#000" />
+ <rect width="100" height="100" x="250" y="600" id="rect6" style="fill:#000" />
+ <rect width="100" height="100" x="350" y="600" id="rect7" style="fill:#000" />
+ <rect width="100" height="100" x="450" y="600" id="rect8" style="fill:#000" />
+ <rect width="100" height="100" x="550" y="600" id="rect9" style="fill:#000" />
+ <rect width="100" height="100" x="650" y="600" id="rect10" style="fill:#000" />
+ <rect width="100" height="100" x="650" y="500" id="rect11" style="fill:#000" />
+ <rect width="100" height="100" x="650" y="400" id="rect12" style="fill:#000" />
+ <rect width="100" height="100" x="650" y="300" id="rect13" style="fill:#000" />
+ <rect width="100" height="100" x="150" y="700" id="rect14" style="fill:#000" />
+ <rect width="100" height="100" x="550" y="700" id="rect15" style="fill:#000" />
+ <rect width="100" height="100" x="250" y="300" id="rect16" style="fill:#000" />
+ <rect width="100" height="100" x="450" y="300" id="rect17" style="fill:#000" />
+ <rect width="100" height="100" x="150" y="200" id="rect18" style="fill:#000" />
+ <rect width="100" height="100" x="550" y="200" id="rect19" style="fill:#000" />
+ <rect width="100" height="100" x="250" y="100" id="rect20" style="fill:#000" />
+ <rect width="100" height="100" x="450" y="100" id="rect21" style="fill:#000" />
+ <rect width="100" height="100" x="350" y="000" id="rect22" style="fill:#000" />
+ </g>
+</svg>
diff --git a/res/acheVersionAlpha.xpi b/res/acheVersionAlpha.xpi
new file mode 100755
index 0000000..2f1b61a
--- /dev/null
+++ b/res/acheVersionAlpha.xpi
Binary files differ
diff --git a/res/emploi du temps TS3.pdf b/res/emploi du temps TS3.pdf
new file mode 100755
index 0000000..738f4a1
--- /dev/null
+++ b/res/emploi du temps TS3.pdf
Binary files differ
diff --git a/res/gith.svg b/res/gith.svg
new file mode 100755
index 0000000..52f1543
--- /dev/null
+++ b/res/gith.svg
@@ -0,0 +1,2 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20">
+<g transform="scale(0.02)"><path d="M0 500.288q0 129.32 62.952 234.728 62.952 108.824 170.8 171.288t234.728 62.464q127.368 0 235.704 -62.464 108.336 -62.952 170.556 -171.044t62.22 -234.972q0 -128.832 -62.464 -235.704 -62.952 -108.336 -171.044 -170.556t-234.972 -62.22q-129.32 0 -234.728 62.952 -108.824 62.952 -171.288 170.8t-62.464 234.728zm78.08 0q0 -78.08 30.744 -150.792t83.936 -125.416q53.192 -53.192 125.416 -83.692t150.304 -30.5 150.792 30.5 125.904 83.692q52.704 52.704 83.204 125.416t30.5 150.792q0 83.936 -34.404 160.064t-96.624 131.516 -142.252 80.276v-137.616q0 -51.24 -41.968 -80.032 102.968 -9.272 150.548 -52.216t47.58 -136.152q0 -72.224 -44.408 -121.512 8.784 -26.352 8.784 -50.752 0 -36.112 -16.592 -66.368 -32.696 0 -58.56 10.736t-63.44 37.088q-45.384 -10.248 -93.696 -10.248 -55.144 0 -102.968 11.224 -36.6 -26.84 -63.196 -37.82t-60.268 -10.98q-16.104 30.744 -16.104 66.368 0 25.376 8.296 51.24 -44.408 47.824 -44.408 121.024 0 93.208 47.336 135.664t151.768 52.216q-27.816 18.544 -38.552 54.168 -23.912 8.296 -49.776 8.296 -19.52 0 -33.672 -8.784 -4.392 -2.44 -8.052 -5.124t-7.564 -6.588 -6.344 -6.1 -6.344 -7.564 -5.124 -6.832 -5.856 -7.808 -5.124 -6.832q-22.936 -30.256 -54.656 -30.256 -17.08 0 -17.08 7.32 0 2.928 8.296 9.76 15.616 13.664 16.592 14.64 11.712 9.272 13.176 11.712 14.152 17.568 21.472 38.552 27.328 61 93.696 61 10.736 0 41.968 -4.88v103.456q-80.032 -24.888 -142.252 -80.276t-96.624 -131.516 -34.404 -160.064z" style="fill: #777;"/></g></svg>
diff --git a/res/rss.svg b/res/rss.svg
new file mode 100755
index 0000000..e6827b1
--- /dev/null
+++ b/res/rss.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="20" height="20">
+<g transform="scale(0.04)">
+ <path fill="#777" d="M119.9,336.1C89.1,336.1,64,361.2,64,391.9c0,30.8,25.1,55.6,55.9,55.6c30.9,0,55.9-24.9,55.9-55.6 C175.8,361.2,150.8,336.1,119.9,336.1z"/>
+ <path fill="#777" d="M64,192v79.9c48,0,94.1,14.199,128,48.1s48,79.9,48,128h80C320,308.1,204,192,64,192z"/>
+ <path fill="#777" d="M64,64v79.9c171,0,303.9,133,303.9,304.1H448C448,236.3,276,64,64,64z"/>
+</g>
+</svg>
diff --git a/res/tw.svg b/res/tw.svg
new file mode 100755
index 0000000..3d81a91
--- /dev/null
+++ b/res/tw.svg
@@ -0,0 +1,21 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20">
+<g transform="translate(-16,-16)scale(0.053)">
+<path d="
+M 630, 425
+A 195, 195 0 0 1 331, 600
+A 142, 142 0 0 0 428, 570
+A 70, 70 0 0 1 370, 523
+A 70, 70 0 0 0 401, 521
+A 70, 70 0 0 1 344, 455
+A 70, 70 0 0 0 372, 460
+A 70, 70 0 0 1 354, 370
+A 195, 195 0 0 0 495, 442
+A 67, 67 0 0 1 611, 380
+A 117, 117 0 0 0 654, 363
+A 65, 65 0 0 1 623, 401
+A 117, 117 0 0 0 662, 390
+A 65, 65 0 0 1 630, 425
+Z"
+style="fill:#777;"/>
+</g>
+</svg>
diff --git a/res/twit.svg b/res/twit.svg
new file mode 100755
index 0000000..2662a80
--- /dev/null
+++ b/res/twit.svg
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="171.5054" height="139.37839" id="svg2" version="1.1" inkscape:version="0.48.4 r9939" sodipodi:docname="Twitter_bird_logo_2012.svg">
+ <defs id="defs4"/>
+ <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="3.7200571" inkscape:cx="101.29413" inkscape:cy="50.181142" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" inkscape:window-width="1280" inkscape:window-height="962" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" fit-margin-top="0" fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0"/>
+ <metadata id="metadata7">
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(-282.32053,-396.30734)">
+ <path style="fill:#2aa9e0" inkscape:connector-curvature="0" id="path5" d="m 453.82593,412.80619 c -6.3097,2.79897 -13.09189,4.68982 -20.20852,5.54049 7.26413,-4.35454 12.84406,-11.24992 15.47067,-19.46675 -6.79934,4.03295 -14.3293,6.96055 -22.34461,8.53841 -6.41775,-6.83879 -15.56243,-11.111 -25.68298,-11.111 -19.43159,0 -35.18696,15.75365 -35.18696,35.18525 0,2.75781 0.31128,5.44359 0.91155,8.01875 -29.24344,-1.46723 -55.16995,-15.47582 -72.52461,-36.76396 -3.02879,5.19662 -4.76443,11.24048 -4.76443,17.6891 0,12.20777 6.21194,22.97747 15.65332,29.28716 -5.76773,-0.18265 -11.19331,-1.76565 -15.93716,-4.40083 -0.004,0.14663 -0.004,0.29412 -0.004,0.44248 0,17.04767 12.12889,31.26806 28.22555,34.50266 -2.95247,0.80436 -6.06101,1.23398 -9.26989,1.23398 -2.2673,0 -4.47114,-0.22124 -6.62011,-0.63114 4.47801,13.97857 17.47214,24.15143 32.86992,24.43441 -12.04227,9.43796 -27.21366,15.06335 -43.69965,15.06335 -2.84014,0 -5.64082,-0.16722 -8.39349,-0.49223 15.57186,9.98421 34.06703,15.8094 53.93768,15.8094 64.72024,0 100.11301,-53.61524 100.11301,-100.11387 0,-1.52554 -0.0343,-3.04251 -0.10204,-4.55261 6.87394,-4.95995 12.83891,-11.15646 17.55618,-18.21305 z"/>
+ </g>
+</svg> \ No newline at end of file
diff --git a/res/wtf.svg b/res/wtf.svg
new file mode 100755
index 0000000..e264a77
--- /dev/null
+++ b/res/wtf.svg
@@ -0,0 +1,28 @@
+<svg style="opacity: 1;" version="1.1" id="snap-logo" class="insert" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="250px" height="250px">
+ <defs>
+ <linearGradient id="bottom_1_" gradientUnits="userSpaceOnUse" x1="196" y1="485.6281" x2="196" y2="732.5812" gradientTransform="matrix(1 0 0 1 -71 -486.5)">
+ <stop offset="0" stop-color="#002E3B"></stop>
+ <stop offset="1" stop-color="#002639"></stop>
+ </linearGradient>
+ <radialGradient id="right_2_" cx="146.3819" cy="449.8799" r="408.7811" gradientTransform="matrix(1 0 0 1 -71 -486.5)" gradientUnits="userSpaceOnUse">
+ <stop offset="0" stop-color="#00BC85"></stop>
+ <stop offset="1" stop-color="#149D91"></stop>
+ </radialGradient>
+ <radialGradient id="left_1_" cx="139.0562" cy="454.2622" r="507.5908" gradientTransform="matrix(1 0 0 1 -71 -486.5)" gradientUnits="userSpaceOnUse">
+ <stop offset="0" stop-color="#004473"></stop>
+ <stop offset="1" stop-color="#00345F"></stop>
+ </radialGradient>
+ <linearGradient id="top_1_" gradientUnits="userSpaceOnUse" x1="195.922" y1="486.8864" x2="195.922" y2="732.5903" gradientTransform="matrix(1 0 0 1 -71 -486.5)">
+ <stop offset="0" stop-color="#002E3B"></stop>
+ <stop offset="1" stop-color="#002639"></stop>
+ </linearGradient>
+ </defs>
+ <polygon transform="matrix(1,0,0,1,0,0)" style="opacity: 1;" id="bottom" fill="url(#bottom_1_)" stroke="url(#bottom_1_)" points="124.913,210.751 89.063,193.264 89.103,193.245 89.093,193.24
+ 51,211.82 124.941,247.884 199,211.9 160.771,192.962 "></polygon>
+ <polygon transform="matrix(1,0,0,1,0,0)" style="opacity: 1;" id="right" fill="url(#right_2_)" stroke="url(#right_2_)" points="198.996,138.632 198.996,38.123 165.596,58.995 165.596,117.758
+ 165.596,117.758 165.596,117.758 51.091,174.781 51.091,211.945 "></polygon>
+ <polygon transform="matrix(1,0,0,1,0,0)" style="opacity: 1;" id="left" fill="url(#left_1_)" stroke="url(#left_1_)" points="199,211.912 199,211.912 199,174.746 84.498,117.723 84.498,58.96
+ 51.096,38.088 51.096,138.597 "></polygon>
+ <polygon transform="matrix(1,0,0,1,0,0)" style="opacity: 1;" id="top" fill="url(#top_1_)" stroke="url(#top_1_)" points="84.396,58.904 84.396,58.892 124.939,39.118 165.485,58.892
+ 198.844,38.046 124.912,1.985 51,38.035 51,38.067 84.368,58.918 "></polygon>
+ <desc>Created with Snap</desc></svg>
diff --git a/res/zeroClickBox1.png b/res/zeroClickBox1.png
new file mode 100755
index 0000000..db92266
--- /dev/null
+++ b/res/zeroClickBox1.png
Binary files differ
diff --git a/session_dev.vim b/session_dev.vim
new file mode 100644
index 0000000..97353d6
--- /dev/null
+++ b/session_dev.vim
@@ -0,0 +1,458 @@
+let SessionLoad = 1
+if &cp | set nocp | endif
+let s:cpo_save=&cpo
+set cpo&vim
+inoremap <F1> 
+noremap <silent> c :silent s/^\V=escape(b:comment_leader,'\/') //e :nohlsearch
+noremap <silent>  :silent s/^/=escape(b:comment_leader,'\/') / :nohlsearch
+nnoremap  :Unite -start-insert file_rec/async
+nmap  :TagbarToggle
+noremap <silent>  * :Unite grep:.::
+nnoremap  s :Unite buffer
+nnoremap  / :Unite grep:.
+nnoremap  ! :tab sball
+nnoremap  <BS> :x
+nnoremap   :w
+nnoremap   w
+nnoremap  - s
+nnoremap  t v
+nnoremap  
+noremap <silent> ,cu :silent s/^\V=escape(b:comment_leader,'\/') //e :nohlsearch
+noremap <silent> ,cc :silent s/^/=escape(b:comment_leader,'\/') / :nohlsearch
+nnoremap \l :set cursorline!
+nnoremap \c :set cursorcolumn!
+nnoremap cd :cd %:p:h
+nmap gx <Plug>NetrwBrowseX
+nnoremap <silent> <Plug>NetrwBrowseX :call netrw#NetrwBrowseX(expand("<cWORD>"),0)
+nnoremap <F5> :make
+nnoremap <F1> 
+vnoremap <F1> 
+inoremap  0i
+inoremap  A
+inoremap #de #define
+inoremap #in< #include<><Left>
+nnoremap <silent> èè__ :set paste m`o``:set nopaste
+nnoremap <silent> Ï :set paste m`O``:set nopaste
+nnoremap <silent> ï :set paste m`o``:set nopaste
+inoremap prt printf
+inoremap swf printf
+cabbr tc tabc
+cabbr tn tabnew
+let &cpo=s:cpo_save
+unlet s:cpo_save
+set autoindent
+set backspace=indent,eol,start
+set backup
+set backupdir=~/.vimtmp/backup
+set directory=~/.vimtmp/temp
+set expandtab
+set fileencodings=ucs-bom,utf-8,default,latin1
+set gdefault
+set helplang=fr
+set hidden
+set history=50
+set ignorecase
+set incsearch
+set laststatus=2
+set listchars=tab:.\ ,eol:¬,nbsp:␣
+set nomodeline
+set printoptions=paper:a4
+set ruler
+set runtimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim73,/usr/share/vim/vimfiles/after,/var/lib/vim/addons/after,~/.vim/after
+set scrolloff=5
+set shiftwidth=4
+set showcmd
+set showmatch
+set smartcase
+set smarttab
+set softtabstop=4
+set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [ASCII=%03.3b]\ [HEX=%02.2B]\ [POS=%04l,%04v][%p%%]\ [LEN=%L]
+set suffixes=.bak,~,.swp,.o,.info,.aux,.log,.dvi,.bbl,.blg,.brf,.cb,.ind,.idx,.ilg,.inx,.out,.toc
+set undodir=~/.vimtmp/undo
+set undofile
+set viminfo='20,\"50,<100,n~/.vimtmp/viminfo
+set wildmenu
+set wildmode=list:longest:full
+let s:so_save = &so | let s:siso_save = &siso | set so=0 siso=0
+let v:this_session=expand("<sfile>:p")
+silent only
+cd /var/www/ache/dev
+if expand('%') == '' && !&modified && line('$') <= 1 && getline(1) == ''
+ let s:wipebuf = bufnr('%')
+endif
+set shortmess=aoO
+badd +0 dev.c
+badd +0 main.c
+badd +0 main.h
+args dev.c
+edit dev.c
+set splitbelow splitright
+set nosplitbelow
+set nosplitright
+wincmd t
+set winheight=1 winwidth=1
+argglobal
+setlocal keymap=
+setlocal noarabic
+setlocal autoindent
+setlocal nobinary
+setlocal bufhidden=
+setlocal buflisted
+setlocal buftype=
+setlocal cindent
+setlocal cinkeys=0{,0},0),:,0#,!^F,o,O,e
+setlocal cinoptions=
+setlocal cinwords=if,else,while,do,for,switch
+setlocal colorcolumn=
+setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
+setlocal commentstring=/*%s*/
+setlocal complete=.,w,b,u,t,i
+setlocal concealcursor=
+setlocal conceallevel=0
+setlocal completefunc=
+setlocal nocopyindent
+setlocal cryptmethod=
+setlocal nocursorbind
+setlocal nocursorcolumn
+set cursorline
+setlocal cursorline
+setlocal define=
+setlocal dictionary=
+setlocal nodiff
+setlocal equalprg=
+setlocal errorformat=
+setlocal expandtab
+if &filetype != 'c'
+setlocal filetype=c
+endif
+setlocal foldcolumn=0
+setlocal foldenable
+setlocal foldexpr=0
+setlocal foldignore=#
+setlocal foldlevel=0
+setlocal foldmarker={{{,}}}
+setlocal foldmethod=manual
+setlocal foldminlines=1
+setlocal foldnestmax=20
+setlocal foldtext=foldtext()
+setlocal formatexpr=
+setlocal formatoptions=croql
+setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s*
+setlocal grepprg=
+setlocal iminsert=0
+setlocal imsearch=0
+setlocal include=
+setlocal includeexpr=
+setlocal indentexpr=
+setlocal indentkeys=0{,0},:,0#,!^F,o,O,e
+setlocal noinfercase
+setlocal iskeyword=@,48-57,_,192-255
+setlocal keywordprg=
+setlocal nolinebreak
+setlocal nolisp
+set list
+setlocal list
+setlocal makeprg=
+setlocal matchpairs=(:),{:},[:]
+setlocal nomodeline
+setlocal modifiable
+setlocal nrformats=octal,hex
+set number
+setlocal nonumber
+setlocal numberwidth=4
+setlocal omnifunc=ccomplete#Complete
+setlocal path=
+setlocal nopreserveindent
+setlocal nopreviewwindow
+setlocal quoteescape=\\
+setlocal noreadonly
+set relativenumber
+setlocal relativenumber
+setlocal norightleft
+setlocal rightleftcmd=search
+setlocal noscrollbind
+setlocal shiftwidth=4
+setlocal noshortname
+setlocal nosmartindent
+setlocal softtabstop=4
+setlocal nospell
+setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+
+setlocal spellfile=
+setlocal spelllang=en
+setlocal statusline=
+setlocal suffixesadd=
+setlocal swapfile
+setlocal synmaxcol=3000
+if &syntax != 'c'
+setlocal syntax=c
+endif
+setlocal tabstop=8
+setlocal tags=
+setlocal textwidth=0
+setlocal thesaurus=
+setlocal undofile
+setlocal nowinfixheight
+setlocal nowinfixwidth
+setlocal wrap
+setlocal wrapmargin=0
+silent! normal! zE
+let s:l = 1 - ((0 * winheight(0) + 32) / 64)
+if s:l < 1 | let s:l = 1 | endif
+exe s:l
+normal! zt
+1
+normal! 0
+tabedit main.c
+set splitbelow splitright
+wincmd _ | wincmd |
+vsplit
+1wincmd h
+wincmd w
+set nosplitbelow
+set nosplitright
+wincmd t
+set winheight=1 winwidth=1
+exe 'vert 1resize ' . ((&columns * 130 + 101) / 202)
+exe 'vert 2resize ' . ((&columns * 71 + 101) / 202)
+argglobal
+setlocal keymap=
+setlocal noarabic
+setlocal autoindent
+setlocal nobinary
+setlocal bufhidden=
+setlocal buflisted
+setlocal buftype=
+setlocal cindent
+setlocal cinkeys=0{,0},0),:,0#,!^F,o,O,e
+setlocal cinoptions=
+setlocal cinwords=if,else,while,do,for,switch
+setlocal colorcolumn=
+setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
+setlocal commentstring=/*%s*/
+setlocal complete=.,w,b,u,t,i
+setlocal concealcursor=
+setlocal conceallevel=0
+setlocal completefunc=
+setlocal nocopyindent
+setlocal cryptmethod=
+setlocal nocursorbind
+setlocal nocursorcolumn
+set cursorline
+setlocal cursorline
+setlocal define=
+setlocal dictionary=
+setlocal nodiff
+setlocal equalprg=
+setlocal errorformat=
+setlocal expandtab
+if &filetype != 'c'
+setlocal filetype=c
+endif
+setlocal foldcolumn=0
+setlocal foldenable
+setlocal foldexpr=0
+setlocal foldignore=#
+setlocal foldlevel=0
+setlocal foldmarker={{{,}}}
+setlocal foldmethod=manual
+setlocal foldminlines=1
+setlocal foldnestmax=20
+setlocal foldtext=foldtext()
+setlocal formatexpr=
+setlocal formatoptions=croql
+setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s*
+setlocal grepprg=
+setlocal iminsert=0
+setlocal imsearch=0
+setlocal include=
+setlocal includeexpr=
+setlocal indentexpr=
+setlocal indentkeys=0{,0},:,0#,!^F,o,O,e
+setlocal noinfercase
+setlocal iskeyword=@,48-57,_,192-255
+setlocal keywordprg=
+setlocal nolinebreak
+setlocal nolisp
+set list
+setlocal list
+setlocal makeprg=
+setlocal matchpairs=(:),{:},[:]
+setlocal nomodeline
+setlocal modifiable
+setlocal nrformats=octal,hex
+set number
+setlocal number
+setlocal numberwidth=4
+setlocal omnifunc=ccomplete#Complete
+setlocal path=
+setlocal nopreserveindent
+setlocal nopreviewwindow
+setlocal quoteescape=\\
+setlocal noreadonly
+set relativenumber
+setlocal relativenumber
+setlocal norightleft
+setlocal rightleftcmd=search
+setlocal noscrollbind
+setlocal shiftwidth=4
+setlocal noshortname
+setlocal nosmartindent
+setlocal softtabstop=4
+setlocal nospell
+setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+
+setlocal spellfile=
+setlocal spelllang=en
+setlocal statusline=
+setlocal suffixesadd=
+setlocal swapfile
+setlocal synmaxcol=3000
+if &syntax != 'c'
+setlocal syntax=c
+endif
+setlocal tabstop=8
+setlocal tags=
+setlocal textwidth=0
+setlocal thesaurus=
+setlocal undofile
+setlocal nowinfixheight
+setlocal nowinfixwidth
+setlocal wrap
+setlocal wrapmargin=0
+silent! normal! zE
+let s:l = 103 - ((31 * winheight(0) + 31) / 63)
+if s:l < 1 | let s:l = 1 | endif
+exe s:l
+normal! zt
+103
+normal! 083l
+wincmd w
+argglobal
+edit main.h
+setlocal keymap=
+setlocal noarabic
+setlocal autoindent
+setlocal nobinary
+setlocal bufhidden=
+setlocal buflisted
+setlocal buftype=
+setlocal cindent
+setlocal cinkeys=0{,0},0),:,0#,!^F,o,O,e
+setlocal cinoptions=
+setlocal cinwords=if,else,while,do,for,switch
+setlocal colorcolumn=
+setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
+setlocal commentstring=/*%s*/
+setlocal complete=.,w,b,u,t,i
+setlocal concealcursor=
+setlocal conceallevel=0
+setlocal completefunc=
+setlocal nocopyindent
+setlocal cryptmethod=
+setlocal nocursorbind
+setlocal nocursorcolumn
+set cursorline
+setlocal cursorline
+setlocal define=
+setlocal dictionary=
+setlocal nodiff
+setlocal equalprg=
+setlocal errorformat=
+setlocal expandtab
+if &filetype != 'cpp'
+setlocal filetype=cpp
+endif
+setlocal foldcolumn=0
+setlocal foldenable
+setlocal foldexpr=0
+setlocal foldignore=#
+setlocal foldlevel=0
+setlocal foldmarker={{{,}}}
+setlocal foldmethod=manual
+setlocal foldminlines=1
+setlocal foldnestmax=20
+setlocal foldtext=foldtext()
+setlocal formatexpr=
+setlocal formatoptions=croql
+setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s*
+setlocal grepprg=
+setlocal iminsert=0
+setlocal imsearch=0
+setlocal include=
+setlocal includeexpr=
+setlocal indentexpr=
+setlocal indentkeys=0{,0},:,0#,!^F,o,O,e
+setlocal noinfercase
+setlocal iskeyword=@,48-57,_,192-255
+setlocal keywordprg=
+setlocal nolinebreak
+setlocal nolisp
+set list
+setlocal list
+setlocal makeprg=
+setlocal matchpairs=(:),{:},[:]
+setlocal nomodeline
+setlocal modifiable
+setlocal nrformats=octal,hex
+set number
+setlocal number
+setlocal numberwidth=4
+setlocal omnifunc=ccomplete#Complete
+setlocal path=
+setlocal nopreserveindent
+setlocal nopreviewwindow
+setlocal quoteescape=\\
+setlocal noreadonly
+set relativenumber
+setlocal relativenumber
+setlocal norightleft
+setlocal rightleftcmd=search
+setlocal noscrollbind
+setlocal shiftwidth=4
+setlocal noshortname
+setlocal nosmartindent
+setlocal softtabstop=4
+setlocal nospell
+setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+
+setlocal spellfile=
+setlocal spelllang=en
+setlocal statusline=
+setlocal suffixesadd=
+setlocal swapfile
+setlocal synmaxcol=3000
+if &syntax != 'cpp'
+setlocal syntax=cpp
+endif
+setlocal tabstop=8
+setlocal tags=
+setlocal textwidth=0
+setlocal thesaurus=
+setlocal undofile
+setlocal nowinfixheight
+setlocal nowinfixwidth
+setlocal wrap
+setlocal wrapmargin=0
+silent! normal! zE
+let s:l = 25 - ((24 * winheight(0) + 31) / 63)
+if s:l < 1 | let s:l = 1 | endif
+exe s:l
+normal! zt
+25
+normal! 0
+wincmd w
+2wincmd w
+exe 'vert 1resize ' . ((&columns * 130 + 101) / 202)
+exe 'vert 2resize ' . ((&columns * 71 + 101) / 202)
+tabnext 2
+if exists('s:wipebuf')
+ silent exe 'bwipe ' . s:wipebuf
+endif
+unlet! s:wipebuf
+set winheight=1 winwidth=20 shortmess=filnxtToO
+let s:sx = expand("<sfile>:p:r")."x.vim"
+if file_readable(s:sx)
+ exe "source " . fnameescape(s:sx)
+endif
+let &so = s:so_save | let &siso = s:siso_save
+doautoall SessionLoadPost
+unlet SessionLoad
+" vim: set ft=vim :