Tu avais noté mon commentaire dans un coin à l'époque (qui n'est pas si lointaine d'ailleurs…) ou tu l'as recherché aujourd'hui ? :)
Ce dont je parlais dans ce commentaire ne correspond pas à un besoin perso, mais à des idées que j'avais eu suite à une formation d'entreprise SOA (somme toute assez barbante…). Mais comme tu me reprends sur ce qui pourrait m'être utile, je me permet de compléter ma pensée.
Le problème est que l'on enseigne souvent les choses à l'envers. Plutôt que d'expliquer un langage à travers un cadre théorique, l'enseignement consiste à se focaliser sur le langage lui même. Dans le cadre du TP, (et je peux le comprendre au vu du nombre d'heure consacrées dans le semestre), on a passé plus de temps à inférer le typage d'expressions sur des feuilles de papiers que de se poser la question sur ce qu'est un programme informatique. L'idée est bonne, mais à partir du moment où elle n'est pas expliquée (ni comprise), cela devient juste un cas d'école qui ne va pas plus loin que ça.
Dans le même ordre d'idée, j'aimerai bien qu'on explique l'intérêt des tests unitaires aux jeunes développeurs en leur mettant un bouquin de Karl Popper dans les mains plutôt que d'expliquer le fonctionnement de JUnit…
Malheureusement, je n'ai pas encore trouvé d'approche qui combinerait à la fois cette vision théorique et ses implications ; mais ma quête n'est pas finie.
Le tp consistait à écrire un transpilateur (scala -> ocaml en ocaml), ce qui semble être courant dans les TP de langage fonctionnel. Ça donne l'impression que le langage est réservé à ces usages, ce qui en bloque doublement l'accès :
un paradigme fonctionnel vu en quelques séances et pas assez approfondi
une mise en pratique qui est en fait un exemple théorique et qui n'appuie pas assez sur la programmation fonctionnelle moderne (le TP permet surtout d'apprendre à utiliser Printf)
Beaucoup d'étudiant étaient perdus, et plutôt que de leur donner envie d'en savoir davantage, je pense qu'ils garderont en souvenir un langage compliqué. C'est dommage, car les personnes qui sont formées aujourd'hui sont celles qui décideront des langages dominants pendant les 15 (20 ?) prochaines années.
Attention, SailFishOS est très bien sur le téléphone de Jolla, car Jolla a payé pour avoir la compatibilité android. Les autres ports vers les différents téléphones n'ont pas forcément accès au catalogue android, ce qui limite fortement les applications disponibles ! (par exemple sur le fairphone2)
Tu seras d'accord pour dire qu'il s'agit d'accéder élément par élément à une structure pour y appliquer un traitement. On peut le reformuler en disant qu'il s'agit d'appliquer un traitement sur l'ensemble des éléments de manière successive.
Dans ce cas, il n'est pas nécessaire d'avoir une fonction next qui serait typée ainsi :
valnext:'at->unit->'a(* Récupère l'élément suivant, on suppose que la structure garde en mémoire ce qui a déjà été parcouru *)
mais plutôt:
valiter:('a->unit)->'a->unit(* [iter f tree] applique f a chaque élément du graphe (on suppose que l'on s'intéresse aux effets de bord)*)valfold:('a->'b->'a)->'a->'bt->'a(* unifie le graphe sur une valeur unique de type 'a *)
Cela ne limite pas du tout le traitement de la structure, c'est même au contraire une manière commune de traiter les données.
Mais pour suivre le raisonnement jusqu'au bout, une fois que tu a utilisé les fonctions standards qui te renvoie une chaîne différente, tu n'as plus la garantie que la nouvelle chaîne est toujours valide.
Autant que cette contrainte soit rendue explicite.
J'imagine plutôt que le type trié + validé comme un type fantôme, c'est à dire que ta fonction de tri peut avoir la signature suivante :
type'asortedvalsort:string->stringsorted
Le type indique juste que le texte est trié est validé, mais il est tout à fait possible d'en extraire la chaîne donnée :
valextract:'asorted->'a
par contre les fonctions qui nécessitent d'avoir en entrée un type trié + validé nécessitent juste de prendre un type « 'a sorted » en paramètre.
C'est ce qui est utilisé dans la librairie js_of_ocaml : tous les types utilisé dans le code javascript sont de type Js.t, ce qui permet de séparer le type des données qui sont utilisées dans le code ocaml, et celles qui sont issues/destinée au code javascript.
Edit: Bon, c'est ça d'arriver après la tempête, cela a expliqué plus bas…
Ça dépend dans quel contexte tu te places. Dans un langage qui t'impose l'usage de classes et d'instances, alors utiliser des objets n'est pas un choix de conception. Au contraire, si tu as le choix d'utiliser un objet, un foncteur, ou une monade, alors on peut penser qu'opter pour l'un au l'autre relève d'un patron de conception.
Je rajouterai aussi que la monade ne s'applique pas vraiment dans le monde objet. C'est un design pattern de type (au sens de la théorie des types), et non pas du monde objet. Tout comme le visiteur n'a pas vraiment de sens dans un univers fonctionnel, le type Folddable n'a pas de sens dans le monde objet. Ça n'est pas pour rien que l'on parle de paradigme de programmations différents.
Je ne connais pas elm, mais ce que tu décris correspond tout à fait au problème auquel répond les monades. Ça permet de contenir un environnement et d'appliquer une fonction qui modifie l'environnement.
Il existe une grande littérature sur ce sujet, et je ne vais pas paraphraser ce que d'autres exprimeront mieux que moi, aussi je te renvoie vers la langage dans lequel les monades sont reines.
Chez jolla, le disque est sous-dimenssionné par rapport a ce que nécessite btrfs, et les utilisateurs qui ont trop rempli leur téléphone ont rencontré lenteur et blocage… La réponse qui a été donnée nécessite malheureusement de mettre les mains dans les rouages du téléphone.
(Mode troll)Les ws réinventent une couche d'échange au sein de la couche http, alors que rest utilise juste http correctement.(/Mode troll)
Je ne connais pas PHP, donc je ne peux pas répondre sur ce point, mais oui, il est possible de faire communiquer des applications dans des langages différents.
Comme dit plus haut, c'est un serveur de message. Mais c'est a prendre dans le cadre d'échange entre applications avec une haute charge de communication, un bus quoi. Sauf qu'elle peut garantir qu'aucun message ne sera perdu, et une bonne montée en charge.
Le paramétrage consiste ensuite à construire des routes pour aiguiller les messages (un peu comme avec syslog : on envoi le contenu vers un fichier, vers une base de données, vers un programme), ou appliquer des patterns sur le message (transformation, duplication, agrégation…).
Le cas de REST n'est qu'un exemple d'utilisation (chaque commande permettant la diffusion d'un message qui sera géré par une application dédiée, comme ça on découple le frontal du traitement), mais on peut l'envisager dans le cadre d'une application qui a besoin de répartition de charge (il suffit de mettre en place deux instances qui écoutent la même file), ou faire communiquer des applications différentes.
Je sais, dès l'apparition le mot au masculin m'avait surpris. Je pense qu'il est normal que l'on finisse par parler d' "une planète" mais ces derniers temps vu que les flux rss ont perdu en popularité, le mot n'était plus trop employé. Ce qui ne m'empeche pas de continuer à surveiller le mot pour voir si le glissement va s'opérer ou non..
Existe-t-il une regex permettant de valider une regex ?
De manière plus générale, est-ce qu'il est possible de savoir si une grammaire X peut être validée par regex ? (Je suppose qu'il doit y avoir un champs de recherche qui s'intéresse à ce genre de question ?)
[^] # Re: Et pendant ce temps, CamlLight poursuite sa route...
Posté par chimrod (site web personnel) . En réponse à la dépêche OCaml 4.03. Évalué à 4.
Tu avais noté mon commentaire dans un coin à l'époque (qui n'est pas si lointaine d'ailleurs…) ou tu l'as recherché aujourd'hui ? :)
Ce dont je parlais dans ce commentaire ne correspond pas à un besoin perso, mais à des idées que j'avais eu suite à une formation d'entreprise SOA (somme toute assez barbante…). Mais comme tu me reprends sur ce qui pourrait m'être utile, je me permet de compléter ma pensée.
Le problème est que l'on enseigne souvent les choses à l'envers. Plutôt que d'expliquer un langage à travers un cadre théorique, l'enseignement consiste à se focaliser sur le langage lui même. Dans le cadre du TP, (et je peux le comprendre au vu du nombre d'heure consacrées dans le semestre), on a passé plus de temps à inférer le typage d'expressions sur des feuilles de papiers que de se poser la question sur ce qu'est un programme informatique. L'idée est bonne, mais à partir du moment où elle n'est pas expliquée (ni comprise), cela devient juste un cas d'école qui ne va pas plus loin que ça.
Dans le même ordre d'idée, j'aimerai bien qu'on explique l'intérêt des tests unitaires aux jeunes développeurs en leur mettant un bouquin de Karl Popper dans les mains plutôt que d'expliquer le fonctionnement de JUnit…
Malheureusement, je n'ai pas encore trouvé d'approche qui combinerait à la fois cette vision théorique et ses implications ; mais ma quête n'est pas finie.
[^] # Re: Et pendant ce temps, CamlLight poursuite sa route...
Posté par chimrod (site web personnel) . En réponse à la dépêche OCaml 4.03. Évalué à 8.
Au cnam de Paris on a travaillé avec OCaml 3
Le tp consistait à écrire un transpilateur (scala -> ocaml en ocaml), ce qui semble être courant dans les TP de langage fonctionnel. Ça donne l'impression que le langage est réservé à ces usages, ce qui en bloque doublement l'accès :
Beaucoup d'étudiant étaient perdus, et plutôt que de leur donner envie d'en savoir davantage, je pense qu'ils garderont en souvenir un langage compliqué. C'est dommage, car les personnes qui sont formées aujourd'hui sont celles qui décideront des langages dominants pendant les 15 (20 ?) prochaines années.
[^] # Re: Turing phone
Posté par chimrod (site web personnel) . En réponse au journal Enfin un téléphone haut de gamme sous Ubuntu Touch. Évalué à 4.
Attention, SailFishOS est très bien sur le téléphone de Jolla, car Jolla a payé pour avoir la compatibilité android. Les autres ports vers les différents téléphones n'ont pas forcément accès au catalogue android, ce qui limite fortement les applications disponibles ! (par exemple sur le fairphone2)
# Relecture
Posté par chimrod (site web personnel) . En réponse au message Offre d'emploi - Chef de Projet - Expert Informatique - NOBATEK. Évalué à 6.
Vous vous êtes relu au moins ?
[^] # Re: Sérieusement ^^
Posté par chimrod (site web personnel) . En réponse à la dépêche OpenBSD 5.9. Évalué à 10.
Il travaille au panama ?
[^] # Re: Anselme Lanturlu
Posté par chimrod (site web personnel) . En réponse au journal Electronic Real World : Internet Packet Life. Évalué à 4.
Ça date des années 80 ??? On me l'a offert 15 ans plus tard et j'avais vraiment aimé cette bd. Tu viens de me faire prendre un coup de vieux là…
[^] # Re: c'est pas deja la cas avec la commande history ?
Posté par chimrod (site web personnel) . En réponse au message Historiser (logguer) toutes les commandes shell avec snoopy. Évalué à 3.
Tu vas me dire que faire Ctrl + D est plus compliqué que Mod4 + C ?
[^] # Re: Map-Reduce
Posté par chimrod (site web personnel) . En réponse au journal Données vs Code. Évalué à 4.
Reprenons ce que fait l'itérateur d'un point de vue fonctionnel.
Tu seras d'accord pour dire qu'il s'agit d'accéder élément par élément à une structure pour y appliquer un traitement. On peut le reformuler en disant qu'il s'agit d'appliquer un traitement sur l'ensemble des éléments de manière successive.
Dans ce cas, il n'est pas nécessaire d'avoir une fonction next qui serait typée ainsi :
mais plutôt:
Cela ne limite pas du tout le traitement de la structure, c'est même au contraire une manière commune de traiter les données.
[^] # Re: ouai
Posté par chimrod (site web personnel) . En réponse au journal Données vs Code. Évalué à 2.
Exact.
Mais pour suivre le raisonnement jusqu'au bout, une fois que tu a utilisé les fonctions standards qui te renvoie une chaîne différente, tu n'as plus la garantie que la nouvelle chaîne est toujours valide.
Autant que cette contrainte soit rendue explicite.
[^] # Re: ouai
Posté par chimrod (site web personnel) . En réponse au journal Données vs Code. Évalué à 3. Dernière modification le 30 mars 2016 à 21:44.
J'imagine plutôt que le type trié + validé comme un type fantôme, c'est à dire que ta fonction de tri peut avoir la signature suivante :
Le type indique juste que le texte est trié est validé, mais il est tout à fait possible d'en extraire la chaîne donnée :
par contre les fonctions qui nécessitent d'avoir en entrée un type trié + validé nécessitent juste de prendre un type « 'a sorted » en paramètre.
C'est ce qui est utilisé dans la librairie js_of_ocaml : tous les types utilisé dans le code javascript sont de type Js.t, ce qui permet de séparer le type des données qui sont utilisées dans le code ocaml, et celles qui sont issues/destinée au code javascript.
Edit: Bon, c'est ça d'arriver après la tempête, cela a expliqué plus bas…
[^] # Re: ForumProgrammation.SQL— Mysql piraté
Posté par chimrod (site web personnel) . En réponse au message Mysql piraté. Évalué à 5.
Sinon ça pourri la vie des gens…
[^] # Re: La joie de vivre
Posté par chimrod (site web personnel) . En réponse au journal AlphaGo remporte le premier match contre Lee Sedol. Évalué à 6.
C'est peut être ça, la prochaine de la révolution copernicienne :
Au final, nous sommes libre de vivre maintenant !
[^] # Re: Elm
Posté par chimrod (site web personnel) . En réponse au journal Et si JavaScript allait droit dans le mur ?. Évalué à 3.
Ça dépend dans quel contexte tu te places. Dans un langage qui t'impose l'usage de classes et d'instances, alors utiliser des objets n'est pas un choix de conception. Au contraire, si tu as le choix d'utiliser un objet, un foncteur, ou une monade, alors on peut penser qu'opter pour l'un au l'autre relève d'un patron de conception.
Je rajouterai aussi que la monade ne s'applique pas vraiment dans le monde objet. C'est un design pattern de type (au sens de la théorie des types), et non pas du monde objet. Tout comme le visiteur n'a pas vraiment de sens dans un univers fonctionnel, le type Folddable n'a pas de sens dans le monde objet. Ça n'est pas pour rien que l'on parle de paradigme de programmations différents.
[^] # Re: Elm
Posté par chimrod (site web personnel) . En réponse au journal Et si JavaScript allait droit dans le mur ?. Évalué à 2.
C'est pas possible d'écrire plutôt ?
[^] # Re: Elm
Posté par chimrod (site web personnel) . En réponse au journal Et si JavaScript allait droit dans le mur ?. Évalué à 5.
Je ne connais pas elm, mais ce que tu décris correspond tout à fait au problème auquel répond les monades. Ça permet de contenir un environnement et d'appliquer une fonction qui modifie l'environnement.
Il existe une grande littérature sur ce sujet, et je ne vais pas paraphraser ce que d'autres exprimeront mieux que moi, aussi je te renvoie vers la langage dans lequel les monades sont reines.
[^] # Re: Base de la position de Canonical
Posté par chimrod (site web personnel) . En réponse à la dépêche ZFS, Canonical et GPL. Évalué à 7.
Malheureusement pas toujours avec succès.
Chez jolla, le disque est sous-dimenssionné par rapport a ce que nécessite btrfs, et les utilisateurs qui ont trop rempli leur téléphone ont rencontré lenteur et blocage… La réponse qui a été donnée nécessite malheureusement de mettre les mains dans les rouages du téléphone.
[^] # Re: Merci pour vos explications
Posté par chimrod (site web personnel) . En réponse au message RabbitMQ: Comprendre ce que ça fait, à quoi ça sert et comment ça marche. Évalué à 0.
REST c'est à l'opposé du web-service !
(Mode troll)Les ws réinventent une couche d'échange au sein de la couche http, alors que rest utilise juste http correctement.(/Mode troll)
Je ne connais pas PHP, donc je ne peux pas répondre sur ce point, mais oui, il est possible de faire communiquer des applications dans des langages différents.
Tiens un exemple qui permet de faire de la distribution de tâche en python : http://www.celeryproject.org/
# C'est un courtier
Posté par chimrod (site web personnel) . En réponse au message RabbitMQ: Comprendre ce que ça fait, à quoi ça sert et comment ça marche. Évalué à 5.
Comme dit plus haut, c'est un serveur de message. Mais c'est a prendre dans le cadre d'échange entre applications avec une haute charge de communication, un bus quoi. Sauf qu'elle peut garantir qu'aucun message ne sera perdu, et une bonne montée en charge.
Le paramétrage consiste ensuite à construire des routes pour aiguiller les messages (un peu comme avec syslog : on envoi le contenu vers un fichier, vers une base de données, vers un programme), ou appliquer des patterns sur le message (transformation, duplication, agrégation…).
Le cas de REST n'est qu'un exemple d'utilisation (chaque commande permettant la diffusion d'un message qui sera géré par une application dédiée, comme ça on découple le frontal du traitement), mais on peut l'envisager dans le cadre d'une application qui a besoin de répartition de charge (il suffit de mettre en place deux instances qui écoutent la même file), ou faire communiquer des applications différentes.
[^] # Re: Planet Emacsen
Posté par chimrod (site web personnel) . En réponse au journal Quelques actualités autour de GNU Emacs. Évalué à 2.
Je sais, dès l'apparition le mot au masculin m'avait surpris. Je pense qu'il est normal que l'on finisse par parler d' "une planète" mais ces derniers temps vu que les flux rss ont perdu en popularité, le mot n'était plus trop employé. Ce qui ne m'empeche pas de continuer à surveiller le mot pour voir si le glissement va s'opérer ou non..
[^] # Re: Planet Emacsen
Posté par chimrod (site web personnel) . En réponse au journal Quelques actualités autour de GNU Emacs. Évalué à 2.
Tiens, on ne dit plus un planet ?
# Contacte les sites
Posté par chimrod (site web personnel) . En réponse au message Site de base de donnée de recette ouverte. Évalué à 4.
Tu peux demander aux sites de mettre ça en place. Peut-être que la demande n'a tout simplement pas été formulée…
Ça sera un moyen de voir si les données sont réellement libres !
[^] # Re: Ça manque de classes...
Posté par chimrod (site web personnel) . En réponse à la dépêche Travailler avec des expressions rationnelles. Évalué à 3.
Tu crois qu'on peut y voir un lien avec le fait de dessiner encore avec PovRay de nos jours ? (-:
[^] # Re: Question bête
Posté par chimrod (site web personnel) . En réponse à la dépêche Travailler avec des expressions rationnelles. Évalué à 2.
Merci beaucoup pour le détail de la réponse.
# Question bête
Posté par chimrod (site web personnel) . En réponse à la dépêche Travailler avec des expressions rationnelles. Évalué à 2.
Existe-t-il une regex permettant de valider une regex ?
De manière plus générale, est-ce qu'il est possible de savoir si une grammaire X peut être validée par regex ? (Je suppose qu'il doit y avoir un champs de recherche qui s'intéresse à ce genre de question ?)
# Bronsonisé ?
Posté par chimrod (site web personnel) . En réponse au journal Paul Kantner bronsonisé. Évalué à 5.
Ça veut dire quoi ?