From dfb7ec15b5f20ea7a5c47f625fb731ce148b184d Mon Sep 17 00:00:00 2001 From: Ache Date: Sun, 7 Aug 2016 20:21:53 +0200 Subject: Init commit --- Makefile | 9 + article.c | 72 +++++++ article/_liste | 1 + article/article.txt | 12 ++ article/des.txt | 11 ++ article/duckduckgo.txt | 37 ++++ article/leC.txt | 87 +++++++++ article/quisuis.txt | 48 +++++ article/quisuisje.txt | 48 +++++ description | 1 + design/.design.css.swp | Bin 0 -> 12288 bytes design/.sommaire.css.swp | Bin 0 -> 12288 bytes design/cloud.svg | 17 ++ design/commentaire.css | 47 +++++ design/confirmation.css | 96 ++++++++++ design/contenu.css | 174 +++++++++++++++++ design/design.css | 57 ++++++ design/sommaire.css | 104 ++++++++++ dev.c | 82 ++++++++ index.html | 73 +++++++ main.c | 453 +++++++++++++++++++++++++++++++++++++++++++ main.h | 26 +++ res/DuckDuckGo_Logo.png | Bin 0 -> 14784 bytes res/DuckDuckGo_Logo.svg | 70 +++++++ res/ache.ico | Bin 0 -> 1094 bytes res/ache.svg | 28 +++ res/acheVersionAlpha.xpi | Bin 0 -> 6406 bytes res/emploi du temps TS3.pdf | Bin 0 -> 1210901 bytes res/gith.svg | 2 + res/rss.svg | 8 + res/tw.svg | 21 ++ res/twit.svg | 17 ++ res/wtf.svg | 28 +++ res/zeroClickBox1.png | Bin 0 -> 33536 bytes session_dev.vim | 458 ++++++++++++++++++++++++++++++++++++++++++++ 35 files changed, 2087 insertions(+) create mode 100644 Makefile create mode 100755 article.c create mode 100755 article/_liste create mode 100755 article/article.txt create mode 100755 article/des.txt create mode 100755 article/duckduckgo.txt create mode 100755 article/leC.txt create mode 100755 article/quisuis.txt create mode 100755 article/quisuisje.txt create mode 100644 description create mode 100755 design/.design.css.swp create mode 100755 design/.sommaire.css.swp create mode 100755 design/cloud.svg create mode 100755 design/commentaire.css create mode 100755 design/confirmation.css create mode 100755 design/contenu.css create mode 100755 design/design.css create mode 100755 design/sommaire.css create mode 100644 dev.c create mode 100755 index.html create mode 100755 main.c create mode 100755 main.h create mode 100644 res/DuckDuckGo_Logo.png create mode 100644 res/DuckDuckGo_Logo.svg create mode 100644 res/ache.ico create mode 100755 res/ache.svg create mode 100755 res/acheVersionAlpha.xpi create mode 100755 res/emploi du temps TS3.pdf create mode 100755 res/gith.svg create mode 100755 res/rss.svg create mode 100755 res/tw.svg create mode 100755 res/twit.svg create mode 100755 res/wtf.svg create mode 100755 res/zeroClickBox1.png create mode 100644 session_dev.vim 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é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 +
Voilà ! C'est fait quelques temps que je souhaitais remetre à jour ce site/blog/portofolio ... Désormais ça c'est fait.
+ +

+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 "Qui suis-je" ou encore mes réalisations. +

+ +

À propos de ce site

+ +

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 CGI. 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.

+ + 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 +
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.
+ +

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. +

+ +

À propos de ce site

+ +

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 CGI. 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.

+ + 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 +
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.

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

+

Bang !

+ +

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 !Bang en tappant "!Bang" dans DuckDuckGo.

+ + +

Zero Click Infobox

+

+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 calculatrice de Google 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 "399 999 999 999 999 - 399 999 999 999 998 = 0" 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 tech Goodies. Toutes les lister seraient trop long. +

+ +

Respect de la vie privée

+

+ 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 dontbubble.us 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 donttrack.us 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. +

+

Un Moteur de recherche proche de ses utilisateurs

+

+ DuckDuckGo est le seul moteur de recherche que je connaisse aussi ouvert et aussi à l'écoute de ses utilisateurs. DuckDuckGo vous permets d'ajouter vos propres !Bang 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, info trafique, ...), 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. Voir la plateforme de développement

+ +

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. +

+ 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éconnues du C|12/04/12|svg|http://ache.nyan.at/perso/ache[200*200].svg +
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.
+ +

+ 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. +

+ +

Le C de base

+
Depuis le C K&R, ces pratiques n'ont pas beaucoup évoluées mais sont pourtant méconues.
+

L'Opérateur virgule

+ +

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 ;) . +

+ +

Les opérateurs # et ##

+ +

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 .... +

+ +

Les unions

+

+ 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 ... +

+ +

Et depuis C89 et C99 ?

+

+ 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. +

+

L'initialisation des tableaux

+

+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. +

+

L'initialisation des structures

+

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}; +

+

Et depuis C11 ?

+ +

En matière d'obfuscation

+ +

L'obsucation est le fait rendre un code illisible par un humain en complexifiant la lecture d'un code tout en ...

+ +"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 +
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.
+ +

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. +

+ +

Tu programmes quoi ?

+

+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 Prog. Je suis particulièrement actif sur le SiteduZero, site spécialisé dans l'informatique, notamment sur le forum C ou je participe activement.

+ +

Niveau Professionel ?

+

+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. + +

+

Niveau personnel ?

+

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 Jeudi du SdZ @ Nantes.

+ +

Contact

+

+Vous pouvez me contacter par mail à l'adresse: Ache [at] kegtux [dot] org +Ou encore à l'adresse : +Ou encore sur le Sdz par MP. +Je suis habituellement très disponible. +

+

Autres informations

+

Je m'ammuse beaucoup à personaliser mon desktop, à créer des scripts, des images vectorielles, à bidouiller ma tour, ...

+ +
ScreenShoot
+

+Voici le Desk de mon OS principale. Un Ubuntu modifié utilisant awesome wm, tilda, ... + + +Le Desk de mon Kubuntu un peu plus dans le style glossy mais très sympa : + +

+
Ma config
+

Je l'ai monté à la suite d'un pari que j'ai gagné :D . J'en suis plutôt fier.

+
+
En gros, une configuration qui va certainement durer encore quelques années ...
+ + 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 +
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.
+ +

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. +

+ +

Tu programmes quoi ?

+

+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 Prog. Je suis particulièrement actif sur le SiteduZero, site spécialisé dans l'informatique, notamment sur le forum C ou je participe activement.

+ +

Niveau Professionel ?

+

+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. + +

+

Niveau personnel ?

+

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 Jeudi du SdZ @ Nantes.

+ +

Contact

+

+Vous pouvez me contacter par mail à l'adresse: Ache [at] kegtux [dot] org +Ou encore à l'adresse : +Ou encore sur le Sdz par MP. +Je suis habituellement très disponible. +

+

Autres informations

+

Je m'ammuse beaucoup à personaliser mon desktop, à créer des scripts, des images vectorielles, à bidouiller ma tour, ...

+ +
ScreenShoot
+

+Voici le Desk de mon OS principale. Un Ubuntu modifié utilisant awesome wm, tilda, ... + + +Le Desk de mon Kubuntu un peu plus dans le style glossy mais très sympa : + +

+
Ma config
+

Je l'ai monté à la suite d'un pari que j'ai gagné :D . J'en suis plutôt fier.

+
+
En gros, une configuration qui va certainement durer encore quelques années ...
+ + 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 Binary files /dev/null and b/design/.design.css.swp differ diff --git a/design/.sommaire.css.swp b/design/.sommaire.css.swp new file mode 100755 index 0000000..7a61c4d Binary files /dev/null and b/design/.sommaire.css.swp 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 @@ + + + + + SVG Animation - A New Cloud + + + + + + + + + + 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; +} +/* +
+
+
+
+
+
+
+
+
+
+
+

+ Voulez confirmez l'envoye de ce commentaire ? +
+
+*/ 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; +} +/* +
+
+
+
+

+ Voulez confirmez l'envoye de ce commentaire ? +
+
+
+
+*/ 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; +} + +/* +
+
Accueil
+
Blog
+
Liens
+
+*/ 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 +#include +#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é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 @@ + + DuckDuckGo, Google en mieux ? + +
Logo Article

http://ache.one/res/DuckDuckGo_Logo.svg

DuckDuckGo, Google en mieux ?

Posté le

+
+

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.

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


+
+
+
+
+ + 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("\n" + " " + " " + "%s" + "" + "" //" + "" + "" + "" + "" + "" + "\n" + , titre, description); +} +void end(FCGX_Request *req) +{ + puts("
"); + puts("" + ""); +} +void sideBar(FCGX_Request *req) { + puts(""); +} +void erreur(const char* motif, FCGX_Request *req) +{ + start("Erreur", "Page d'erreur", req); + puts("Error

"); + 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, "

Voir aussi :

"); + 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("
%s
", 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("
%s
", z, titre); + tab[i++] = z; + } + fclose(fichier); + } + printf("
"); +} +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( "
"); + switch(type) + { + case 0: + { + char tab[50] = {0}; + strncpy(tab, i, strrchr(i, '.')-i); + strcat(tab, ".png"); + printf("" + "\"Logo" + "

%s

" + "
",i,tab,i); + } + break; + case 1: + printf("\"%s\"", i, i); + break; + case 2: + printf("", i); + } + printf( + "
" + "

%s

" + "

Posté le

" + "
" + , t, year, month, day, d); + + puts("
"); + lireIntro(article, req); + puts("
"); + puts("
"); +} +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( + "
" + "
" + "

%s

" + "

Posté le

" + "
" + , t, year, month, day, d); + switch(type) + { + case 0: + { + char tab[50] = {0}; + strncpy(tab, i, strrchr(i, '.')-i); + strcat(tab, ".png"); + printf("" + "\"Logo" + "

%s

" + "
",i,tab,i); + } + break; + case 1: + printf("\"%s\"", i, i); + break; + case 2: + printf("", i); + } + puts("
"); + lireArticle(article, req); + puts("
"); + puts("
"); +} +#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", "
"); + else + { + c = fgetc (fichier); + switch(c) + { + CaSe(160, "à");// a + CaSe(162, "à"); + CaSe(164, "â"); + CaSe(128, "À"); + CaSe(130, "Â"); + CaSe(132, "Ä"); + CaSe(169, "é");//e + CaSe(168, "è"); + CaSe(170, "è"); + CaSe(171, "ë"); + CaSe(137, "É"); + CaSe(136, "È"); + CaSe(138, "Ê"); + CaSe(139, "Ë");// o + CaSe(180, "õ"); + CaSe(182, "ö"); + CaSe(148, "Ô"); + CaSe(150, "Ö");// u + CaSe(185, "ù"); + CaSe(187, "û"); + CaSe(188, "ü"); + CaSe(153, "Ù"); + CaSe(155, "Û"); + CaSe(156, "Ü"); + CaSe(174, "î");// i + CaSe(175, "ï"); + CaSe(142, "Î"); + CaSe(143, "Ï"); + CaSe(167, "ç");// c + CaSe(135, "Ç"); + 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", "
"); + else + { + c = fgetc (fichier); + switch(c) + { + CaSe(160, "à");// a + CaSe(162, "à"); + CaSe(164, "â"); + CaSe(128, "À"); + CaSe(130, "Â"); + CaSe(132, "Ä"); + CaSe(169, "é");//e + CaSe(168, "è"); + CaSe(170, "è"); + CaSe(171, "ë"); + CaSe(137, "É"); + CaSe(136, "È"); + CaSe(138, "Ê"); + CaSe(139, "Ë");// o + CaSe(180, "õ"); + CaSe(182, "ö"); + CaSe(148, "Ô"); + CaSe(150, "Ö");// u + CaSe(185, "ù"); + CaSe(187, "û"); + CaSe(188, "ü"); + CaSe(153, "Ù"); + CaSe(155, "Û"); + CaSe(156, "Ü"); + CaSe(174, "î");// i + CaSe(175, "ï"); + CaSe(142, "Î"); + CaSe(143, "Ï"); + CaSe(167, "ç");// c + CaSe(135, "Ç"); + default: + printf("%d", c); + } + } + } + fclose(fichier); + } +} +#undef putchar + + +#undef puts +#undef printf +/* +void confirmation(void) +{ + puts("
" + "
" + "
" + "
" + "
" + "
" + "
" + "
" + "
" + "
" + "
" + "

" + "Voulez confirmez l'envoye de ce ??? ? " + "
" + "
"); +}*/ +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 +#include +#include +#include +#include +#include +#include + +#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 Binary files /dev/null and b/res/DuckDuckGo_Logo.png 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 @@ + + + + + + + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/ache.ico b/res/ache.ico new file mode 100644 index 0000000..ba2b618 Binary files /dev/null and b/res/ache.ico 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/acheVersionAlpha.xpi b/res/acheVersionAlpha.xpi new file mode 100755 index 0000000..2f1b61a Binary files /dev/null and b/res/acheVersionAlpha.xpi differ diff --git a/res/emploi du temps TS3.pdf b/res/emploi du temps TS3.pdf new file mode 100755 index 0000000..738f4a1 Binary files /dev/null and b/res/emploi du temps TS3.pdf 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 @@ + + 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 @@ + + + + + + + + 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 @@ + + + + + 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 @@ + + + + + + + + + image/svg+xml + + + + + + + + \ 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 @@ + diff --git a/res/zeroClickBox1.png b/res/zeroClickBox1.png new file mode 100755 index 0000000..db92266 Binary files /dev/null and b/res/zeroClickBox1.png 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  +noremap c :silent s/^\V=escape(b:comment_leader,'\/') //e :nohlsearch +noremap  :silent s/^/=escape(b:comment_leader,'\/') / :nohlsearch +nnoremap  :Unite -start-insert file_rec/async +nmap  :TagbarToggle +noremap  * :Unite grep:.:: +nnoremap  s :Unite buffer +nnoremap  / :Unite grep:. +nnoremap  ! :tab sball +nnoremap  :x +nnoremap   :w +nnoremap   w +nnoremap  - s +nnoremap  t v +nnoremap   +noremap ,cu :silent s/^\V=escape(b:comment_leader,'\/') //e :nohlsearch +noremap ,cc :silent s/^/=escape(b:comment_leader,'\/') / :nohlsearch +nnoremap \l :set cursorline! +nnoremap \c :set cursorcolumn! +nnoremap cd :cd %:p:h +nmap gx NetrwBrowseX +nnoremap NetrwBrowseX :call netrw#NetrwBrowseX(expand(""),0) +nnoremap :make +nnoremap  +vnoremap  +inoremap  0i +inoremap  A +inoremap #de #define +inoremap #in< #include<> +nnoremap èè__ :set paste m`o``:set nopaste +nnoremap Ï :set paste m`O``:set nopaste +nnoremap ï :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(":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(":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 : -- cgit v1.2.3