Vous trouverez ici une liste de réponses à des questions qui nous ont été posées, principalement techniques.
Ce nombre est évidemment très variable selon la nature du document.
Avec une police de caractères de 12 pts et des mots de 6 caractères en moyenne, le nombre de mots qui peuvent être imprimés sur une page au format A4 (21 x 29,7 cm) est compris entre et 400 et 500.
En pratique cependant, ce nombre est souvent moins élevé : il est généralement compris entre 250 et 300 mots pour le texte d'un récit, comportant moins d'une dizaine de mots par ligne et une trentaine de lignes par page.
Pour cela, une solution simple est d'utiliser fail2ban :
—on crée une règle dans filter.d en créant un fichier block-abusers.conf avec le contenu suivant :
[Definition]
failregex = ^(?P<host>[^s]+) -.*GET
—ensuite, on ajoute une entrée à jail.conf :
[block-abusers]
enabled = true
port = http,https
filter = block-all-dem-noobs
logpath = <path-to-your-access-log>/<access-log>
maxretry = 100
findtime = 5
bantime = 600
action = iptables[name=HTTP, port=http, protocol=tcp]
Dans cet exemple, on bloque les IPs qui effectuent 100 requêtes en 5 minutes pendant 10 minutes.
Référence :
Il est possible d'utiliser les classes suivantes :
Référence : https://stackoverflow.com/questions/13442851/twitter-bootstrap-brand-display-only-in-collapse-mode
La meilleure solution est d'appliquer la formule de haversine, soit en langage Python :
from math import radians, sin, cos, sqrt, asin def haversine(lat1, lon1, lat2, lon2): R = 6372.8 # Earth radius in kilometers dLat = radians(lat2 - lat1) dLon = radians(lon2 - lon1) lat1 = radians(lat1) lat2 = radians(lat2) a = sin(dLat / 2)**2 + cos(lat1) * cos(lat2) * sin(dLon / 2)**2 c = 2 * asin(sqrt(a)) return R * c
Le résultat sera par exemple (en kilomètres) :>>>
haversine(36.12, -86.67, 33.94, -118.40) 2887.2599506071106 >>>
Source et exemples dans tous les langages :
https://rosettacode.org/wiki/Haversine_formula
Si vous utilisez le service Nominatim avec Geopy, il est possible de désactiver la validation du certificat SSL comme suit.
Au lieu de :
from geopy.geocoders import Nominatim
Il faut utiliser :
import certifi
import ssl
import geopy.geocoders
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
geopy.geocoders.options.default_ssl_context = ctx
from geopy.geocoders import Nominatim
La connexion au service réussira même en cas de problèmes avec la librairie SSL ou les certificats SSL côté client.
Il arrive fréquemment que la validation d'un certificat SSL échoue, empêchant une requête HTTPS ou autre effectuée avec libcurl d'aboutir, que ce soit parce que le certificat côté serveur est invalide (par exemple, lorsqu'il a expiré), parce que l'autorité de certification ne le reconnaît pas (le problème se pose notamment avec les certificats auto-signés) ou bien parce que la version de la bibliothèque OpenSSL est obsolète côté client. En outre, la validation d'un certificat consomme des ressources.
Modifier les options de la bibliothèque CURL (libcurl) pour la validation des certificats permet généralement de contourner ces problèmes, ne serait-ce que de manière temporaire (il est important de préciser que cette manipulation est à proscrire en environnement de production, car elle défait l'objectif du recours à un certificat et crée de fait une faille de sécurité).
libcurl possède quatre options qui permettent de modifier la manière dont la bibliothèque interagit avec les certificats. Seules deux d'entre elles doivent être modifiées dans la plupart des cas, les autres étant utilisées pour définir des chemins de la chaîne de confiance. Voici la présentation de leur fonctionnement dans la documentation officielle de libcurl :
When negotiating a TLS or SSL connection, the server sends a certificate indicating its identity. Curl verifies whether the certificate is authentic, i.e. that you can trust that the server is who the certificate says it is. This trust is based on a chain of digital signatures, rooted in certification authority (CA) certificates you supply. curl uses a default bundle of CA certificates (the path for that is determined at build time) and you can specify alternate certificates with the CURLOPT_CAINFO option or the CURLOPT_CAPATH option.
When CURLOPT_SSL_VERIFYPEER is enabled, and the verification fails to prove that the certificate is authentic, the connection fails. When the option is zero, the peer certificate verification succeeds regardless.
Authenticating the certificate is not enough to be sure about the server. You typically also want to ensure that the server is the server you mean to be talking to. Use CURLOPT_SSL_VERIFYHOST for that. The check that the host name in the certificate is valid for the host name you're connecting to is done independently of the CURLOPT_SSL_VERIFYPEER option.
WARNING: disabling verification of the certificate allows bad guys to man-in-the-middle the communication without you knowing it. Disabling verification makes the communication insecure. Just having encryption on a transfer is not enough as you cannot be sure that you are communicating with the correct end-point.
NOTE: even when this option is disabled, depending on the used TLS backend, curl may still load the certificate file specified in CURLOPT_CAINFO. curl default settings in some distributions might use quite a large file as a default setting for CURLOPT_CAINFO, so loading the file can be quite expensive, especially when dealing with many connections. Thus, in some situations, you might want to disable verification fully to save resources by setting CURLOPT_CAINFO to NULL - but please also consider the warning above!
Les deux options qu'il faut modifier pour désactiver la validation d'un certificat sont donc CURL_SSL_VERIFYHOST : https://curl.se/libcurl/c/CURLOPT_SSL_VERIFYHOST.html (qui envoie notamment le nom d'hôte au serveur pour contrôler la validité du nom du certificat) et CURL_SSL_VERIFYPEER : https://curl.se/libcurl/c/CURLOPT_SSL_VERIFYPEER.html (contrôlant la manière dont est vérifiée l'authenticité du certificat - le texte figurant ci-dessus est extrait de sa page de présentation).
Pour modifier la valeur de ces options, en langage C, on utilise la syntaxe suivante avec l'API libcurl "easy" :
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
La modification doit être effectuée après initialisation et définition de l'URL cible de la requête mais avant que celle-ci soit transmise via curl_easy_perform().
En langage PHP avec la bibliothèque php-curl, on utilise à la place :
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Le binaire ncftpput
(qui fait partie de ncftp3
) est particulièrement adapté à cet usage.
Pour l'installer sous FreeBSD :
cd /usr/ports/ftp/ncftp3
make install clean
(Les exécutables sont installés dans /usr/local/bin
)
La syntaxe est :
/usr/local/bin/ncftpput -R -v -u login -p password server / /directory/to/copy/*
The most appropriate solutions to this problem are:
Also, when subsequent requests must happen in a precise order, you need to use SQL Transactions.
Voici les étapes minimales à suivre pour installer le gestionnaire de bureau Gnome 3 sur un système d'exploitation FreeBSD.
Prérequis : vous devez avoir effectué une installation fonctionnelle du système en choisissant d'ajouter au moins un utilisateur.
S'identifier comme superutilisateur :
su -
installer le serveur X et les paquets de gnome 3 :
pkg install xorg gnome3
ajouter au fichier /etc/fstab la ligne suivante pour monter le pseudo système de fichiers /proc :
proc /proc procfs rw 0 0
ajouter au fichier /etc/rc.conf les lignes suivantes pour lancer les services requis au démarrage :
dbus_enable="YES"
gdm_enable="YES"
hald_enable="YES"
gnome_enable="YES"
redémarrer :
reboot
Pour empêcher l'accès aux volumes amovibles d'un système Microsoft Windows 10, dans un interpréteur de commandes disposant des privilèges du compte administrateur du domaine, lancez la Microsoft Group Policy Management Console ou Console de gestion des stratégies de groupe (gpmc.msc).
Dans celle-ci, dépliez Forêt – Domaines et effectuer un clic droit sur le domaine concerné.Sélectionnez Créer une stratégie de groupe (GPO) dans le domaine et la lier ici dans le menu contextuel.
Ensuite, éditez la GPO nouvellement créée (à laquelle vous aurez donné un nom explicite) pour prévenir l'accès aux volumes amovibles grâce au composant enfichable Strategy Default Domain Policy.
Sélectionnez :
Configurez la police All Removable Storage classes: Deny all access à On.
Note : dans un domaine SAMBA, les comptes d'utilisateurs ne seront affectés que dans les groupes Domain Administrators / Authentified Users, car le groupe Domain Users ne dispose pas des privilèges permettant la modification.
Référence :
http://woshub.com/how-to-disable-usb-drives-using-group-policy/
http://samba.2283325.n4.nabble.com/Samba4-Disable-USB-ports-td4686120.html
(ajout d'une stratégie de groupe avec gpmc.msc) https://www.technig.com/enable-network-discovery-via-group-policy/
Dans la configuration d'Apache (2.4: par exemple /usr/local/etc/apache24/http.conf
), la directive AllowOverride doit permettre la lecture des fichiers .htaccess
pour ce dossier (ou pour le vhost), par exemple avec :
<Directory "/usr/local/www/">
AllowOverride All
Require all granted
</Directory>
Créer un fichier .htaccess dans le dossier à protéger :
vim /usr/local/www/.htaccess
Avec le contenu suivant :
AuthName "Restricted Access:"
AuthType Basic
AuthUserFile "/usr/local/etc/apache24/.htpasswd"
Require valid-user
Créer le fichier .htpasswd correspondant pour l'utilisateur admin :
htpasswd –c /usr/local/apache24/.htpasswd admin
(il vous faudra saisir le mot de passe)
3 bips longs au démarrage d'une carte mère pourvue d'un BIOS AMI signifient en principe un problème de RAM.
Cependant, avec certaines versions du BIOS d'une carte mère MSI, lorsque les barrattes de mémoire ne sont pas en cause, le problème peut venir de l'activation du mode MSI Fast boot.
Il faut donc désactiver celui-ci pour voir si le problème est réglé. Si oui, une mise à jour du BIOS est recommandée. Alternativement, il est possible de tenter un Clear CMOS (en déplaçant un cavalier sur les cartes Z270 Sli Plus).
Si vous rencontrez le problème suivant lorsque vous essayer d'installer un paquet ou de mettre à jour le système :
pkg update
Updating FreeBSD repository catalogue...
Fetching packagesite.pkg: 100% 7 MiB 7.0MB/s 00:01
Processing entries: 0%
Newer FreeBSD version for package ???:
To ignore this error set IGNORE_OSVERSION=yes
- package: ???
- running kernel: ???
Ignore the mismatch and continue? [y/N]: n
pkg: repository FreeBSD contains packages for wrong OS version
C'est probablement en raison d'une mise à jour précédente du système qui n'a pas été menée à son terme.
Voici comment procéder.
1. Identifiez la version actuelle (a) uname -a
) et celle, en principe plus récente, qui correspond au dépot de paquets (b).
2. Relancez la mise à jour du système en précisant que vous souhaitez passer de la version en cours a) à la version suivante b) :
freebsd-update --currently-running 13.1-RELEASE -r 13.2-RELEASE upgrade
3. Exécutez deux fois consécutivement (sans redémarrer) :
freebsd-update install
4. Redémarrez, puis :
pkg update
Lorsque le système ne parvient plus à démarrer sur la partition racine ZFS (ici zroot
) suite à plusieurs extinctions intempestives, des messages comme ceux-ci peuvent s'afficher au démarrage :
zio_read error: 5
zio_read error: 5
ZFS: i/o error - all block copies unavailable
ZFS: can't read MOS of pool zroot
...
Failed to find bootable partition
Press any key to interrupt reboot in 5 seconds
Il peut s'agir d'un simple problème logiciel, des erreurs d'écriture nécessitant une opération de maintenance manuelle.
Si tel est le cas, voici comment régler le problème.
Démarrer en console à l'aide d'une clef USB d'installation du système FreeBSD, en mode utilisateur unique, ou un système de secours (mode rescue), sous le compte root, puis tenter d'importer le pool en lecture seule :
zpool import -o readonly=on zroot
Si un message indique alors que la récupération (recovery) est possible, suivre les instructions.
En principe :
zpool import -F zroot
Puis :
zpool export zroot
Éteindre, enlever la clef USB et redémarrer le système sur la partition racine.
Une fois celui-ci chargé, effectuer ensuite un scrub :
zpool scrub zroot
1. si nécessaire, il est possible de vérifier que les partitions sont bien visibles et d'identifier celle(s) du système avec :
gpart show
2. Lorsque cela ne suffit pas, consultez aussi : https://www.ronny-mueller.com/2022/03/09/howto-solve-freebsd-zfs-out-of-temporary-buffer-space/
3. Dans le cas où le problème est matériel, il faudra réinstaller le système sur un nouveau disque : pour éviter ce type de désagrément, il est toujours préférable d'utiliser un pool de deux disques en raid 1.
Cliquez sur le bouton Démarrer et saisissez cmd pour lancer l'interpréteur de commandes,
Exécutez la commande diskpart pour lancer Diskpart.
Lancez la commande list disk avec la clé USB branchée.
Vous devez identifier le numéro du disque correspondant à la clé USB que vous souhaitez réinitialiser dans la liste affichée :
Diskpart> list disk
Disk ### Status Size Free Dyn Gpt
-------- ---------- ------- ------- --- ---
Disk 0 Online 80 GB 0 B
Disk 1 Online 8 GB 0 B
Pour sélectionner la clé USB, exécutez la commande suivante : select disk=<numéro>.
Exécutez la commande clean pour supprimer la table de partition de la clé USB.
Exécutez la commande convert mbr pour créer une table de partition sur la clé USB.
Exécutez la commande create partition primary pour créer une partition primaire sur la clé USB : votre clé USB est prête à être formatée.
Pour en savoir plus ou en cas de problème, vous pouvez consulter la documentation sur Diskpart de l'assistance Microsoft.
Pour effectuer la copie de l'OS présent sur le disque d'origine (Ms Windows 10), il est possible d'utiliser Macrium Reflect Free Edition.
Le nouveau disque SSD devra être branché sur le T460 en usb, à l'aide d'un boîtier externe par exemple. Dans le menu haut, choisir View > Backups > Image selected disk et copier le disque interne vers le nouveau disque branché en USB.
IMPORTANT ! Avant toute chose, il faut désactiver en premier la batterie interne dans le BIOS sous peine d'endommager le matériel.
Voici les points de fixation à défaire pour pouvoir accéder au stockage interne :
Dans tous les cas il faudra démonter et réutiliser le pseudo-boîtier du stockage interne.
Voici la procédure complète en vidéo :
Si vous obtenez un message d'erreur similaire à celui-ci (partie en gras) au lancement de l'utilitaire valgrind sur un système Linux basé sur ARCH (comme Manjaro ou Endeavour) :
valgrind: Fatal error at startup: a function redirection
valgrind: which is mandatory for this platform-tool combination
valgrind: cannot be set up. Details of the redirection are:
valgrind:
valgrind: A must-be-redirected function
valgrind: whose name matches the pattern: strlen
valgrind: in an object with soname matching: ld-linux-x86-64.so.2
valgrind: was not found whilst processing
valgrind: symbols from the object with soname: ld-linux-x86-64.so.2
valgrind:
valgrind: Possible fixes: (1, short term): install glibc's debuginfo
valgrind: package on this machine. (2, longer term): ask the packagers
valgrind: for your Linux distribution to please in future ship a non-
valgrind: stripped ld.so (or whatever the dynamic linker .so is called)
valgrind: that exports the above-named function using the standard
valgrind: calling conventions for this platform. The package you need
valgrind: to install for fix (1) is called
valgrind:
valgrind: On Debian, Ubuntu: libc6-dbg
valgrind: On SuSE, openSuSE, Fedora, RHEL: glibc-debuginfo
valgrind:
valgrind: Note that if you are debugging a 32 bit process on a
valgrind: 64 bit system, you will need a corresponding 32 bit debuginfo
valgrind: package (e.g. libc6-dbg:i386).
valgrind:
valgrind: Cannot continue -- exiting now. Sorry.
Cela est probablement dû au fait que les versions de glibc/lib32-glibc installées sur le système ne correspondent plus à la dernière version de glibc disponible dans les dépôts de ARCH :
https://archlinux.org/packages/core/x86_64/glibc/
Pour réparer cette erreur sans effectuer une mise-à-jour, vous pouvez utiliser la ligne de commandes suivante qui permet d'effectuer une restauration des versions fonctionnelles :
sudo DOWNGRADE_FROM_ALA=1 downgrade glibc lib32-glibc valgrind
S'il n'est pas disponible sur le système concerné, il vous faut installer au préalable downgrade :
sudo pacman -Sy downgrade
Appuyer sur SHIFT+D, puis saisir
~s .*
dans la zone de recherche : tous les messages seront marqués pour suppression.
Il suffit ensuite de quitter Mutt (q).
Envoyer par email le fichier d'autorité x3 cert.der, puis l'ouvrir sur le téléphone et choisir «importer le certificat», valider.
TCP checksum is the culprit. Disable TCP checksum offload on server:
ethtool -K eth0 tx off rx off
La réponse est non : la charge électrique utilisée pour inscrire les données dans les cellules d'un tel support est faible : par conséquent, la conservation des données sur une longue période n'est pas garantie.
Les meilleurs supports pour archiver des données sont les supports magnétiques, comme les bandes ou les disques durs (hard drives). Lorsque des disques durs sont utilisés pour l'archivage de données, ils doivent être déconnectés et de préférence rangés dans un conteneur faisant office de cage de Faraday, par exemple dans un sachet de protection anti-statique qui sera recouvert d'une feuille de papier aluminium(1).
Par précaution il est également recommandé de stocker avec les disques d'archives un adaptateur (par exemple USB vers SATA) et une alimentation externe, ceci afin d'augmenter les chances de pouvoir les utiliser avec un futur matériel dont la connectique aura changé...
Le site loculus.io fournit des les équivalents de fonctions dans différents langages -dont PHP- sous Javascript :
Les adresses IP (pour Internet Protocol, ou «Protocole Internet») servent à identifier chaque unité matérielle ou éventuellement logicielle (virtuelle) connectée à un réseau fonctionnant avec ce protocole (dont l'Internet). Deux types d'adresses sont actuellement utilisées : les adresses définies dans la version 4 du protocole (IPv4), codées sur 32 bits, et les adresses de la version 6 du protocole (IPv6), codées sur 128 bits.
La version 4 (IPv4) est la première qui fut largement déployée et demeure majoritairement utilisée en 2023 (pour sa spécification, voir la RFC 791: Internet Protocol, datée de septembre 1981, en Anglais).
Notez qu'un même équipement peut posséder plusieurs adresses IP et que plusieurs équipements peuvent communiquer à travers la même adresse grâce au mécanisme de translation d'adresse (ou NAT, pour Network Address Translation). Ainsi, un équipement connecté à Internet possède généralement une adresse IP qui l'identifie sur son réseau local (communément appelée « IP interne »), mais se connecte l'extérieur avec une autre adresse IP, en principe celle du routeur qui effectue la translation d'adresse (communément appelée « IP externe »). En outre, l'adresse IPv4 127.0.0.1 (boucle locale) lui permet de communiquer avec lui-même en utilisant le protocole IP.
Historiquement, les commandes ifconfig -a
(ou ip addr
, pour les systèmes Unix/Linux) et ipconfig /all
(pour les systèmes Microsoft) permettent d'afficher des informations détaillées sur les adresses IP configurées sur une console ou dans un terminal.
Cliquez ici pour afficher l'adresse IP avec laquelle vous êtes connecté sur ce site.
Les voici :
Unités fixes | |
---|---|
cm | centimeters |
mm | millimeters |
in | inches (1in = 96px = 2.54cm) |
px * | pixels (1px = 1/96th of 1in) |
pt | points (1pt = 1/72 of 1in) |
pc | picas (1pc = 12 pt) |
Unités relatives | |
em | Relative to the font-size of the element (2em means 2 times the size of the current font) |
ex | Relative to the x-height of the current font (rarely used) |
ch | Relative to the width of the "0" (zero) |
rem | Relative to font-size of the root element |
vw | Relative to 1% of the width of the viewport* |
vh | Relative to 1% of the height of the viewport* |
vmin | Relative to 1% of viewport's* smaller dimension |
vmax | Relative to 1% of viewport's* larger dimension |
% | Relative to the parent element |
(Source : [1])
L'image suivante indique quels sont les caractères autorisés en JSON.
Notez que tous les caractères de contrôle à l'exception de ceux qui peuvent être échappés doivent être supprimés sous peine d'erreur.