la solution sed qui fait 128 caractères ? Le gagnant en a 30 :-)
Pour moi le challenge était de faire un petit calcul avec sed – dont on peut s'accorder à dire qu'il n'est peut-être pas fait pout ça! :) Sinon j'ai aussi écrit la solution awk qui fait 70 caractères et arrive comme premier parmi les langages généralistes.
Oui c'est encore plus fragile que la version avec les regexp mais je comprends qu'il s'agit d'un traitement unique, alors bon, autant en profiter!
Le field splitter est en fait une expression rationnelle. Je n'ai pas le Awk Programming Language (par A, W and K) mais le sed & awk de chez O'Reilly laisse penser que le field splitter est une expression rationnelle dans le programme original.
Tu peux faire beaucoup plus simple pour la lecture en faisant
process_lines()
{
local recordname type ip
while IFS=',' read recordname type ip
# Do something with the zone file
done
}
print_csv()
{
sed -n -e '2,$p' "$1"
}
print_csv "/tm[/csvfile" | process_lines
Aube Dorée est très minoritaire (6,28% aux dernières élections, en recul par rapport au précédentes)
C'est un précision très importante. Les quelques commentaires que j'avais pu lire dans la presse à leur sujet, les donnaient gagnants à l'élection qui a en réalité consacré Syrizia, leur donnant ainsi une importance qu'ils n'auraient pas en réalité.
Accepter de l'augmenter indéfiniment avec les propositions de l'UE c'est juste accepter un esclavage à vie.
Ce serait surtout ouvrir la voie à l'élection des néo-nazis d'Aube Dorée. Je pense qu'il faut éviter cela à tout prix, qui a envie de voir un tel parti arriver au pouvoir en Grèce – ou ailleurs? En dépit de la crise terrible qui s'abat sur lui, le peuple Grec a fait le choix de la démocratie et s'est doté d'un gouvernement républicain: tout ceux qui pousseraient Syriza vers l'échec politique feraient le jeu de l'extrême droite!
Je vois pas de quoi tu parles. (je suis pas très intelligent)
Pour faire des sauvegardes des fichiers sur une partition, tu peux faire:
Une copie bit à bit de la partition (genre dd)
Une copie du système de fichiers (comme avec dump sous FreeBSD)
Une copie des fichiers eux-mêmes (avec rsync par exemple).
Tu peux effectivement garder (en plus de /boot) une partition classique, au cas où, si ton volume physique LVM s’est banané… ça m’est jamais arrivé et je suis presque sûr que si ça m’arrive un jour se sera à cause d’un problème matériel.
Imaginons que j'ai planté un serveur qui ne démarre plus et mon prestataire me propose seulement d'accéder au disque via une console dédiée… pour réparer, je peux faire une copie bit à bit du système de base, réparer chez moi et retransférer l'image sur le serveur. Mon intérêt est d'avoir le transfert le plus petit possible, je suis donc intéressé par une forte granularité dans mon système de partititons.
(En vrai, c'est aussi un atout du immutable server pattern de ne pas avoir à se soucier de ces cas là!)
Est-ce que tu peux accéder aux volumes logiques à travers /dev/ ? Parfois c'est important d'avoir des partitions petites pour faire de la restauration bit à bit ou au niveau du système de fichier, à travers le réseau.
J'accepte toute aide pour des informations complémentaires et des pistes à ce sujet (équations mathématiques). Car pour l'instant je n'ai aucune idée de quoi chercher en particulier.
Le standard de fait utilisé par la communauté scientifique est LaTeX. L'AMS (American Math Society) a sponsorisé le développement de MathJax, un script JavaScript qui compile les formules LaTeX en HTML (probablement MathML).
Si tu veux l'intégrer à ton soft, le plus simple est de suivre les recommendations de l'AMS ou bien de regarder comment les autres le font (MathOverflow, plugin MathJax pour trac, par exemple).
Sous freebsd, quand faut compiler openoffice y a besoin de minimum 30Go…
C'est probablement vrai, mais si tu fais partie des rares personnes qui doivent compiler OO au lieu de l'installer par les packages, rien ne t'oblige à utiliser un dossier sur ton système racine comme répertoire de travail.
c'est vrai qu'avec la solution que je propose, le cas du tag qui s'étale sur 2 lignes ne sera pas pris en compte… mais ça peut se négocier :)
Oh oui, je pense qu'avec un script sed bien poilu, on pourrait presque à faire onsgmls sur du HTML! :D
D'un autre coté , l'idée est de "monter en compétence", donc l'utilisation d'un outil tout prêt ne me semble pas être ce que Bobmoutarde demande.
Oui bien sûr, mais c'est bien de savoir que certains outils ont leur limites, et l'idée qu'on peut utiliser des expressions rationnelles pour analyser le HTML, c'est comme le chiendent, il vaut mieux s'en débarrasser le plus vite possible. C'est pas comme si analyser du HTML était la seul chose qu'on pouvait faire avec du texte!
Par exemple, on peut extraire des données des pages HTML avec de expressions rationnelles. Si il cherche du texte pour rentrer dans la moulinette, il peut prendre des livres (Gutenberg Project), faire du sqlite3 + shell, etc.
Utilise le programme onsgmls de Jim Clark pour normaliser ton document
% onsgmls index.html 2>&- | sed -n -e 's/^(//p'| sort | uniq -c
4 A 1 BODY 2 BR 1 DIV 1 H1 1 HEAD 1 HTML 3 LI 6 LINK 1 META 1 TABLE 2 TD 1 TITLE 1 TR 1 UL
Comme écrit plus haut la sortie de onsgmls ressemble à ça:
% onsgmls index.html 2>&-
(HTML(HEADAREL CDATA stylesheetAHREF CDATA style.cssATYPE CDATA text/css(LINKACONTENT CDATA text/html; charset=iso-8859-1AHTTP-EQUIV CDATA Content-Type(METAAREL CDATA StartAHREF CDATA index.htmlATYPE IMPLIED(LINKAREL CDATA AppendixAHREF CDATA index_types.htmlATYPE IMPLIEDATITLE CDATA Index of types(LINKAREL CDATA AppendixAHREF CDATA index_values.htmlATYPE IMPLIEDATITLE CDATA Index of values(LINK
avec du sed et bien il va falloir par commencer par nettoyer très soigneusement l'entrée.
Sans aller jusqu'à utiliser (explicitement) une bibliothèque adaptée je pense que le passage par un des outils de onsgmls ou bien par tidy est à recommander.
Qu'as-tu donc contre la myriade d'exemples qu'on peut trouver sur le web ? :)
Je n'ai rien contre, je veux juste comprendre à quoi ça sert. Mon parcours de programmeur avant le JavaScript contient plein de choses, et beaucoup de fonctionnel (surtout OCaml et un peu de Scheme). Dans ses langages on a des streams et des catamorphismes (le nom pédant de forEach et reduce et consorts.) et on pourrait utiliser les même mécanismes en JavaScript. Mais on préfère introduire une nouvelle syntaxe pour implémenter ces fonctionnalités et je veux juste comprendre pourquoi. C'est de la curiosité, tout simplement.
(Pour comprendre pourquoi une solution à un problème est intéressante, la meilleure méthode est d'essayer de résoudre soi-même le problème.)
yield n'est pas obligatoire pour faire un Iterable en JS. Ton objet peut être imutable. Tout ceci dépend de ton implementation.
J'ai lu un peu rapidement et fait une confusion entre iterable et générateurs. La question que je pose est à quoi sert yield qui demande une extension syntaxique alors qu'on peut apparemment se passer de générateurs en implémentant des fonctions d'ordre supérieur de type reduce ou forEach. Est-ce qu'il y a des cas qu'on ne peut que traiter avec un générateur?
Je ne vois pas trop bien ce que tu veux dire par programmation pseudo synchrone mais cela n'a certainement rien de spécifique aux générateurs. Si la génération d'un nouvel élément dure longtemps, on peut très bien demander son calcul à une promise qui se chargera d'appeler le callback et de demander la génération du prochain élément au moment voulu.
Je n'ai jamais vu un exemple où les générateurs apportaient quelque chose par rapport à une fonction de type forEach, et apparemment ce n'est pas pour aujourd'hui! :)
Tu as un exemple relativement petit de programmation pseudo-synchorne avec des générateurs et des promises?
Par exemple on peut configurer l'objet a la création pour lui fixer une borne supérieure. Je voulais juste monter comment définir un forEach qui ne fonctionne de façon paresseuse, sans faire trop attention aux autres détails.
Pour donner un exemple concret de définition d'un objet itérable au moyen d'un forEach j'ai défini un objet primes qui énumère les nombres premiers (SpiderMonkey / js) – de la façon la plus naïve possible:
var createPrimes = function(spec, _my) {
var that = {};
var my = _my || {};
my.knownPrimes = [ 2 ];
my.upperBound = 2;
var isDivisible = function(n) {
return my.knownPrimes.some(function(k) {
return (n % k) === 0;
});
};
var findPrimesUpTo = function(n) {
for(var i = my.upperBound; i <=n; ++i) {
if(! isDivisible(i)) {
my.knownPrimes.push(i);
}
}
my.upperBound = n;
}
var isPrime = function(n) {
findPrimesUpTo(n);
return my.knownPrimes.some(function(k) {
return k === n;
});
}
that.forEach = function(callback) {
var i = 2;
while(true) {
if(isPrime(i)) {
callback(i);
};
++ i
};
};
return that;
};
var primes = createPrimes();
primes.forEach(print);
Cela ne s'arrête jamais, mais si le code utilisant l'énumération en a marre, il peut lancer une exception par exemple. On peut partager le même énumérateur entre plusieurs threads dans node.js par exemple. Qu'est-ce qu'apporte une réécriture avec yield dans cet exemple? Et dans d'autres exemples?
Oui Lwt utilise des monades, ce qui permet de programmer en composant des threads un peu comme on compose des fonctions. Même si on programme un peu à la va-comme-je-te-pousse, cela reste à peu près lisible et maintenable, tandis que les paradigmes basés sur des callbacks comme Node.js requièrent uneplus grande discilpline de programmation.
[^] # Re: en awk
Posté par Michaël (site web personnel) . En réponse au message Help pour script. Évalué à 2.
C'est aussi la technologie derrière l'outil machine leraning de AWS :)
Est-ce que avec R on peut faire des “dashboards“ du genre
Par exemple, à la fin j'ai une page web locale avec deux champs de date que je complète et il fait 1. 2. 3. et 4. ?
[^] # Re: en sed
Posté par Michaël (site web personnel) . En réponse au message Help pour script. Évalué à 2. Dernière modification le 08 juillet 2015 à 23:13.
Pour moi le challenge était de faire un petit calcul avec sed – dont on peut s'accorder à dire qu'il n'est peut-être pas fait pout ça! :) Sinon j'ai aussi écrit la solution awk qui fait 70 caractères et arrive comme premier parmi les langages généralistes.
[^] # Re: en awk
Posté par Michaël (site web personnel) . En réponse au message Help pour script. Évalué à 2.
Oui c'est encore plus fragile que la version avec les regexp mais je comprends qu'il s'agit d'un traitement unique, alors bon, autant en profiter!
Le field splitter est en fait une expression rationnelle. Je n'ai pas le Awk Programming Language (par A, W and K) mais le sed & awk de chez O'Reilly laisse penser que le field splitter est une expression rationnelle dans le programme original.
[^] # Re: en sed
Posté par Michaël (site web personnel) . En réponse au message Help pour script. Évalué à 2.
Merci :D
Si tu aimes bien le sed et le awk tu peux savourer les solutions que j'ai données à un petit puzzle sur CodeGolf SE: http://codegolf.stackexchange.com/questions/23259/do-we-sink-or-swim
Je suis particulièrement fier de la solution sed ! :)
[^] # Re: en awk
Posté par Michaël (site web personnel) . En réponse au message Help pour script. Évalué à 3.
ou comme ça :)
[^] # Re: en awk
Posté par Michaël (site web personnel) . En réponse au message Help pour script. Évalué à 4. Dernière modification le 08 juillet 2015 à 21:52.
Je ferais plutôt comme ça, avec un fichier
reformat.awk
puis
# en sed
Posté par Michaël (site web personnel) . En réponse au message Help pour script. Évalué à 5.
Ton fichier
reformat.sed
puis
[^] # Re: shell
Posté par Michaël (site web personnel) . En réponse au message Besoin d'aide pour mon premier script en perl: parser un fichier BIND. Évalué à 2.
Tu peux faire beaucoup plus simple pour la lecture en faisant
[^] # Re: Le + intéressant c'est le futur proche
Posté par Michaël (site web personnel) . En réponse au journal Et ce soir, la démocratie l'emporte ! . Évalué à 4.
C'est un précision très importante. Les quelques commentaires que j'avais pu lire dans la presse à leur sujet, les donnaient gagnants à l'élection qui a en réalité consacré Syrizia, leur donnant ainsi une importance qu'ils n'auraient pas en réalité.
[^] # Re: Le + intéressant c'est le futur proche
Posté par Michaël (site web personnel) . En réponse au journal Et ce soir, la démocratie l'emporte ! . Évalué à 3.
Ce serait surtout ouvrir la voie à l'élection des néo-nazis d'Aube Dorée. Je pense qu'il faut éviter cela à tout prix, qui a envie de voir un tel parti arriver au pouvoir en Grèce – ou ailleurs? En dépit de la crise terrible qui s'abat sur lui, le peuple Grec a fait le choix de la démocratie et s'est doté d'un gouvernement républicain: tout ceux qui pousseraient Syriza vers l'échec politique feraient le jeu de l'extrême droite!
[^] # Re: Deuxième message...
Posté par Michaël (site web personnel) . En réponse au message re linuxmint 17.1. Évalué à 2.
Pour faire des sauvegardes des fichiers sur une partition, tu peux faire:
dd
)dump
sous FreeBSD)rsync
par exemple).Imaginons que j'ai planté un serveur qui ne démarre plus et mon prestataire me propose seulement d'accéder au disque via une console dédiée… pour réparer, je peux faire une copie bit à bit du système de base, réparer chez moi et retransférer l'image sur le serveur. Mon intérêt est d'avoir le transfert le plus petit possible, je suis donc intéressé par une forte granularité dans mon système de partititons.
(En vrai, c'est aussi un atout du immutable server pattern de ne pas avoir à se soucier de ces cas là!)
[^] # Re: Deuxième message...
Posté par Michaël (site web personnel) . En réponse au message re linuxmint 17.1. Évalué à 2.
Est-ce que tu peux accéder aux volumes logiques à travers
/dev/
? Parfois c'est important d'avoir des partitions petites pour faire de la restauration bit à bit ou au niveau du système de fichier, à travers le réseau.[^] # Re: Support du math-mode LaTeX ?
Posté par Michaël (site web personnel) . En réponse à la dépêche Sortie de Makefly 0.4, alternative au moteur de blog statique Nanoblogger. Évalué à 2. Dernière modification le 03 juillet 2015 à 16:55.
Le standard de fait utilisé par la communauté scientifique est LaTeX. L'AMS (American Math Society) a sponsorisé le développement de MathJax, un script JavaScript qui compile les formules LaTeX en HTML (probablement MathML).
Si tu veux l'intégrer à ton soft, le plus simple est de suivre les recommendations de l'AMS ou bien de regarder comment les autres le font (MathOverflow, plugin MathJax pour trac, par exemple).
[^] # Re: Deuxième message...
Posté par Michaël (site web personnel) . En réponse au message re linuxmint 17.1. Évalué à 3.
C'est probablement vrai, mais si tu fais partie des rares personnes qui doivent compiler OO au lieu de l'installer par les packages, rien ne t'oblige à utiliser un dossier sur ton système racine comme répertoire de travail.
[^] # Re: outils unix
Posté par Michaël (site web personnel) . En réponse au message Compter les tags HTML d'une page. Évalué à 2.
Oh oui, je pense qu'avec un script sed bien poilu, on pourrait presque à faire onsgmls sur du HTML! :D
Oui bien sûr, mais c'est bien de savoir que certains outils ont leur limites, et l'idée qu'on peut utiliser des expressions rationnelles pour analyser le HTML, c'est comme le chiendent, il vaut mieux s'en débarrasser le plus vite possible. C'est pas comme si analyser du HTML était la seul chose qu'on pouvait faire avec du texte!
Par exemple, on peut extraire des données des pages HTML avec de expressions rationnelles. Si il cherche du texte pour rentrer dans la moulinette, il peut prendre des livres (Gutenberg Project), faire du sqlite3 + shell, etc.
http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454
# Solution avec onsgmls
Posté par Michaël (site web personnel) . En réponse au message Compter les tags HTML d'une page. Évalué à 3.
Utilise le programme onsgmls de Jim Clark pour normaliser ton document
Comme écrit plus haut la sortie de onsgmls ressemble à ça:
[^] # Re: outils unix
Posté par Michaël (site web personnel) . En réponse au message Compter les tags HTML d'une page. Évalué à 3. Dernière modification le 01 juillet 2015 à 19:54.
Je suis certainement le premier à utiliser Unix pour résoudre un problème, mais si je veux extraire la ligne de tags de quelque chose comme
avec du sed et bien il va falloir par commencer par nettoyer très soigneusement l'entrée.
Sans aller jusqu'à utiliser (explicitement) une bibliothèque adaptée je pense que le passage par un des outils de onsgmls ou bien par tidy est à recommander.
Exemple de output de
onsgmls
Après si il y a une bonne raison de tout faire n'importe comment, c'est chacun comme il veut.
[^] # Re: outils unix
Posté par Michaël (site web personnel) . En réponse au message Compter les tags HTML d'une page. Évalué à 4.
Tu n'es quand-même pas en train de recommander d'analyser du HTML avec des expressions rationnelles? :)
[^] # Re: Chouette
Posté par Michaël (site web personnel) . En réponse à la dépêche ECMAScript 2015 est approuvé. Évalué à 0.
Oui tu as raison d'être plus précis.
Parceque tu ne peux pas copier (au sens de dupliquer) les fonctions, ou plutôt les closures.
[^] # Re: Chouette
Posté par Michaël (site web personnel) . En réponse à la dépêche ECMAScript 2015 est approuvé. Évalué à 3.
Je n'ai rien contre, je veux juste comprendre à quoi ça sert. Mon parcours de programmeur avant le JavaScript contient plein de choses, et beaucoup de fonctionnel (surtout OCaml et un peu de Scheme). Dans ses langages on a des streams et des catamorphismes (le nom pédant de forEach et reduce et consorts.) et on pourrait utiliser les même mécanismes en JavaScript. Mais on préfère introduire une nouvelle syntaxe pour implémenter ces fonctionnalités et je veux juste comprendre pourquoi. C'est de la curiosité, tout simplement.
(Pour comprendre pourquoi une solution à un problème est intéressante, la meilleure méthode est d'essayer de résoudre soi-même le problème.)
[^] # Re: Chouette
Posté par Michaël (site web personnel) . En réponse à la dépêche ECMAScript 2015 est approuvé. Évalué à 2.
J'ai lu un peu rapidement et fait une confusion entre iterable et générateurs. La question que je pose est à quoi sert yield qui demande une extension syntaxique alors qu'on peut apparemment se passer de générateurs en implémentant des fonctions d'ordre supérieur de type reduce ou forEach. Est-ce qu'il y a des cas qu'on ne peut que traiter avec un générateur?
[^] # Re: Chouette
Posté par Michaël (site web personnel) . En réponse à la dépêche ECMAScript 2015 est approuvé. Évalué à 2.
Je ne vois pas trop bien ce que tu veux dire par programmation pseudo synchrone mais cela n'a certainement rien de spécifique aux générateurs. Si la génération d'un nouvel élément dure longtemps, on peut très bien demander son calcul à une promise qui se chargera d'appeler le callback et de demander la génération du prochain élément au moment voulu.
Je n'ai jamais vu un exemple où les générateurs apportaient quelque chose par rapport à une fonction de type
forEach
, et apparemment ce n'est pas pour aujourd'hui! :)Tu as un exemple relativement petit de programmation pseudo-synchorne avec des générateurs et des promises?
[^] # Re: Chouette
Posté par Michaël (site web personnel) . En réponse à la dépêche ECMAScript 2015 est approuvé. Évalué à 2.
Par exemple on peut configurer l'objet a la création pour lui fixer une borne supérieure. Je voulais juste monter comment définir un
forEach
qui ne fonctionne de façon paresseuse, sans faire trop attention aux autres détails.[^] # Re: Chouette
Posté par Michaël (site web personnel) . En réponse à la dépêche ECMAScript 2015 est approuvé. Évalué à 2.
Pour donner un exemple concret de définition d'un objet itérable au moyen d'un
forEach
j'ai défini un objetprimes
qui énumère les nombres premiers (SpiderMonkey / js) – de la façon la plus naïve possible:Cela ne s'arrête jamais, mais si le code utilisant l'énumération en a marre, il peut lancer une exception par exemple. On peut partager le même énumérateur entre plusieurs threads dans node.js par exemple. Qu'est-ce qu'apporte une réécriture avec yield dans cet exemple? Et dans d'autres exemples?
[^] # Re: Mon expérience
Posté par Michaël (site web personnel) . En réponse à la dépêche Instantané sur le parallélisme et le code. Évalué à 3.
Oui Lwt utilise des monades, ce qui permet de programmer en composant des threads un peu comme on compose des fonctions. Même si on programme un peu à la va-comme-je-te-pousse, cela reste à peu près lisible et maintenable, tandis que les paradigmes basés sur des callbacks comme Node.js requièrent uneplus grande discilpline de programmation.