J'ai besoin d'intimité. Non pas parce que mes actions sont douteuses, mais parce que votre jugement et vos intentions le sont.
5198 links
Je te conseille de visionner la décroyance.
C'est long (3h) mais ça remet les pendules à l'heure !
Whaoo. C'est beau.
Mais Dieu n'y est pour rien Seb !
On n'est plus en Europe ou on va bientôt en sortir ? Étrange ce regain de nationalisme par des soit disant Européens con(s)-vaincus.
Toutes les versions de Firefox.
Pour utiliser le clavier AZERTY, il suffit de taper : loadkeys fr après avoir monté la racine
C'est bon à savoir. Par contre, mon problème de /bin/sh : 0 can’t access tty n'est pas résolu...
Utile en cas de plusieurs versions de Firefox installées sur le même poste (avant la v67).
Bonjour,
Votre conseiller (...), après examen de votre fiche de contact, vous propose de rédiger votre (...).
Connectez-vous sur le site du CNAM, pour renseigner ce (...) .
(...)
Pour toute question ou demande d'information, vous pouvez contacter votre conseiller.
Rappel de vos identifiants de connexion au site :
- identifiant : (...)
- mot de passe : (...)
Le service Compétences, expérience et validation
Direction nationale des formations
Le Cnam
Encore un exemple qui montre que Sourceforge est à bannir.
Utilisez des outils que vous maîtrisez.
Ne pas donner le panier avec tous ses œufs, l'eau du bain et le bébé !
Par Jean-Philippe Smadja.
C'est long, mais c'est bigrement intéressant.
Brillant !
/**
* Allows running a callback on all files in a deep directory structure
*
* @author Aidan Lister <aidan@php.net>
* @param string $dirname The directory to walk
* @param callable $callable The callable to execute on all files found
* @param mixed $arg{n} Extra parameters to be passed to the callable
* @return mixed The return value of the last callable run
*/
function directory_walk($dirname, $callable)
{
$ignore = array('.', '..', '.DS_Store');
$args = func_get_args();
array_shift($args);
// Sanity check
if (!file_exists($dirname)) {
return false;
}
// Create and iterate stack
$stack = array($dirname);
while ($entry = array_pop($stack)) {
if (is_link($entry)) continue;
// Run the action
if (is_file($entry)) {
$ret = call_user_func_array($callable, array($entry) + $args);
continue;
}
// Add the directory into the stack
$dh = opendir($entry);
while (false !== $child = readdir($dh)) {
if (in_array($child, $ignore)) continue;
$child = $entry . DIRECTORY_SEPARATOR . $child;
$stack[] = $child;
}
closedir($dh);
}
return $ret;
}
So, for some examples. We’ll start simple and simply print the directory:
$func = create_function('$file', 'echo "found $file";'); directory_walk('target-dir', $func);Which for me outputs:
found target-dir/foo found target-dir/bar found target-dir/baz found target-dir/baz/ding found target-dir/baz/dong found target-dir/baz/dong/witchWhat if we wanted to add a
.txtextension to all of these files? We could write:function my_rename($entry, $extension) { if (is_file($entry)) { rename($entry, $entry . $extension); } } directory_walk('target-dir', 'my_rename', '.txt');Another example might be deleting all the .svn or CVS folders in a directory. We could write:
function delsvn($file) { $ext = substr($file, strlen($file)-4,strlen($file)); if ($ext === '.svn') rmdirr($ext); } directory_walk('test', 'delsvn');Note that the above example used the recursive delete function also.
Happy stacking.
C'est beau !
Et comme par hasard, les écoutes ont cessé la "semaine dernière" ! Si c'est pas choupinou... de nous prendre pour des cons de cette manière.
Comment préparer l'opinion à bosser jusqu'à 69 ans (44 ans de cotisation) pour toucher une retraite à taux plein ? Avec la bonne vieille astuce politicienne d'organiser la fuite d'un calcul qui semble trop beau pour être vrai mais qui permet de semer l'idée dans la tête des citoyens. Absence d'étude d'impact sérieuse avant le vote de la loi. Évidence que des retraités vont perdre au change.
Jean-Paul Delevoye a glissé, dans son rapport sur la réforme des retraites, des phrases invisibles ! C’est ce qu’a découvert un collectif d’économistes qui a passé au scanner les 130 pages dudit rapport (« Le Parisien », 25/7).
Tout part d’un échange entre le Haut-Commissariat à la réforme des retraites et le Conseil d’orientation des retraites (COR). Celui-ci estime nécessaire une « simulation » des effets de la réforme. Mais, compte tenu de la complexité d’un système qui regroupera 42 régimes spéciaux, le Haut-Commissariat répond que cette simulation ne sera disponible qu’en… 2024 ! En clair, le Parlement est prié de voter la réforme dès 2020 et les futurs retraités, d’applaudir sans avoir une idée de son impact.
Que des gagnants !
Pour éviter cette bouffonnerie, Delevoye et ses collaborateurs fabriquent neuf « cas types » qui sont regroupés à la fin du rapport. il y a là un mini-panel de la société française, du malchanceux qui a enchaîné boulots et chômage à la bûcheuse qui a commencé en bas de l’échelle et termine cadre. Miracle : personne n’est perdant ! Même le collectionneur de petits jobs gagnerait plus qu’aujourd’hui. Inespéré, pour Un dispositif qui, au lieu de s’appuyer sur les 25 meilleures années, calcule les pensions sur l’ensemble de la carrière, y compris les millésimes calamiteux (petits boulots, chômage, etc.).
Y aurait-il un truc ? Les experts qui ont décortiqué les neuf cas types sont arrivés à une conviction : en utilisant les paramètres actuels de niveau et de durée de cotisation, ce bilan doré sur tranche est impossible. Pour l’obtenir, il faudrait soit augmenter les cotises, mais Macron ne veut pas en entendre parler, soit augmenter la durée de cotisation (43 ans), laquelle est censée ne pas bouger jusqu’en 2035.
Les conseillers de Delevoye ont fini par l’avouer du bout des lèvres : leurs pseudo-simulations ont été effectuées sur une base de 44,3 ans de cotisation pour les retraités nés à partir de 1990. Soit une discrète rallonge de 15 mois travaillés. Ni vu ni connu…
Croissance du rab
Pour avoir une retraite équivalente à celle d’aujourd’hui, les heureux « bénéficiaires » de la réforme devront donc avoir commencé à travailler dès l’âge de 18,6 ans. Quant aux diplômés qui n’entreront dans la vie active qu’à 25 ans, il leur faudra bosser jusqu’à 69 ans avant de prendre leur retraite. On est loin de l’âge légal de 62 ans, et même de l’âge pivot de 64 ans.
Les collaborateurs de Delevoye admettent mezza voce cette petite entourloupe, absente du rapport remis à Edouard Philippe. Le texte du haut-commissaire précise seulement, sans donner de chiffres, que les gains en espérance de vie devront être répartis pour deux tiers en temps supplémentaire au boulot et un tiers de plus à la retraite. Sans la curiosité de quelques experts indépendants, le Parlement aurait voté la prochaine loi sans connaître l’existence de cette miraculeuse clause écrite à l’encre sympathique. >>Et ça n’aurait pas été sympa…
Dans le Canard enchaîné du 31 juillet 2019.
L'une des œuvres majeures de Marx, Le Capital adaptée en manga.
Je vous laisse le soin de lire le résumé de GuiGui.
This is a list of Free Software network services and web applications which can be hosted locally. Non-Free software is listed on the Non-Free page.
Aujourd'hui nous n'allons pas forcément voir quelque chose de très complexe mais nous allons essayer de réfléchir à un problème simple en CSS. Comment espacer plusieurs éléments au sain d'une section ?
Approche1 : Marge sur l’élément
La première approche, qui semble la plus naturelle, serait d'utiliser une marge directement sur les éléments que l'on souhaite espacer.
.card { … margin: 1.5rem 0; }Cette méthode va avoir plusieurs inconvénients :
- Les marges de l'élément vont créer un espace non désirable si le conteneur a des marges intérieures.
- Si l'élément parent est en
display:flex, dans ce cas-là la fusion des marges ne s'opère plus.- Si on souhaite utiliser cet élément dans une grille il faudra retirer les marges pour éviter (ce qui implique de rajouter des styles supplémentaires).
- On mélange ici apparence et structure, ce qui nuit à la réutilisation du style.
Approche 2 : Des classes utilitaires
Le problème de la première approche est qu'elle n'est pas assez spécifique, elle va appliquer des marges sur tous les éléments
.cardpar défaut.
Pour remédier à ce problème on pourrait être tenté d'utiliser une approche utilitaire qui consiste à utiliser une règle CSS spécifique pour l'ajout de marges..mt { margin-top: 2rem; }Il sera alors possible de réutiliser cette classe dès que l'on aura besoin de rajouter une marge entre plusieurs éléments (et ce quelque soit l'élément).
<div class="card">...</div> <div class="card mt">...</div> <div class="alert mt">...</div>Cette approche est plus intéressante parce qu'elle permet de séparer l'apparence et structure mais apporte aussi son lot de problèmes :
- Lorsque vous construisez votre structure HTML vous devez penser à l'apparence qu'auront vos éléments (Par exemple vous devrez ajouter de la logique dans les boucles de vos templates pour ajouter ou non la classe utilitaire).
- Pour des éléments responsive vous allez devoir peut-être rajouter différentes classes pour gérer les différents positionnements ce qui va rendre le code difficile à écrire.
<div class="card">...</div> <div class="card small-mt large-mt0 medium-mt2">...</div> <div class="card small-mt large-mt0 medium-mt2">...</div>Approche 3 : Grid
Le système de grille CSS nous permet de résoudre le problème d'espacement grâce à la propriété
grid-gapqui permet d'insérer un espace régulier entre chaque élément. On commencera alors par entourer nos éléments :<div class="stack"> <div class="card"></div> <div class="card"></div> <div class="card"></div> <div class="card"></div> </div>Et ensuite on utilisera le système de grille pour générer l'espace et l'empilement.
.stack { display: grid; grid-template-columns: 1fr; grid-gap: 1.5rem; }Avec ce système, c'est l'élément parent qui est chargé de contrôler la disposition des enfants ce qui offre beaucoup plus de contrôle et permet de ne plus avoir à s'occuper de la structure au niveau des éléments enfants. En revanche le système de grille ne permet pas de gérer simplement des variations au niveau des espacements (il n'est pas possible de diminuer ou augmenter facilement la marge entre 2 éléments).
Approche 4 : Le sélecteur > et +
La précédente approche nous a permis de comprendre que piloter l'espacement par le parent est une très bonne solution à adopter. En revanche on veut pouvoir piloter facilement l'espace entre 2 éléments si nécessaire.
.stack > * + * { margin-top: 1.5rem; }Cette approche permet d'insérer automatiquement une marge en haut des éléments adjacents à un autre élément et qui sont des enfants direct de l'élément
.stack. L'inconvénient est qu'il est alors nécessaire de retirer la marge dès que l'on change de disposition ce qui complique la gestion du responsive.@media only screen and (min-width: 500px) { .stack { display:grid; } .stack > * + * { margin-top: 0; } }Pour se sortir de cette situation il est possible de se reposer sur l'utilisation des variables CSS qui permettent, grâce au système de cascade, de changer dynamiquement l'espace qu'il y a entre les différents éléments depuis le parent.
.stack { --space: 1.5rem; } .stack > * + * { margin-top: var(--space); } @media only screen and (min-width: 500px) { .stack { display: grid; grid-template-columns: repeat(3, 1fr); grid-gap: 30px; --spacce: 0; } }Cette variable permet aussi à un élément de contrôler son espacement par rapport aux éléments adjacents. Par exemple si une alerte a besoin d'être plus espacée que le reste :
.alert, .alert + * { --space: 3rem; }ou même de gérer simplement des déclinaisons
.stack.large { --space: 3rem; }Cette méthode est intéressante car elle permet de contrôler simplement la structure des espaces d'une section avec peu de sélecteurs. En revanche, elle implique d'avoir un code HTML simple où tous les blocs sont au même niveau.
Conclusion
A travers cet article nous avons vu différentes manières de gérer l'espacement et les inconvénients de chacune de ces méthodes. Il faut voir ces différentes approches comme des outils que vous pourrez utiliser suivant la situation.
- L'approche 1 (margin) conviendra pour des éléments qui ne sont pas réutilisé et qui ont un espacement constant sur tout le site
- L'approche 2 (utilitaire) conviendra si vous voulez gérer les espacements au cas par cas.
- L'approche 3 & 4 conviendra pour créer des sections où les enfants doivent tous être espacés et qui doivent pouvoir changer de structure dans le cadre du responsive.