Pour toute demande, vous pouvez nous adresser un mail à l’adresse : contact@roxing.net.
blog.roxing.net
weblog roxing.net - astuces spip, php, bash, linux & more
Le but est de faire une boucle sur un #ARRAY ayant comme clé le nom d’un script js, et un booléen en tant que valeur.
On active ou désactive le script simplement en remplaçant la valeur par 1.
Dans le cadre d’un design utilisant bootstrap, on souhaite pourvoir activer facilement une ou plusieurs bibliothèques javascript.
La même chose, mais en mieux, dans le cadre de la création d’un plugin est d’utiliser le pipeline
insert_head($flux).
- X-Plane 9 SHOW_The best simulation program now has the best graphics_Manlezl
X-Plane 10 est sortie depuis quelque temps, mais La version 9 reste toujours une réfèrence. X-Plane 9 propose une qualité graphique (quasiment) équivalente à la version 10 tout en étant moins gourmande en RAM / CPU / GPU.
Ayant un Core 2 duo encore dans la force de l’age, je vais détailler l’installation sur la Version Linux Ubuntu 13.10 64bit et faire un point sur les problèmes rencontrés
Installation des dépendances 32bits
Créer un répertoire de travail et récupérer les outils d’installation
Creer un repertoire de travail.
Aller dans le répertoire de travail.
Récupérer l’installateur de DVD X-Plane 9 sur la page du wiki officiel X-Plane
Récupérer l’outil de mise à jour sur le site officiel d’X-Plane
Décompresser les 2 outils
Installation d’X-plane 9
[Inserer DVD-ROM du jeu]rendre executable le script d’installation
lancer l’installation
Si cette erreur apparaît lors du lancement de l’installation :
./"X-Plane DVD Installer Linux" : error while loading shared libraries : libopenal.so.0 : cannot open shared object file : No such file or directoryFaire un lien symbolique :
Problèmes rencontrés :
Bizarrement certain de mes DVD (Trés peu utilisés) "plantaient" au cours de l’installation. J’ai résolu le problème en générant des ISO pour ensuite les les monter et lancer l’installeur de DVD.
Monter une ISO de DVD de scène d’ x-plane 9 puis lance l’installeur de DVD.
s’assurer qu’aucun autre média d’x-plane et présent, puis lancer l’installeur du DVD
- Utiliser le serveur DHCP et les DNS du réseau distant
Aprés quelques jours de lutte j’ai enfin réussi à configurer proprement mon client pour mettre ma machine sur le réseau distant.
La configuration du client openvpn fonctionnait bien sur tunnelblick(OSX) et OpenVpnGUI (Windows) mais m’a donnée du fil à retordre sur Debian pour avoir quelque chose d’automatisé. surtout au niveau du serveur DHCP et du serveur de noms du réseau privé.
1) Configuration du serveur openvpn
Pour info, voici le fichier de configuration du serveur en mode bridge afin de fournir les infos DHCP et DNS du réseau :
server.conf
2) Configuration du client openvpn
Ci-dessous la configuration client nommer client.conf. J’insiste sur L’extension, car le script de démarrage d’openvpn va lire les fichiers aux extension *.conf et demarrer autant de tunnel que de fichier .conf
client.conf
On peux tester la config et suivre les logs :
3) Obtenir l’adresse IP et le DNS via le DHCP du vpn
Lorsque le service openvpn se connect il démarre pas l’interface tap0 je devais taper les commandes suivantes :
4) Automatiser l’obtention de l’IP et du DNS
Pour utiliser le script ci-dessous il est important d’installer le paquet resolvconf
Pour automatiser toute la procédure de connexion j’ai modifié le script update-resolv-conf dans /etc/openvpn
/etc/openvpn/update-resolv-conf : L 31 -> 36
Et voilà, désormais un simple
service openvpn startconnecte directement la machine au réseau privé et récupère une ip en dhcp.A noter que le service démarre automatiquement au boot de la machine.
- Un noyau LXC sur serveur dédié OVH
Suite à l’abandon de la technologie openvz dans les dépots officiels de debian wheezy ; Je dois me mettre à la page et utiliser LXC pour virtualiser mes environements linux.
Le comble c’est que LXC ne nécessite pas de recompilation de noyaux mais malheureusement les kernels livrés par ovh n’ont pas les cgroup d’activésRécupérer les sources du noyau, le patch grsec et la config ovh qui va bien
Se rendre dans un dossier de travail
Téléchargement du kernel
Téléchargement du patch grsecurity [1] correspondant à la version du noyau (3.9.6 dans l’article)
récuperer la config du noyaux ovh sur leur serveur ftp [2]
Préparer les sources
décompresser [3] le noyau
copier la configuration ovh dans racine du noyau linux décompressé précédemment
aller dans le répertoire du noyau fraichement décompressé
appliquer le patch grsec
Configuration des cgroups
dans le repertoire du kernel, lancer l’utilitaire de configuration du noyau
make menuconfiget configurer lxc cgroup [4] en activant les options suivantes :-> General setup [renommer votre kernel] Local version - append to kernel release -> Control Group support [x] Namespace cgroup subsystem [x] Freezer cgroup subsystem [x] Cpuset support [x] Simple CPU accounting cgroup subsystem [x] Resource counters [x] Memory resource controllers for Control Groups -> Group CPU scheduler [x] Basis for grouping tasks (Control Groups) (!) [x] Group scheduling for SCHED_OTHER (NEW) [x] CPU bandwidth provisioning for FAIR_GROUP_SCHED [x] Group scheduling for SCHED_RR/FIFO -> Namespaces support [x] UTS namespace [x] IPC namespace [x] User namespace (!) [x] Pid namespace [x] Network namespace -> Device Drivers -> Character devices [x] Support multiple instances of devpts [*] Unix98 PTY support -> Network device support [x] MAC-VLAN support [x] Virtual ethernet pair device -> Networking support -> Networking options [x] 802.1d Ethernet Bridging [x] Network priority cgroup -> Security options [x] File POSIX Capabilities (!)(!) suivant la version/configuration du kernel certaines options peuvent être déplacées ou inexistantes. Pour activer l’option usernamespace je suis tombé sur un bug pour le noyau 3.8. De plus une contrainte oblige a désactiver le système de fichier XFS [5] pour pouvoir activer cette option. XFS devrait être supporté à partir des versions 3.10 du kernel linux.Une fois votre configuration terminée, retourner sur la page d’accueil de menuconfig sélectionner
< Exit >, une boite de dialogue vous demande d’enregistrer votre configuration selectionner< yes >avant de quitter.Avant de compiler, On va tester la configuration :
CONFIG=/usr/src/linux-3.9.6/.config lxc-checkconfig --- Namespaces --- Namespaces: enabled Utsname namespace: enabled Ipc namespace: enabled Pid namespace: enabled User namespace: enabled Network namespace: enabled Multiple /dev/pts instances: enabled --- Control groups --- Cgroup: enabled Cgroup clone_children flag: enabled Cgroup device: enabled Cgroup sched: enabled Cgroup cpu account: enabled Cgroup memory controller: missing (!) Cgroup cpuset: enabled --- Misc --- Veth pair device: enabled Macvlan: enabled Vlan: enabled File capabilities: enabled
Cgroup memory controller : missing (!) - Debian Wheezy
Sur Debian wheezy, avec le paquet lxc, la configuration de "memory controller" semble manquante. En installant la dernière version de lxc (0.9) la vérification devient OKYoupi ! la configuration est maintenant terminée, il est temps de lancer la compilation avant de boire un café !
Compilation du noyau
Penser à installer les outils pour la compilation des noyaux. Sur Debian, le paquet s’appelle build-essential c’est un meta-paquet dédié a l’installation de tous les outils de compilation make, gcc, etc..
Lancer la compilation, ou -j X (correspond au nombre de core ) :
Le kernel se retrouve dans le dossier arch/x86/boot. On va Copier/renommer le nouveau kernel dans le dossier /boot du système :
Installer le kernel et redémarrer
Je vous invite à consulter mon article précédent intitulé Installer un nouveau kernel Linux en 5 étapes
1 - Mettre le nouveau kernel linux super optimisé dans le dossier /boot
2 - Editer Le fichier de "pré-configuration" personnalisé pour Grub2
Et ajouter une entrée en s’inspirant de /boot/grub/grub.cfg (notamment pour les uuid) pour votre tout nouveau kernel
3 - Forcer Grub à utiliser le Super Kernel par défaut
repérer la ligne
GRUB_DEFAULT="1", sinon l’ajouter.Modifier par le nom du "menuentry" créé précédemment.
4 - Régénérer le fichier de config de Grub2
5 - Zen et Confiant on Reboot !
2 Méthodes en php pour recherche des lignes qui correspondent a un pattern.
Méthode 1 - Rapide & gourmande en mémoire sur de gros fichiers
$tab = file('/path/fichier.txt'); $pattern = "/recherche/i"; $line = preg_grep($pattern, $tab); print_r($line); //affiche les lignes qui contiennent le mot rechercheMéthode 2 - Plus lent mais moins gourmand
$fh = fopen('/path/fichier.txt', 'r') or die($php_errormsg); while (!feof($fh)) { $line = fgets($fh, 4096); if (preg_match($pattern, $line)) { $result[ ] = $line; } } fclose($fh); print_r($result)
- Un petit filtre pour utiliser facilement HeadJs avec Spip
Headjs est une librairie jquery permettant d’optimiser le chargement des fichiers javascript. Voici comment l’utiliser dans un squelette spip en écrivant une fonction php.
Headjs [1] est une librairie jquery permettant d’optimiser le chargement des fichiers js.
Pour spip, une petite fonction pour utiliser headjs sur les scripts ajouter par les plugins dans le
de vos pages.[(#INSERT_HEAD|headjs)]function headjs($insert_head){ $pattern = "#src=\"(.*)\"#Ui" ; //khkzh preg_match_all($pattern, $insert_head, $split_content); foreach($split_content[1] as $libjs) $tabjs[]= '"'. $libjs . '"'; $insert_head = implode(', ',$tabjs); return $insert_head; }
Avec la nouvelle version de spip3 il est possible de boucler sur des tableaux [1].
Un bon exemple pour récuperer des tableaux multidimensionnels est la table spip_meta. Les plugins insèrent souvent des données sous forme de tableaux multidimensionnels sérialisés [2] pour sauvegarder leur configuration.
La boucle ci-dessous va récupérer le tableau php stocké en bdd.
Ce tableau va être affecté à la variable tabMetaAuteur, puis passé en "critère" de boucle.
On effectue une boucle sur les valeurs puis une boucle récursive [3] a l’intérieur de celle-ci qui va descendre dans toute la profondeur du tableau.[(#REM)<!-- Récupération d'un tableau en bdd-->] <BOUCLE_recup_tableau(spip_meta){nom = champs_extras_spip_auteurs}> #SET{tabMetaAuteur,#VALEUR} </BOUCLE_recup_tableau> [(#REM)<!-- Boucle sur le tableau -->] <ul> <BOUCLE_data_tab(DATA){source table, #GET{tabMetaAuteur}}> <li>#CLEF <B_data> <ul> [(#REM)<!-- Boucle sur le tableau et toute sa profondeur -->] <BOUCLE_data(DATA){source table, #VALEUR}{' '}> <li>\[#CLE\] => #VALEUR <BOUCLE_recursive_data(BOUCLE_data)> </BOUCLE_recursive_data> </li> </BOUCLE_data> </ul> </B_data> </li> </BOUCLE_data_tab> </ul>Noter l’écriture raccourcie de la boucle de calcul :
<BOUCLE_recursive_data(BOUCLE_data)/>Il est possible d’éviter une boucle et d’arriver au même résultat avec le code ci-dessous.
<BOUCLE_recup_tableau(spip_meta){nom = champs_extras_spip_auteurs}> <BOUCLE_data(DATA){source table, #VALEUR}{' '}> \[#CLE\] => #VALEUR <BOUCLE_recursive_data(BOUCLE_data)/> </BOUCLE_data> </BOUCLE_recup_tableau>Une solution encore plus rapide et d’utiliser print_r($array) de php en guise de filtre :’).
[(#GET{tabMetaAuteur}|unserialize|print_r{1})]À noter que le tableau doit être désérialisé contrairement au critère de boucle DATA qui accepte les 2 formats.
- jQuery WebGL Ripples
- Concevoir des formulaires efficaces – UX Collective
- Git Magique
- Specified key was too long ; max key length is 767 bytes
- Comment maximiser les performances de Nginx
- The Front-End Checklist
- [Vue.js] Collections de filtres
- Bosser sur la zone avec git
- Générer un fichier de commandes SVN et GIT pour l’installation d’un ensemble de plugins à partir de ceux d’un SPIP existant - Documentation technique
- Des icones légères pour les principaux réseaux sociaux
- Optimisez vos polices web
- Erreur : this version of PCRE is compiled without UTF support at offset 0
- Tableau de comparaisons en php
- Retrouver les Flux RSS Youtube
- Publier un dépôt Git existant vers un dépôt SVN
- explainshell.com
- PrestaShop 1.6.1.0 : a new level of performances - PrestaShop Developers’ blog
- Créer un menu de navigation plein écran
- 24 conseils pour faire de meilleures photos
- keepalive.sh : Relancer une commande en boucle
- KeePassX, Openbox et clavier fr_FR
- [Bash] Minuterie et Chronomètre
- Effeckt.css
- Testeur d’expressions régulières en ligne
- 8 expressions régulières à connaitre
- HTML Codes - Tableau de caractères ASCII
- ASCIIFlow Infinity
- Vider son cache [linux]
- Backgrounds and textures for design
- http://maxsteenbergen.com/fibonacci/