diff --git a/.obsidian/appearance.json b/.obsidian/appearance.json index e428744d..3bd698de 100644 --- a/.obsidian/appearance.json +++ b/.obsidian/appearance.json @@ -1,7 +1,7 @@ { "theme": "system", "cssTheme": "Minimal", - "baseFontSize": 18, + "baseFontSize": 20.5, "enabledCssSnippets": [ "pdf_darkmode", "query_header_title", diff --git a/.obsidian/plugins/obsidian-minimal-settings/data.json b/.obsidian/plugins/obsidian-minimal-settings/data.json index 79f042de..443f29e6 100644 --- a/.obsidian/plugins/obsidian-minimal-settings/data.json +++ b/.obsidian/plugins/obsidian-minimal-settings/data.json @@ -8,7 +8,7 @@ "lineWidth": 40, "lineWidthWide": 5000, "maxWidth": 98, - "textNormal": 18, + "textNormal": 20.5, "textSmall": 13, "imgGrid": false, "imgWidth": "img-default-width", diff --git a/.obsidian/plugins/obsidian-spaced-repetition/data.json b/.obsidian/plugins/obsidian-spaced-repetition/data.json index 30cebc27..50fa8428 100644 --- a/.obsidian/plugins/obsidian-spaced-repetition/data.json +++ b/.obsidian/plugins/obsidian-spaced-repetition/data.json @@ -43,7 +43,7 @@ "singlelineCardSeparator": "::", "singlelineReversedCardSeparator": ":::" }, - "buryDate": "2024-03-29", + "buryDate": "2024-03-30", "buryList": [], "historyDeck": "" } \ No newline at end of file diff --git a/.obsidian/plugins/various-complements/histories.json b/.obsidian/plugins/various-complements/histories.json index 1b7fe198..edad89dd 100644 --- a/.obsidian/plugins/various-complements/histories.json +++ b/.obsidian/plugins/various-complements/histories.json @@ -1 +1 @@ -{"matrice hessienne":{"matrice hessienne":{"internalLink":{"count":2,"lastUpdated":1710324879177}}},"manim Ellipse":{"manim Ellipse":{"internalLink":{"count":1,"lastUpdated":1709296590359}}},"baptême":{"baptême":{"internalLink":{"count":5,"lastUpdated":1709864270370}}},"gradient":{"gradient":{"internalLink":{"count":1,"lastUpdated":1710325461961}}},"obsidian plugin tag and wordcloud":{"obsidian plugin tag and wordcloud":{"internalLink":{"count":1,"lastUpdated":1710345237714}}},"intersection de sous groupes":{"intersection de sous groupes":{"internalLink":{"count":1,"lastUpdated":1710465530327}}},"valeurs":{"valeurs":{"internalLink":{"count":1,"lastUpdated":1711459246780}}},"Learning APL":{"Learning APL":{"internalLink":{"count":1,"lastUpdated":1711584419388}}},"structure de donnés":{"structure de donnés":{"internalLink":{"count":1,"lastUpdated":1711621251914}}},"paramètre":{"paramètre":{"internalLink":{"count":1,"lastUpdated":1711621492446}}},"langage de programmation":{"langage de programmation":{"internalLink":{"count":1,"lastUpdated":1711621841863}}},"argument d'une fonction":{"argument d'une fonction":{"internalLink":{"count":1,"lastUpdated":1711624010397}}},"argument":{"argument":{"internalLink":{"count":2,"lastUpdated":1711624133731}}},"techniques de pkm":{"techniques de pkm":{"internalLink":{"count":1,"lastUpdated":1711627281333}}},"paradigme de programmation":{"paradigme de programmation":{"internalLink":{"count":5,"lastUpdated":1711667940041}}},"état":{"état":{"internalLink":{"count":1,"lastUpdated":1711628232311}}},"structure de données":{"structure de données":{"internalLink":{"count":1,"lastUpdated":1711643699590}}},"structures de données":{"structures de données":{"internalLink":{"count":1,"lastUpdated":1711644884793}}},"enregistrement":{"enregistrement":{"internalLink":{"count":1,"lastUpdated":1711668283936}}},"envoi de messages entre objets":{"envoi de messages entre objets":{"internalLink":{"count":1,"lastUpdated":1711742931869}}},"programmation structurée":{"programmation structurée":{"internalLink":{"count":1,"lastUpdated":1711764089506}}}} \ No newline at end of file +{"matrice hessienne":{"matrice hessienne":{"internalLink":{"count":2,"lastUpdated":1710324879177}}},"manim Ellipse":{"manim Ellipse":{"internalLink":{"count":1,"lastUpdated":1709296590359}}},"baptême":{"baptême":{"internalLink":{"count":5,"lastUpdated":1709864270370}}},"gradient":{"gradient":{"internalLink":{"count":1,"lastUpdated":1710325461961}}},"obsidian plugin tag and wordcloud":{"obsidian plugin tag and wordcloud":{"internalLink":{"count":1,"lastUpdated":1710345237714}}},"intersection de sous groupes":{"intersection de sous groupes":{"internalLink":{"count":1,"lastUpdated":1710465530327}}},"valeurs":{"valeurs":{"internalLink":{"count":1,"lastUpdated":1711459246780}}},"Learning APL":{"Learning APL":{"internalLink":{"count":1,"lastUpdated":1711584419388}}},"structure de donnés":{"structure de donnés":{"internalLink":{"count":1,"lastUpdated":1711621251914}}},"paramètre":{"paramètre":{"internalLink":{"count":1,"lastUpdated":1711621492446}}},"langage de programmation":{"langage de programmation":{"internalLink":{"count":1,"lastUpdated":1711621841863}}},"argument d'une fonction":{"argument d'une fonction":{"internalLink":{"count":1,"lastUpdated":1711624010397}}},"argument":{"argument":{"internalLink":{"count":2,"lastUpdated":1711624133731}}},"techniques de pkm":{"techniques de pkm":{"internalLink":{"count":1,"lastUpdated":1711627281333}}},"paradigme de programmation":{"paradigme de programmation":{"internalLink":{"count":5,"lastUpdated":1711667940041}}},"état":{"état":{"internalLink":{"count":3,"lastUpdated":1711905774038}}},"structure de données":{"structure de données":{"internalLink":{"count":1,"lastUpdated":1711643699590}}},"structures de données":{"structures de données":{"internalLink":{"count":2,"lastUpdated":1711904665130}}},"enregistrement":{"enregistrement":{"internalLink":{"count":1,"lastUpdated":1711668283936}}},"envoi de messages entre objets":{"envoi de messages entre objets":{"internalLink":{"count":1,"lastUpdated":1711742931869}}},"programmation structurée":{"programmation structurée":{"internalLink":{"count":1,"lastUpdated":1711764089506}}},"effet de bord":{"effet de bord":{"internalLink":{"count":2,"lastUpdated":1711906516742}}},"programmation impérative":{"programmation impérative":{"internalLink":{"count":2,"lastUpdated":1711904255737}}},"composition de fonctions":{"composition de fonctions":{"internalLink":{"count":1,"lastUpdated":1711904385231}}},"fonction":{"fonction":{"internalLink":{"count":2,"lastUpdated":1711904857369}}}} \ No newline at end of file diff --git a/.obsidian/plugins/zotlit/data.json b/.obsidian/plugins/zotlit/data.json index ecf4c2d5..932d3fb9 100644 --- a/.obsidian/plugins/zotlit/data.json +++ b/.obsidian/plugins/zotlit/data.json @@ -4,7 +4,7 @@ "showCitekeyInSuggester": true, "literatureNoteFolder": "sources/zotero", "enableServer": true, - "serverPort": 9091, + "serverPort": 9092, "serverHostname": "127.0.0.1", "template": { "folder": "templates/zotero", diff --git a/.trash/Untitled 2 5.md b/.trash/Untitled 2 5.md new file mode 100644 index 00000000..e69de29b diff --git a/APL combinateurs.md b/APL combinateurs.md index 15585f0f..3872a419 100644 --- a/APL combinateurs.md +++ b/APL combinateurs.md @@ -1,11 +1,9 @@ --- -alias: ["combinateur", "combinateurs"] +aliases: [] --- -up::[[APL]] +up::[[APL]], [[combinateur]] #informatique ---- - # Beside ∘ **Beside**, **Compose**, **After** Composition de fonctions diff --git a/Frédéric Lordon.md b/Frédéric Lordon.md new file mode 100644 index 00000000..c61a53c4 --- /dev/null +++ b/Frédéric Lordon.md @@ -0,0 +1,12 @@ +title:: +link:: +#personne + + +```dataview +TABLE title, description, elink(link) as "link" +FROM "" +WHERE contains(author, this.file.link) +``` + + diff --git a/combinateur.md b/combinateur.md new file mode 100644 index 00000000..21ec7a08 --- /dev/null +++ b/combinateur.md @@ -0,0 +1,6 @@ +up:: [[programmation]] +#informatique #maths/algèbre + +> [!definition] combinateur +> +^definition \ No newline at end of file diff --git a/compétence vs qualification.md b/compétence vs qualification.md index fa488d01..96d6c5ea 100644 --- a/compétence vs qualification.md +++ b/compétence vs qualification.md @@ -2,8 +2,6 @@ up:: [[compétence]], [[qualification]] source:: [[conférence gesticulée.Inculture]] #apprendre #politique ---- - > La qualification permet de définir un poste de travail en termes de missions, tandis que la compétence permet de définir la capacité d'un salarié à s'adapter à une situation professionnelle. [Maxicours](https://www.maxicours.com/se/cours/les-conditions-de-travail-les-qualifications-et-les-competences/#:~:text=La%20qualification%20permet%20de%20d%C3%A9finir,adapter%20%C3%A0%20une%20situation%20professionnelle) @@ -12,12 +10,12 @@ source:: [[conférence gesticulée.Inculture]] - "concret" - s'inscrit dans un [[importance des corps de métier|corps de métier]] - [[compétence]] : **savoir-être** - - capacité à "obéir aux ordres" de la hiérarchie + - capacité à "obéir aux ordres" de la hiérarchie (toujours dans un contexte de hiérarchie) - est plus individuel L'utilisation de **compétences** plutôt que de qualifications permet - de [[poser des questions sur ce qu'on a pas appris]] - - on ne juge plus sur les qualifications, mais sur des compétences, commen la capacité à s'adapter à l'imprévu etc. + - on ne juge plus sur les qualifications, mais sur des compétences, comme la capacité à s'adapter à l'imprévu etc. - de diviser : chacun a sa propre compétence - contrairement aux [[qualification|qualifications]], qui peuvent être des [[qualification#^00d369|qualification collectives]], les compétences sont uniquement individuelles - pas de [[importance des corps de métier|corps de métier]], donc pas de [[syndicalisme]] ou de [[militantisme]] diff --git a/enseigner implique de construire des modèles.md b/enseigner implique de construire des modèles.md new file mode 100644 index 00000000..bf1fcce7 --- /dev/null +++ b/enseigner implique de construire des modèles.md @@ -0,0 +1,11 @@ +up:: [[enseigner la programmation]] +#informatique #apprendre + +Les modèles se retrouvent partout dans l'enseignement. + +> [!cite]+ [Form and Content in Computer Science (1970 ACM turing lecture)](zotero://select/groups/5383243/items/FJG2FWGG) - [Page 9](zotero://open-pdf/groups/5383243/items/H39XI9D9?page=9&annotation=CCMAKXHC) +> - To help people learn is to help them build, in their heads, various kinds of computational models. +> - This can best be done by a teacher who has, in his head, a reasonable model of what is in the pupil's head. +> - For the same reason the student, when debugging his own models and procedures, should have a model of what he is doing, and must know good debugging techniques, such as how to formulate simple but critical test cases. +> - It will help the student to know something about computational models and programming. The idea of debugging itself, for example, is a very powerful concept - in contrast to the helplessness promoted by our cultural heritage about gifts, talents, and aptitudes. The latter encourages "I'm not good at this" instead of "How can I make myself better at it?" +> ^CCMAKXHCaH39XI9D9g5383243p9 \ No newline at end of file diff --git a/enseigner la programmation.md b/enseigner la programmation.md new file mode 100644 index 00000000..7f269010 --- /dev/null +++ b/enseigner la programmation.md @@ -0,0 +1,2 @@ +up:: [[programmation]] +#informatique \ No newline at end of file diff --git a/fermeture.md b/fermeture.md new file mode 100644 index 00000000..656674f8 --- /dev/null +++ b/fermeture.md @@ -0,0 +1,27 @@ +up:: [[programmation.fonction|fonction]] +#informatique + +> [!definition] fermeture +> En programmation, la fermeture, ou clôture (de l'anglais *closure*) est une fonction accompagnée de son environnement lexical (les variables en dehors de son environnement local qu'elle a pourtant capturé). +> Cela permet notamment d'utiliser un contexte d'exécution +^definition + + +> [!cite]+ [Programming Paradigms for Dummies: What Every Programmer Should Know](zotero://select/groups/5383243/items/673TMQRT) - [Page 24](zotero://open-pdf/groups/5383243/items/P4L4LCJZ?page=16&annotation=BRVCUS8M) +> From an implementation viewpoint, a closure combines a procedure with its external references (the references it uses at its definition). +> +> > [!note] Notes +> > fermeture = combiner une fonction avec ses références externes +> ^BRVCUS8MaP4L4LCJZg5383243p16 + +> [!cite]+ [Programming Paradigms for Dummies: What Every Programmer Should Know](zotero://select/groups/5383243/items/673TMQRT) - [Page 24](zotero://open-pdf/groups/5383243/items/P4L4LCJZ?page=16&annotation=6H6T7X9L) +> From the programmer’s viewpoint, a closure is a “packet of work”: a program can transform any instructions into a closure at one point in the program, pass it to another point, and decide to execute it at that point. The result of its execution is the same as if the instructions were executed at the point the closure was created. +> +> > [!note] Notes +> > fermeture := permet que le résultat soit le même que si les instructions étaient éxécutées à l'endroit où la fermeture à été créée. +> ^6H6T7X9LaP4L4LCJZg5383243p16 + +> [!cite]+ [Fermeture (informatique)](zotero://select/groups/5383243/items/ZKL3R2ZE) - [Page ](zotero://open-pdf/groups/5383243/items/JNZ49HIA?annotation=P8UFCIK5) +> Dans un langage de programmation, une fermeture ou clôture (en anglais : closure) est une fonction accompagnée de son environnement lexical. L'environnement lexical d'une fonction est l'ensemble des variables non locales qu'elle a capturées, soit par valeur (c'est-à-dire par copie des valeurs des variables), soit par référence (c'est-à-dire par copie des adresses mémoires des variables)[1]. Une fermeture est donc créée, entre autres, lorsqu'une fonction est définie dans le corps d'une autre fonction et utilise des paramètres ou des variables locales de cette dernière. +> ^P8UFCIK5aJNZ49HIAg5383243 + diff --git a/fonction d'ordre supérieur.md b/fonction d'ordre supérieur.md new file mode 100644 index 00000000..96170306 --- /dev/null +++ b/fonction d'ordre supérieur.md @@ -0,0 +1,22 @@ +--- +aliases: [] +--- +up:: [[programmation.fonction|fonction]] +sibling:: [[fonction de première classe]] + +> [!definition] fonction d'ordre supérieur +> Une [[programmation.fonction|fonction]] qui possède au moins une des propriétés suivantes : +> - elle prend une ou plusieurs [[programmation.fonction|fonctions]] en entrée +> - elle renvoie une [[programmation.fonction|fonction]] +^definition + +> [!cite]- [Fonction d'ordre supérieur](zotero://select/groups/5383243/items/NPLAN6RU) - [Page ](zotero://open-pdf/groups/5383243/items/94RE4PDX?annotation=YZKT9G5G) +> En mathématiques et en informatique, les fonctions d'ordre supérieur sont des fonctions qui ont au moins une des propriétés suivantes : +> +> elles prennent une ou plusieurs fonctions en entrée ; +> elles renvoient une fonction. +> ^YZKT9G5Ga94RE4PDXg5383243 + + +> [!info] Autres noms +> En mathématiques, les fonctions d'ordre supérieur sont aussi appelées [[opérateur|opérateurs]] ou [[fonctionnelle|fonctionnelles]] diff --git a/fonction de première classe.md b/fonction de première classe.md index dfd90f52..34d1548b 100644 --- a/fonction de première classe.md +++ b/fonction de première classe.md @@ -3,5 +3,8 @@ up:: [[citoyen de première classe]] > [!definition] fonction de première classe > Une fonction de première classe est une [[programmation.fonction|fonction]] qui est traîtée comme un [[citoyen de première classe]]. -> Cela implique qu'elle peut être +> Cela implique qu'elle peut être traîtée comme n'importe quelle autre valeur du langage, par exemple : +> - être exprimée anonymenent +> - être affectée à des variables, être mises dans des [[structure de données|structures de données]] +> - être passée en paramètres à une autre [[fonction]] (voir [[fonction d'ordre supérieur]]) ^definition \ No newline at end of file diff --git a/fonction pure.md b/fonction pure.md index fe00a814..c106748b 100644 --- a/fonction pure.md +++ b/fonction pure.md @@ -2,13 +2,13 @@ up:: [[programmation.fonction|fonction]] #informatique > [!definition] fonction pure -> Une fonction pure est une fonction **sans [[programmation.effet de bord|effets de bord]]**, c'est-à-dire qu'elle ne peut pas modifier (durablement) l'état du système. -> En particulier : -> - Elle ne peut pas modifier autre chose que son champ local (qui doit mourir en même temps que la dite fonction) -> - Elle ne peut pas [[programmation.modification des paramètres]] +> Une fonction pure est une fonction : +> - déterministe (les mêmes entrée donnent toujours les mêmes valeurs) +> - sans [[programmation.effet de bord|effet de bord]] ^definition + > [!cite]- [What Is Functional Programming?](zotero://select/groups/5383243/items/TLUTFXJ8) - [Page ](zotero://open-pdf/groups/5383243/items/8P4TX53J?annotation=S979DXY2) > A function is called 'pure' if all its inputs are declared as > inputs - none of them are hidden - and likewise all its outputs are diff --git a/images/zotero/53832433TVGD5RH.png b/images/zotero/53832433TVGD5RH.png new file mode 120000 index 00000000..5b7c308c --- /dev/null +++ b/images/zotero/53832433TVGD5RH.png @@ -0,0 +1 @@ +/Users/oscarplaisant/Zotero/cache/groups/5383243/3TVGD5RH.png \ No newline at end of file diff --git a/images/zotero/538324358PSUPND.png b/images/zotero/538324358PSUPND.png new file mode 120000 index 00000000..32e5fa84 --- /dev/null +++ b/images/zotero/538324358PSUPND.png @@ -0,0 +1 @@ +/Users/oscarplaisant/Zotero/cache/groups/5383243/58PSUPND.png \ No newline at end of file diff --git a/images/zotero/5383243WSXGN3RM.png b/images/zotero/5383243WSXGN3RM.png new file mode 120000 index 00000000..632471d2 --- /dev/null +++ b/images/zotero/5383243WSXGN3RM.png @@ -0,0 +1 @@ +/Users/oscarplaisant/Zotero/cache/groups/5383243/WSXGN3RM.png \ No newline at end of file diff --git a/le capitalisme à imposé le salariat comme unique moyen d'accès à l'argent.md b/le capitalisme à imposé le salariat comme unique moyen d'accès à l'argent.md index a9980982..a856501b 100644 --- a/le capitalisme à imposé le salariat comme unique moyen d'accès à l'argent.md +++ b/le capitalisme à imposé le salariat comme unique moyen d'accès à l'argent.md @@ -3,6 +3,7 @@ aliases: - salariat comme unique moyen d'accès à l'argent --- up:: [[capitalisme]], [[salaire]] +author:: [[Frédéric Lordon]] #politique > La grande force du capitalisme, c'est d'avoir imposé le salariat comme quasi-unique solution d'accès à l'argent. diff --git a/paradigme programmation fonctionnelle.md b/paradigme programmation fonctionnelle.md index 9830d531..77509c09 100644 --- a/paradigme programmation fonctionnelle.md +++ b/paradigme programmation fonctionnelle.md @@ -6,7 +6,13 @@ up:: [[paradigme de programmation|paradigme]] #informatique > [!definition] programmation fonctionnelle -> +> La programmation fonctionnelle est un paradigme de programmation dans lequel : +> - les programmes sont exprimés comme des arbres d'expressions +> - le contrôle de flot est fait en combinant des fonctions plutôt qu'en assignant des valeurs +> - utiliser des [[fonction d'ordre supérieur]] +> - ne pas utiliser d'[[programmation.état|état]] +> - ne pas utiliser d'entrée/sortie cachée (en sortant du champ local) +> - ^definition # Définitions @@ -22,3 +28,30 @@ up:: [[paradigme de programmation|paradigme]] > outputs. > ^IU2KWY7La8P4TX53Jg5383243 +> [!cite]+ [Why Functional Programming Matters](zotero://select/groups/5383243/items/6RZUZSFR) - [Page 1](zotero://open-pdf/groups/5383243/items/H9SGRTMQ?page=1&annotation=WSXGN3RM) +> ![[images/zotero/5383243WSXGN3RM.png|500]] +> +> > [!note] Notes +> > programme écrit comme des fonctions qui reçoivent l'entrée en argument et renvoie le résultat. +> ^WSXGN3RMaH9SGRTMQg5383243p1 + + + +# Avantages + +La programmation fonctionnelle permet : + +- d'éviter les [[programmation.effet de bord|effets de bord]], puisqu'ils sont intertits / impossibles. + - une fonction n'a aucun autre effet que de calculer son résultat + - ordre d'éxécution indifférent + - aucun [[programmation.effet de bord|effet de bord]] ne peut changer la valeur d'une expression, elle peut être évaluée n'importe quand + - permet de ne pas s'occuper du contrôle de flot + - permet de remplacer une expression par sa valeur sans changer le résultat +- d'être plus proche du formalisme mathématique + - les fonctions en programmation sont proches des fonctions en programmation fonctionnelle + - cela permet de mieux appliquer les théories mathématiques + +> [!cite]+ [Why Functional Programming Matters](zotero://select/groups/5383243/items/6RZUZSFR) - [Page 1](zotero://open-pdf/groups/5383243/items/H9SGRTMQ?page=1&annotation=58PSUPND) +> ![[images/zotero/538324358PSUPND.png|500]] +> ^58PSUPNDaH9SGRTMQg5383243p1 + diff --git a/paradigme programmation structurée.md b/paradigme programmation structurée.md index 9ff45bb1..9a2a8ac9 100644 --- a/paradigme programmation structurée.md +++ b/paradigme programmation structurée.md @@ -6,6 +6,13 @@ up:: [[paradigme de programmation]] #informatique > [!definition] programmation structurée +> La programmation structurée est un type de [[paradigme programmation impérative|programmation impérative]] dans lequel : +> - il n'existe pas d'instruction `goto` +> - les blocks d'un programme n'ont pas d'entrées ou de sorties multiples +> - cela restreint les types d'instructions (notamment les instructions de contrôle de flot) +^definition + +> [!definition] programmation structurée - Définition comme méthode > La programmation structurée est un paradigme de programmation qui consiste en une méthode pour résoudre des problèmes. > étant donné un problème, on utilise deux étapes pour le résoudre : > 1. raffinement progressif @@ -16,7 +23,18 @@ up:: [[paradigme de programmation]] > - *bottom-top* > - Implémenter les sous-problèmes, des plus concrets aux plus abstraits > - encapsuler tous les détails d'implémentation : **cacher les détails** -^definition +^definition-methode + +> [!definition] programmation structurée - Définition par rapport aux conséquences +> Un programme structuré, en opposition à un programme non-strucutré, est designé de façon **modulaire**. +> La modularité améliore la productivité +> - des petits modules peuvent être codés rapidement et façilement +> - des modules généraux peuvent être réutilisés +> - les modules peuvent être testés indépendamment (réduit le temps de débuggage) +> +> > [!cite]+ [Why Functional Programming Matters](zotero://select/groups/5383243/items/6RZUZSFR) - [Page 2](zotero://open-pdf/groups/5383243/items/H9SGRTMQ?page=2&annotation=3TVGD5RH) +> > ![[images/zotero/53832433TVGD5RH.png|500]] +> > ^3TVGD5RHaH9SGRTMQg5383243p2 # Citations diff --git a/programmation.effet de bord.md b/programmation.effet de bord.md index afc7c78d..8d4dc5bd 100644 --- a/programmation.effet de bord.md +++ b/programmation.effet de bord.md @@ -2,6 +2,7 @@ aliases: - effet de bord - side effect + - effets de bord --- up:: [[programmation]] #informatique diff --git a/programmation.fonction.md b/programmation.fonction.md index 39caad34..5f864ec6 100644 --- a/programmation.fonction.md +++ b/programmation.fonction.md @@ -1,6 +1,7 @@ --- aliases: - fonction + - fonctions --- up:: [[programmation]] #informatique \ No newline at end of file