[Atom] [Mail] [Twitter]
Liens : git · hacks · divers · cabale · buzz! · à propos +
Au menu
\/

De l'art de coder un blog (1/2)

Lire l'article · Voir tous les commentaires · Commenter
atom bases_de_données blog conception

# rz0
06.03.10, 00:10.

Tout en SSH. On a un jeu de scripts qui upload et met à jour via SSH. C’est dans tools/, dans les sources. Mais en gros, pour ajouter un article :
$ emacs 42-foo.text
$ make 42-foo.atom
$ make && make update
[ tag:blog.huoc.org,2010-03-06:comments/1267830651.26359 ]

# mecak
05.03.10, 23:04.

Et comment vous faites pour transférer les fichiers XML ? en FTP ?
[ tag:blog.huoc.org,2010-03-05:comments/1267826658.26359 ]

# rz0
02.03.10, 19:15.

@bluestorm, je dois t’avouer que je ne connais rien aux nouvelles normes SQL. Je me suis arrêté à SQL92, moi. :p M’enfin, ce détail mis à part, moi je trouve que des formes dénormalisées stockées en tant que cache, c’est pas si laid, comme concept ; on en avait parlé tous les deux, mais je vais le répéter pour les lecteurs du blog. Moi comme je vois ça, t’as une représentation maîtresse, normalisée, à partir de laquelle tu compiles des données sous une forme plus proche de ce que tu vas servir : hop, t’as ton cache.

@mecak, ouais j’ai le formulaire de commentaires à traiter, et c’est déjà suffisamment chiant comme ça. En plus, administration par HTTP ça demande un design, ça demande de sécuriser, etc.

Sinon, oui, on utilise mdown. Et euh pour les fichiers XML, la plupart proviennent de nous, donc c’est pas tellement un souci de les sécuriser, ceci dit ya une grosse regexp laide qui sert à filtrer le HTML et ne laisser que les éléments autorisés. Cf. libblog3/html.php dans les sources.

[ tag:blog.huoc.org,2010-03-02:comments/1267553703.13243 ]

# mecak
02.03.10, 17:47.

J'aime bien ta méthode de mise à jour du blog, les formulaires html sont plus chiants à traiter ;)
J'imagine que vous utilisez mdown pour la rédaction n'est ce pas ?
Comment fais tu pour sécuriser les fichiers XML ?
[ tag:blog.huoc.org,2010-03-02:comments/1267548437.13243 ]

# bluestorm
02.03.10, 09:46.

Bon alors déjà, une remarque sans intérêt pour tous les gens qui, comme moi, auront tiqué : "taxinomie" et "taxonomie" existent tous les deux, et sont autorisés par les dictionnaires renseignés à ce sujet. "Taxonomie" est le plus utilisé par les biologistes, donc il est possible que ce mot ait bercé vos études, mais c’est un anglicisme et les gens chics devraient plutôt utiliser "taxinomie".

J’ai été intéressé par ce billet; les choix de design, de structure des données, c’est toujours intéressant. Après, comme tu t’en doutes, moi qui ne m’intéresse pas beaucoup aux performances et qui aime bien la normalisation, j’ai frémi à l’idée que les tags d’un article soient stockés dans un simple champ texte. Pour ce genre de choses (stocker une liste arbitraire d’informations dans une colonne), j’utiliserais la structure ARRAY de PostgreSQL. Il me semble que c’est standard, mais que MySQL n’en a pas.

Effectivement, je serais moi aussi intéressé par des informations sur la façons dont des noSQL organiseraient ces données. S’il y en a qui passent par ici, qu’ils n’hésitent surtout pas à donner leur avis.

[ tag:blog.huoc.org,2010-03-02:comments/1267519612.10833 ]
/\ \/

Expression problem (2/3) : dualités somme/produit et fonctionnel/OO

Lire l'article · Voir tous les commentaires · Commenter
bluestorm caml conception extensibilité motifs_de_conception poo

# Drk-Sd
24.01.10, 18:56.

Mince. Je viens de lire les articles, et après le premier j’me suis dit : « ok c’est une introduction, dans le prochain il va parler des variants polymorphes », et finalement j’arrive et je vois de l’OO donc j’me dis : « bon tant pis, ça sera dans le 3e ». Et là j’regarde les commentaires et j’vois qu’en fait y’aura fort probablement pas de 3e article, du coup j’suis pas mal déçu. Parce que j’ai découvert les variants polymorphes y’a pas très longtemps et j’aurais bien aimé voir un exemple d’utilisation.

Bref, tout ça pour dire que je trouve le sujet des articles intéressant et que j’aimerais vraiment que tu fasses une suite !

[ tag:blog.huoc.org,2010-01-24:1264355790.692 ]

# bluestorm
12.12.09, 21:35.

J’ai un peu honte de l’avouer, mais la partie 3 n’est pas encore prête, et je ne suis pas sûre de la publier prochainement : ça demande du travail, je n’ai pas énormément de temps, et je suis plus motivé pour écrire d’autres choses ces temps ci (surtout au vu de l’indifférence tangible¹ qu’on rencontré les deux premières parties, sur un sujet que je trouve pourtant intéressant).

¹ : à l’exception des commentaires pertinent de toi et SpiceGuid; au passage (pour SpiceGuid), j’ai un peu farfouillé du côté du Pattern Calculus mentionné par SpiceGuid (indépendamment, mais je pense que nos sources se recoupent) et c’est effectivement intéressant, même si je me demande s’il ne promet pas un peu trop par rapport à ce qu’il apporte ; je ne suis pas encore assez loin pour m’en assurer.

Je compte évidemment parler des polymorphic variants. D’ailleurs, ces trois billets sont en fait nés d’une réaction au sujet du papier Code Reuse Through Polymorphic Variants de Jacques Garrigue.

J’ai jeté un coup d’oeil à ton lien d’Edward Kwett, mais ça m’a l’air un peu jeune : impossible de trouver quoi que ce soit sur la toile à ce sujet (à part le travail de l’auteur sur le monoidal parsing qui est certainement intéressant, j’avais lu des choses à ce sujet sur Planet Haskell), et ça sent un peu le projet ambitieux qui n’a pas encore porté ses fruits. Ce que je vois dans ce code c’est que les fonctionnalités qu’il met en avant, ensure et unifies, demanderaient un travail de preuve de programmes pour être correctement formalisées au niveau du langage, et que ce serait donc forcément un langage relativement "lourd", ou alors très restrictif.

Si tu t’intéresses à la formulation "informatique" de concepts mathématiques, je te conseille aussi de jeter un oeil aux travaux du projet Focal; il est maintenant plus orienté vers la sécurité, mais ils ont étudié la question de la présentation des arborescences d’objets mathématiques, avec en particulier le très intéressant article Les objets des mathématiques.

[ tag:blog.huoc.org,2009-12-12:1260650158.5981 ]

# Alp
10.12.09, 03:16.

Par ailleurs, ceci pourrait t'intéresser (ainsi que tes lecteurs) :
http://comonad.com/Category.ks-old
Un langage sur lequel bosse Edward Kmett. Ce fichier montre comment modéliser les catégories & compagnie dans son langage, il mélange pas mal polymorphisme nominal et structurel c'est plutôt impressionnant.
[ tag:blog.huoc.org,2009-12-10:1260411408.17876 ]

# Alp
10.12.09, 02:55.

J'espère que la partie 3 mentionnera les polymorphic variants... C'est l'un des trucs que je trouve splendide en OCaml.
[ tag:blog.huoc.org,2009-12-10:1260410149.17876 ]

# SpiceGuid
18.10.09, 19:56.

Je pense que le motif de conception POO dont tu parles est connu sous le nom de Interpréteur. Le motif Composite n'a aucun intérêt pour un programmeur Caml, c'est juste un type union mal typé (on peut manipuler les enfants d'une feuille).
[ tag:blog.huoc.org,2009-10-18:1255888580.7462 ]
/\ \/

Expression problem (1/3) : sommes fermées, sommes ouvertes

Lire l'article · Voir tous les commentaires · Commenter
bluestorm caml conception extensibilité typage

# SpiceGuid
25.10.09, 16:08.

Le problème de l'expression vient de ce que le découpage par les fonctions (programmation fonctionnelle) ou par les données (POO) s'excluent l'un et l'autre et qu'on a pas d'abstraction unifiée pour les deux. Ce problème est élégamment résolu par le pattern calculus, où on a droit à des variables libres dans les motifs qui deviennent des citoyens de première classe qui subsument à la fois les données et les fonctions. Un point remarquable c'est que le pattern calculus reste typable statiquement, pour une implantation en OCaml voir le langage Bondi de Barry Jay. En plus de résoudre l'expression problem le pattern calculus offre une approche rigoureuse pour repenser certains autres motifs de conception à la frontière de plusieurs paradigmes (par exemple iterators en POO vs. zippers en fonctionnel).
[ tag:blog.huoc.org,2009-10-25:1256483304.27322 ]

# bluestorm
03.10.09, 10:21.

Je ne connais pas d’exemple concret utilisant explicitement l’extensibilité dans les deux directions à grande échelle, mais je ne me suis pas non plus beaucoup intéressé au code des gros projets logiciels existant dans les langages qui proposent ce genre d’outils. Je connais par contre des cas où cette extensibilité pourrait être profitable pour améliorer le design d’une application déjà existante.

Un exemple générique est le cas où tu veux étendre ton couple (données, opérations) de deux manières différentes, indépendamment. Si tu n’as pas de solution sans modification du code, tu es obligé soit de faire cohabiter les deux extensions au même endroit (en rajoutant de vieux hack du genre "si le booléen machin faut false, on vérifie au runtime l’absence des données de ce genre là"), soit de dupliquer ton couple initial pour le modifier séparément. Les deux solutions donnent lieu à des problèmes de maintenance non négligeables, et la première détruit en plus la sûreté langage de ton application.

Un cas particulier de ce cas général est assez courant, c’est celui où tu veux étendre ton couple (données, opérations), mais en conservant à côté la version initiale, parce que les deux sont pertinents dans ton application. Typiquement, imagine l’auteur d’un compilateur ou interpréteur Lisp, qui a commencé par coder son langage sans supporter les macros. Il a envie de rajouter les macros, qu’il définit comme un "sucre syntaxique" par dessus le langage de base : il y a un langage étendu (langage de base + macros) et une passe de désucrification qui applique toutes les macros et te renvoie le programme entièrement dans le langage de base. Pour faire ça on a besoin d’une représentation, simultanément, du langage de base et du langage étendu. Dans ce cas, tu te retrouves souvent à avoir besoin d’extensibilité dans les deux directions.
Ce qui est fait en pratique, dans les outils que je connais, c’est soit d’abandonner des garanties de typage (en oubliant le langage de base, mais en garantissant que les données que tu fournis aux passes ultérieures, bien que typées "langage avec macro", n’utilisent aucune des constructions macro-esques; inutile de préciser que ça fait des trucs un peu moches), soit de dupliquer les structures de données, ce qui donne lieu à la production d’une certaine quantité de code boilerplate (par exemple tu codes une fonction "map" sur ton langage de base puis ton langage étendu, sans pouvoir réutiliser la première pour coder la deuxième car les types sont disjoints).
Les alternatives plus extensibles (ici on pense très fort aux polymorphic variants de OCaml que je compte mentionner dans un futur billet) permettraient de résoudre le problème, mais viennent aussi avec leurs inconvénients (des messages d’erreurs de typage un peu plus lourds, mais surtout c’est plus sophistiqué donc il faut l’apprendre et ça fait peur) qui font que les programmeurs préfèrent souvent encore the good old way.

[ tag:blog.huoc.org,2009-10-03:1254558079.17527 ]

# Cygal
30.09.09, 19:46.

C'est intéressant, surtout via les parallèles avec Macaque, où on se rend compte que certes le typage fort fait du bien, mais faut savoir comment ça marche derrière pour pas se faire avoir.

Les exemples sont un peu tordus par contre. Le compilateur lent n'est pas crédible (surtout vu l'effort demandé par la suite), le programme propriétaire passons, reste la compatibilité de la bibliothèque. Tu connais un cas concret où il y a eu ce besoin ?

Je compte sortir un vrai commentaire quand j'aurai vraiment lu l'article (il me manque un certain nombre de subtilités qui sont apparement tout le but ici).
[ tag:blog.huoc.org,2009-09-30:1254332787.7208 ]