var figaro = document.getElementsByClassName('depeches');
for (var i=0; i < figaro.length; i++)
{
element=figaro[i];
element.parentNode.removeChild(element);
}
Parceque ton environnement n'est pas le même. Ton .bashrc n'est pas lu lorsque tu lance ton script par cron. Pour récupérer l'environnement utilisé par cron, tu peux mettre env
dans ton script, cela va t'afficher toutes tes variables d'environnement. C'est en général le principal problème lorsqu'un script marche sous un compte mais pas avec cron.
Dans ton cas, l'utilisation de gzip permettrait de gagner beaucoup de place. Il faut commencer par remplir toute la place de ton disque vide de 0 pour avoir une compression optimale avec dd if=/dev/zero of=toto; \rm toto
Ensuite, tu boot sur ton livecd et un petit gzip < /dev/sda > /media/disk/sauvegarde_sda.gz
Devrait faire nettement moins de 3 Go.
Comme je le dis plus haut, c'est totalement sous optimal, tu es obligé de rappeler le type de ton conteneur pour indiquer le type des iterateurs
Je pense que tu n'utilises pas assez de typedef, je le fait de façon systématique pour rendre le code plus lisible et les évolutions plus aisées. Mon seul regret est que, comme en C, cela ne déclare pas un nouveau type mais ne fait qu'un alias.
(et des fois ça peut etre vraiment long, source d'erreur),
Erreur qui est détectée à la compilation.
et d'appeler explicitement begin et end.
C'est l'idiome qui veut cela et c'est quand même l'idiome le plus standard du C++, c'est quand même la leçon numéro 0 quand on aborde les conteneurs, tu remarquera que les développeurs de Qt ont trouvé le concept suffisamment bien foutu pour l'utiliser dans leurs conteneurs.
Personnellement je trouve la combinaison de std::for_each et boost::lambda autrement plus élégante (et puissante) que le foreach de Qt.
Cela permet par exemple d'écrire vector v(10);
for_each(v.begin(), v.end(), _1 = 1);
Ou encore for_each(v.begin(), v.end(), cout << *_1 << '\n');
Que suggères tu ? Que l'on utilise plus de bibliothèque autre que la stdlib et la libc ?
Et je cite le message de Luc auquel tu réponds :
Attention, il est normal de s'adapter aux widgets du framework. Ce que je considère de complètement anormal est de s'adapter relativement aux choses dont un équivalent est pourtant fourni en standard
De mon côté je suggère que tu apprenne à lire les messages auxquels tu réponds.
Quel est l'équivalent standard du foreach de Qt ? Le fait est qu'il n'y en a pas, et que si Qt l'a introduit c'est bien parce que ce genre de truc est diablement pratique
S'écrit en C++ QMap<QString, int> map;
[...]
for (QMap<QString, int>::iterator it=map.begin(); it != map.end(); ++it)
qDebug() << it->first << ":" << it->second;
Et on a l'avantage d'éviter la copie de QString et l'appel à map.value() qui fait une recherche dans la map (QMap pouvant être remplacé par std::map avec exactement la même utilisation).
- pour faire des trucs un peu intéressants en C++, il faut vite utiliser des template qui sont difficiles à comprendre, difficiles à utiliser et qui font ramer la machine. A l'inverse Qt est vraiment facile à appréhender, grâce à son excellente doc et aux "extensions" apportées au C++.
Je remarque que Qt :
- fournit des containers dont l'interface est plus que largement inspirée de la STL [http://doc.trolltech.com/4.0/qmap.html]
- utilise de plus en plus de templates
- utilise largement les templates en interne pour te fournir l'interface qui te convient (cf par exemple qalgorithms.h)
J'ai d'ailleurs une question, comment fait-on pour trier un QVector ?
Contrairement à ce que certains semble prétendre, je ne crois pas que "Les fans du C++ crachent sur Qt", que beaucoup (dont mois) considèrent comme une très bonne bibliothèque. En revanche, je crois que les développeurs Qt sont plus conscients que vous ne semblez l'être de la richesse du C++.
Pour le couple gcc/glibc, ce que je regrette c'est que les gens ne se rende pas forcement compte de ce qui est standard et ce qui ne l'est pas.
Et malheureusement, je crois pas qu'il existe de moulinette qui donnerait la conformité du code (ISOC, POSIX, BSD, extension gcc, extension glibc, extension linux, ...).
Il y a quand même l'option -std= de gcc, et également dans la glibc, il y a un certain nombre de define qui définissent ou non certaines fonctions (cf /usr/include/features.h).
Cela dit, je te rejoins sur le fait que nombre de développeurs ne se soucient pas de la portabilité et activent tout par défaut sans séparer les parties spécifiques au système utilisé, ce qui oblige à aller taper dans tous les coins pour faire le portage. On se retrouve vite avec une soupe de #ifdef dans tous les fichiers.
Par exemple, aujourd'hui, il n'existe aucun compilateur C++ qui supporte à 100% et sans bug le standard du C++. Donc un code qui serait « parfaitement propre » (d'après cette définition) et qui utiliserait toutes les fonctionnalités du standard ne marcherait nulle part. Trop cool !
D'un autre côté, un code qui supporterait un très large panel de compilateur et de plate-forme marchera sur plein de machines, en supportant les divers bugs et sous implémentation du standard sera « sale » mais beaucoup plus utile.
Que les compilateurs n'implémentent pas tout le standard C++, soit, mais j'attends d'un compilateur qu'il implémente de façon standard ce qu'il implémente. Je ne sais pas si tu as eu à faire du C++ portable du temps de Visual Studio 6 mais c'était la plaie.
Ça ne me dérange pas de devoir me restreindre à une partie du standard en fonction de la portabilité que je désir (d'autant qu'il n'y a pas grand chose à éviter en dehors de la directive export), mais ce que j'implémente je ne veux pas avoir à le coder une fois pour chaque compilateur. Et je ne veux pas non plus m'appuyer sur une spécificité d'un compilateur qui a toutes les chances de changer lors d'une version ultérieure.
Le eeepc étant livré avec Thunderbird (le client de mail), tu peux installer l'extension lightning ( https://addons.mozilla.org/fr/thunderbird/addon/2313 ). L'extension va ajouter des fonctionnalités de calendrier à thunderbird.
C'était simplement une précision pour ne pas laisser croire que le logo que tout le monde connais était le logo "officiel". Je n'avais nulle intention de te discréditer.
Le logo officiel de debian n'est pas libre.
C'est pour ça que personne ne le connait, qu'il n'est quasiment jamais utilisé et que celui qui est connu et utilisé est le logo libre. Même sur leur site c'est le logo libre qu'ils utilisent.
Je pense que c'est plutôt le système de cache du navigateur qui lui permet d'afficher la page consultée précédemment sans avoir à retélécharger la page.
Il y a peut être un moyen de prévenir le navigateur de ne pas mettre les pages en cache en utilisant l'en-tête HTTP Expires ou bien avec un meta tag html du genre :
<meta name="Pragma" CONTENT="no-cache">
Alors regarde du coté de ton php.ini, notamment doc_root. Et vérifie que ton option FollowSymlinks est bien activé pour ton répertoire. La config d'apache permet d'activer des options pour des parties du filesystem et il est possible que l'option que tu as rajoutée soit en fait supplantée par une autre ligne autre part dans la configuration.
Tu peux passer par des API de plus haut niveau que POSIX. Par exemple la bibliothèque Qt fourni ce qu'il faut avec la class QTimer [http://doc.trolltech.com/4.3/qtimer.html]
Je ne pense pas qu'il y ai de solution au niveau système pour ton problème. Ce que je ferai à ta place c'est d'utiliser un gestionnaire de timer, qui est le seule à recevoir les timer et qui gère une association entre un temps, un callback et une donnée.
Tu aurai donc une fonction void registerTimer(const struct itimerval* timer, void *(*callback)(void*), void* arg);
Dans une variable statique, tu te fait une liste de struct timer_callback
{
struct itimerval timer;
void *(*callback)(void*);
void* data;
};
Qui lui fait l'appel à setitimer, au moment où tu reçoit le SIGALRM (ou le SIGVTALRM ou encore le SIGPROF), tu appel tous les callbacks dont la tempo a expiré avec leur argument et tu les retire de ta liste.
Si tu fait du code multithread bien sûr il faut faire attention à bien verrouiller ton tableau.
Nicolas a raison, il faut que B et C héritent "virtuellement" de A. Le problème sur lequel tu bloque maintenant, c'est que le compilateur ne sait pas, dans la classe D si property1() doit utiliser B::property1() ou C::property1(), il faut donc lui dire explicitement :
class D : public B, public C {
public:
/* Ici on est obligé de définir property1(), sinon le
* compilateur ne peut savoir si c'est property1 de B ou de C
* qu'il veut
*/
virtual bool property1()
{
return B::property1();
}
};
# Avec GreaseMonkey
Posté par Étienne . En réponse au message Bloquer les RSS. Évalué à 2.
Voici un petit script qui pourrait t'intéresser.
// ==UserScript==
// @name RemoveFigaro
// @namespace https://linuxfr.org/forums/12/24358.html
// @description Remove figaro links from the web page http://www.paris-art.com
// @include http://www.paris-art.com/*
// ==/UserScript==
var figaro = document.getElementsByClassName('depeches');
for (var i=0; i < figaro.length; i++)
{
element=figaro[i];
element.parentNode.removeChild(element);
}
[^] # Re: SELinux?
Posté par Étienne . En réponse au message cron & rsync & fusesmb: "link_stat failed". Évalué à 2.
env
dans ton script, cela va t'afficher toutes tes variables d'environnement. C'est en général le principal problème lorsqu'un script marche sous un compte mais pas avec cron.
Etienne
[^] # Re: Tu utilise Gentoo ?
Posté par Étienne . En réponse au message gmerge dans un top. Évalué à 3.
rpm -q -f /sbin/gmerge
Etienne
# partimage
Posté par Étienne . En réponse au message sauvegarde avec dd. Évalué à 3.
Dans ton cas, l'utilisation de gzip permettrait de gagner beaucoup de place. Il faut commencer par remplir toute la place de ton disque vide de 0 pour avoir une compression optimale avec
dd if=/dev/zero of=toto; \rm toto
Ensuite, tu boot sur ton livecd et un petit
gzip < /dev/sda > /media/disk/sauvegarde_sda.gz
Devrait faire nettement moins de 3 Go.
[^] # Re: Réponse profonde:
Posté par Étienne . En réponse au journal Réponse à des gens qui n'ont pas assez réfléchi. Évalué à 1.
[^] # Re: gcc lave plus blanc ?
Posté par Étienne . En réponse à la dépêche Sortie de GCC 4.3. Évalué à 3.
Je pense que tu n'utilises pas assez de typedef, je le fait de façon systématique pour rendre le code plus lisible et les évolutions plus aisées. Mon seul regret est que, comme en C, cela ne déclare pas un nouveau type mais ne fait qu'un alias.
(et des fois ça peut etre vraiment long, source d'erreur),
Erreur qui est détectée à la compilation.
et d'appeler explicitement begin et end.
C'est l'idiome qui veut cela et c'est quand même l'idiome le plus standard du C++, c'est quand même la leçon numéro 0 quand on aborde les conteneurs, tu remarquera que les développeurs de Qt ont trouvé le concept suffisamment bien foutu pour l'utiliser dans leurs conteneurs.
[^] # Re: gcc lave plus blanc ?
Posté par Étienne . En réponse à la dépêche Sortie de GCC 4.3. Évalué à 2.
Cela permet par exemple d'écrire
vector v(10);
for_each(v.begin(), v.end(), _1 = 1);
Ou encore
for_each(v.begin(), v.end(), cout << *_1 << '\n');
Etienne
[^] # Re: gcc lave plus blanc ?
Posté par Étienne . En réponse à la dépêche Sortie de GCC 4.3. Évalué à 3.
Et je cite le message de Luc auquel tu réponds :
Attention, il est normal de s'adapter aux widgets du framework. Ce que je considère de complètement anormal est de s'adapter relativement aux choses dont un équivalent est pourtant fourni en standard
De mon côté je suggère que tu apprenne à lire les messages auxquels tu réponds.
[^] # Re: gcc lave plus blanc ?
Posté par Étienne . En réponse à la dépêche Sortie de GCC 4.3. Évalué à 2.
Si je me rapport à http://doc.trolltech.com/4.1/containers.html#the-foreach-key(...) ça a vraiment l'air de vouloir éviter de faire peur aux allergiques des iterateurs (ce que certains commentaires ici même tendraient à justifier). Parceque
QMap<QString, int> map;
[...]
foreach (QString str, map.keys())
qDebug() << str << ":" << map.value(str);
S'écrit en C++
QMap<QString, int> map;
[...]
for (QMap<QString, int>::iterator it=map.begin(); it != map.end(); ++it)
qDebug() << it->first << ":" << it->second;
Et on a l'avantage d'éviter la copie de QString et l'appel à map.value() qui fait une recherche dans la map (QMap pouvant être remplacé par std::map avec exactement la même utilisation).
[^] # Re: gcc lave plus blanc ?
Posté par Étienne . En réponse à la dépêche Sortie de GCC 4.3. Évalué à 2.
Je remarque que Qt :
- fournit des containers dont l'interface est plus que largement inspirée de la STL [http://doc.trolltech.com/4.0/qmap.html]
- utilise de plus en plus de templates
- utilise largement les templates en interne pour te fournir l'interface qui te convient (cf par exemple qalgorithms.h)
J'ai d'ailleurs une question, comment fait-on pour trier un QVector ?
Contrairement à ce que certains semble prétendre, je ne crois pas que "Les fans du C++ crachent sur Qt", que beaucoup (dont mois) considèrent comme une très bonne bibliothèque. En revanche, je crois que les développeurs Qt sont plus conscients que vous ne semblez l'être de la richesse du C++.
[^] # Re: A trier
Posté par Étienne . En réponse au journal Quelques idées pour redonner du tonus à Linuxfr. Évalué à 0.
Il serait honnête de citer une version à jour http://dev.mysql.com/doc/refman/5.1/en/constraint-invalid-da(...) pour constater qu'il est désormais possible d'avoir un comportement conforme.
[^] # Re: gcc lave plus blanc ?
Posté par Étienne . En réponse à la dépêche Sortie de GCC 4.3. Évalué à 3.
Pour le couple gcc/glibc, ce que je regrette c'est que les gens ne se rende pas forcement compte de ce qui est standard et ce qui ne l'est pas.
Et malheureusement, je crois pas qu'il existe de moulinette qui donnerait la conformité du code (ISOC, POSIX, BSD, extension gcc, extension glibc, extension linux, ...).
Il y a quand même l'option -std= de gcc, et également dans la glibc, il y a un certain nombre de define qui définissent ou non certaines fonctions (cf /usr/include/features.h).
Cela dit, je te rejoins sur le fait que nombre de développeurs ne se soucient pas de la portabilité et activent tout par défaut sans séparer les parties spécifiques au système utilisé, ce qui oblige à aller taper dans tous les coins pour faire le portage. On se retrouve vite avec une soupe de #ifdef dans tous les fichiers.
[^] # Re: gcc lave plus blanc ?
Posté par Étienne . En réponse à la dépêche Sortie de GCC 4.3. Évalué à 6.
Par exemple, aujourd'hui, il n'existe aucun compilateur C++ qui supporte à 100% et sans bug le standard du C++. Donc un code qui serait « parfaitement propre » (d'après cette définition) et qui utiliserait toutes les fonctionnalités du standard ne marcherait nulle part. Trop cool !
D'un autre côté, un code qui supporterait un très large panel de compilateur et de plate-forme marchera sur plein de machines, en supportant les divers bugs et sous implémentation du standard sera « sale » mais beaucoup plus utile.
Que les compilateurs n'implémentent pas tout le standard C++, soit, mais j'attends d'un compilateur qu'il implémente de façon standard ce qu'il implémente. Je ne sais pas si tu as eu à faire du C++ portable du temps de Visual Studio 6 mais c'était la plaie.
Ça ne me dérange pas de devoir me restreindre à une partie du standard en fonction de la portabilité que je désir (d'autant qu'il n'y a pas grand chose à éviter en dehors de la directive export), mais ce que j'implémente je ne veux pas avoir à le coder une fois pour chaque compilateur. Et je ne veux pas non plus m'appuyer sur une spécificité d'un compilateur qui a toutes les chances de changer lors d'une version ultérieure.
Étienne
# Install l'extension lightning de thunderbird
Posté par Étienne . En réponse au message EeePC sous Xandros. Évalué à 4.
Etienne
[^] # Re: Gardez Thunderbird dans le nom!
Posté par Étienne . En réponse à la dépêche Le projet Milimail désire changer de nom. Évalué à 5.
[^] # Re: tout à fait ok
Posté par Étienne . En réponse à la dépêche Concours de t-shirts firefox 3. Évalué à 2.
[^] # Re: tout à fait ok
Posté par Étienne . En réponse à la dépêche Concours de t-shirts firefox 3. Évalué à 3.
C'est pour ça que personne ne le connait, qu'il n'est quasiment jamais utilisé et que celui qui est connu et utilisé est le logo libre. Même sur leur site c'est le logo libre qu'ils utilisent.
Pour info : http://www.debian.org/logos
# Système de cache
Posté par Étienne . En réponse au message Page précédente du navigateur.... Évalué à 6.
Il y a peut être un moyen de prévenir le navigateur de ne pas mettre les pages en cache en utilisant l'en-tête HTTP Expires ou bien avec un meta tag html du genre :
<meta name="Pragma" CONTENT="no-cache">
Etienne
# isinf isnan
Posté par Étienne . En réponse au message Reconnaitre -1.#IND. Évalué à 3.
Etienne
[^] # Re: FollowSymlinks
Posté par Étienne . En réponse au message Apache plante avec php. Évalué à 2.
Etienne
[^] # Re: Centraliser la gestion des timer
Posté par Étienne . En réponse au message Passage de données au handler d'un timer. Évalué à 2.
# Centraliser la gestion des timer
Posté par Étienne . En réponse au message Passage de données au handler d'un timer. Évalué à 2.
Tu aurai donc une fonction
void registerTimer(const struct itimerval* timer, void *(*callback)(void*), void* arg);
Dans une variable statique, tu te fait une liste de
struct timer_callback
{
struct itimerval timer;
void *(*callback)(void*);
void* data;
};
Qui lui fait l'appel à setitimer, au moment où tu reçoit le SIGALRM (ou le SIGVTALRM ou encore le SIGPROF), tu appel tous les callbacks dont la tempo a expiré avec leur argument et tu les retire de ta liste.
Si tu fait du code multithread bien sûr il faut faire attention à bien verrouiller ton tableau.
# FollowSymlinks
Posté par Étienne . En réponse au message Apache plante avec php. Évalué à 4.
Google => "not within configured docroot" => J'ai de la chance
[^] # Re: Tes "virtual" sont mals placés
Posté par Étienne . En réponse au message Autour de l'héritage multiple et des méthodes virtuelles.. Évalué à 2.
Etienne
[^] # Re: Utilise les dumps
Posté par Étienne . En réponse au message Migrer de MySQL vers Prostgre. Évalué à 3.
http://www.postgresql.org/docs/techdocs.3
Tu peux en particulier essayer ces deux scripts :
http://www.omnistarinc.com/~fonin/downloads.php#my2pg
ou
http://www.xach.com/aolserver/mysql-to-postgresql.html
Si tu réussis à faire quelque chose, tiens nous au courant.
Étienne