Planet Libre

Renault : Participez à la journée de test de Fedora 24 sur l'internationnalisation !

Aujourd'hui, ce mardi 23 avril, est une journée dédiée à un test précis : l’internationalisation de Fedora 24. En effet, durant le cycle de développement, l'équipe d'assurance qualité dédie quelques journées autours de certains composants afin de remonter un maximum de problèmes sur le sujet.

Elle fournit en plus une liste de tests précis à effectuer. Il vous suffit de les suivre, comparer votre résultat au résultat attendu et le notifier.

Qu'est-ce que l’internationalisation ?

Cela consiste à s'assurer que Fedora et ses applications fonctionnent correctement dans toutes les langues. Sont concernés la traduction, la gestion des paquets de langue (qui ont fait l'objet d’une grosse refonte dans Fedora 24) mais aussi des entrées de saisies. En effet, les langues non européennes notamment bénéficient d'assistance pour écrire dans leurs langues avec un clavier disposant de peu de touches par rapport aux caractères disponibles.

Typiquement les tests du jour couvrent :

  • Les paquets glibc-langpacks (nouveauté de Fedora 24) ;
  • Les paquets de langues des applications (retravaillées dans Fedora 24) ;
  • IBus (pour les entrées de saisies, dont la version console a été incluse dans Fedora 24) ;
  • Les applications doivent être traduites (Gnome, Libreoffice et Firefox de préférence) ;
  • Les navigateurs doivent afficher les sites web dans la langue de l'utilisateur par défaut ;
  • Quelques autres...
Comment y participer ?

Vous pouvez vous rendre sur la page des tests pour lister les tests disponibles et rapporter vos résultats. La page wiki récapitule les modalités de la journée.

En cas de bogue, il est nécessaire de le rapporter sur le BugZilla. Si vous ne savez pas faire, n'hésitez pas à consulter la documentation correspondante.

De plus, si une journée est dédiée à ces tests, il reste possible de les effectuer quelques jours plus tard sans problème ! Les résultats seront globalement d'actualité.

Gravatar de Renault
Original post of Renault.Votez pour ce billet sur Planet Libre.

Articles similaires

alterlibriste : Montrer n'est pas vouloir convaincre

Imaginez que vous ayez trouvé une pratique qui vous change la vie. Cela vous plaît vraiment, vous apporte plein de possibilités, vous permet d’apprendre, de pouvoir développer encore plus vos talents et passions ou simplement d’être un outil pratique pour une utilisation quotidienne simple et efficace.

Vous avez trouvé ? ‌‌

Bon maintenant, et comme vous êtes convaincus que ce que vous avez adopté est merveilleux et devrait être utilisé par tout le monde, vous n’avez plus qu’une idée en tête : prévenir la planète que vous avez trouvé le Graal et convaincre ses habitants qu’ils doivent faire comme vous. D’ailleurs, vous comencez déjà à trouver d’autres adeptes qui sont de cet avis et ont aussi pour objectif de convertir tout le monde.‌‌

Et il y a même d’autres groupes de gens qui ont à peu près le même but mais avec quelques variantes. Et c’est là que ça commence à se gâter. Sur deux plans : entre ces petits groupes et vis-à-vis du monde à conquérir.

  • par rapport à l’extérieur parce qu’il est difficile d’avoir un discours unanime, ou alors en admettant des compromis. Les seules organisations qui ont réussi à le faire étaient celles à structure pyramidale avec si possible un seul décideur tout puissant à sa tête. Une façon de faire qui n’est plus très en vogue.‌
  • en interne, c’est encore plus compliqué parce que lorsque quelqu’un présente quelque chose, certains adorent, d’autres apprécient avec certaines réserves mais quelques-uns trouvent cela contraire à l’idée de départ et font savoir leur mécontentement au maximum de membres pour les rallier à leur point de vue.‌

M’adressant ici sous une identité de libriste à un public en principe intéressé par le sujet, vous pensez sans doute que je parle des communautés du libre, du xscreensaver-gate, de Arch vs Debian, voire même des pro ou anti SystemD ? Et bien non, enfin pas en particulier car cela peut aussi bien s’appliquer au libre qu’à la pratique d’un art martial, un mouvement politique, une association écologiste, ou même une religion. Vous pourriez penser que cette dernière mention est déplacée dans une société de plus en plus laïque ? Mais j’y ai déjà fait allusion, ce n’est pas en mettant sous le tapis le moindre aspect religieux que ses influences historiques cessent d’agir sur nos comportements.‌

Et reprenez maintenant le début du billet en y mettant comme pratique formidable celle d’une religion, vous le comprendrez mieux. Et si vous remplacez maintenant la religion en question par l’activité que vous tentez de promouvoir (ce n’est pas pour rien que j’ai utilisé les termes comme adepte ou convertir, d’autres vont jusqu’à utiliser celui d’évangéliste en pensant que cela est totalement neutre), et vous vous rendez alors compte que votre façon de faire est proche du fanatisme, d’ailleurs le terme d’intégriste est souvent employé.‌

Personnellement, dans toutes les pratiques que j’ai adoptées et que je juge personnellement comme bien meilleure que celles des autres, je n’ai jamais essayé de convaincre qui que ce soit. Je ne cache pas mes choix et je peux en donner les raisons si on m’interroge dessus mais sans jamais dire que les autres ont tort de ne pas faire pareil. Je crois en la pédagogie par l’exemple. Si quelqu’un considère que je suis quelqu’un de bien, il tentera de faire comme moi et suivra mon exemple avec son approche personnelle. Si je fais cela, c’est aussi parce qu’aucun de mes choix n’a été fait parce que quelqu’un a essayé de m’en convaincre mais parce que j’ai décidé personnellement de le prendre sur un ou plusieurs exemples de personnes qui me donnaient envie de les suivre. Pourquoi devrais-je tenter de convaincre les autres alors que je ne supporte pas qu’on essaie de me convaincre ?‌

Cela n’empêche pas de rendre public les choses que l’on parvient à accomplir grâce à nos pratiques, mais on donne plus envie aux autres de nous rejoindre en disant ce que l’on peut faire mieux qu’en leur disant que leurs choix sont mauvais, d’autant qu’ils n’en ont peut-être pas pris conscience ou qu’ils ne connaissent pas d’alternative.‌

Alors, j’ai déjà prôné qu’il valait mieux être positif et encourager ce qu’on aime plutôt que de dénigrer ce que l’on n’aime pas. Quand je lis Cyrille qui me cite à ce propos, j’ai l’impression qu’il me décrit comme un positiviste adepte de la méthode Coué : "Je vais bien, tout va bien !"‌
Ce n’est pas du tout le cas. Relisez mes billets, au hasard sur Firefox OS : j’ai toujours été enthousiaste mais jamais aveugle. J’ai toujours fait une critique en donnant aussi bien les avancées que les manques ou les choix qui me semblaient peu judicieux.‌ ‌ Pour résumer, je n’essaie donc jamais de convaincre, j’essaie juste de donner des arguments sur mes choix. Si je trouve quelque chose de mauvais, je ne m’en occupe pas. Si je trouve quelque chose d’ameliorable, je fais part de mon avis à la personne concernée. Si je trouve quelque chose de bon, je l’utilise et je le dis publiquement sans omettre les éventuelles failles ou contre-indications. Parce que mes choix ne sont pas forcément bons pour tout le monde et parce que vous avez aussi à faire les votres selon vos besoins, vos envies, vos capacités.

Mon seul but est de mener un peu plus loin celui qui est déjà convaincu et de partager avec lui les pistes que j’ai trouvé pour qu’il en fasse l’usage de son choix.
Une vision du libre parmi d’autres... .

Gravatar de alterlibriste
Original post of alterlibriste.Votez pour ce billet sur Planet Libre.

Mathias : Comparatif des versions des paquets dans ubuntu 14.04 et 16.04 et debian 8 et 9 que j’utilise le plus

Dans le cadre de mes différents projets, je suis amené à utiliser différents systèmes d’exploitation et différentes générations. Pour effectuer le bon choix, il est parfois utile de pouvoir comparer les versions des paquets disponibles dans les distributions (même si j’aime bien compiler certains paquets pour mieux coller à mes attentes, parfois il est nécessaire d’utiliser les paquets – pré-requis client par ex-).

J’ai choisi arbitrairement Ubuntu 14.04 LTS et la future 16.04 LTS ainsi que Debian stable (8) et testing. Il est bien sûr possible d’utiliser des ppa afin de disposer de versions plus à jour, mais cela est hors scope (et impose au passage une nécessaire confiance dans le contributeur et ajoûte une complexité de migration).
Pour préciser, ce comparatif a été réalisé dans l’objectif exclusif d’un usage en serveur et sans interface graphique !

Voici le tableau au 11/04/2016

Version des paquets selon la distribution Ubuntu / debian Paquets Ubuntu 14.04 LTS Ubuntu 16.04 LTS Debian 8 Debian Testing mariadb-server 5.5.47 10.0.23-2 10.0.23 10.0.24 mysql-server 5.5.47 5.7.11 5.5.47 5.6.28 postgresql 9.3+154 9.5+173 9.4+165 9.5+173 odbc-postgresql 1:09.02.0100 1:09.03.0300 1:09.03.0300 1:09.03.0300 redis-server 2:2.8.4 2:3.0.6 2:2.8.17 2:3.0.6 unixodbc 2.2.14 2.3.1 2.3.1 2.3.1 apache2 2.4.7 2.4.18 2.4.10 2.4.18 nginx 1.4.6 1.9.14 1.6.2 1.9.10 gunicorn 17.5 19.4.5 19.0 19.4.5 ssh 1:6.6 1:7.2 1:6.7 1:7.2 fail2ban 0.8.11 0.9.3 0.8.13 0.9.3 iptables 1.4.21 1.6.0 1.4.21 1.6.0 munin 2.0.19 2.0.25 2.0.25 2.0.25 rsyslog 7.4.4 8.16.0 8.4.2 8.16.0 freeswitch na na na na asterisk 1:11.7.0 1:13.1.0 1:11.13.1 1:13.7.2 kamailio 4.0.4 4.3.4 4.2.0 4.4.0 freeradius 2.1.12 2.2.8 2.2.5 2.2.8 ansible 1.5.4 2.0.0.2 1.7.2 2.0.1.0

Ma première conclusion de cette revue, est de ne plus lancer de nouveaux projets avec Ubuntu 14.04 LTS !

Je mettrais à jour de temps en temps cette liste (n’hésitez pas à proposer quelques paquets indispensables pour les projets télécoms)

 

Autres articles à lire:

Cet article Comparatif des versions des paquets dans ubuntu 14.04 et 16.04 et debian 8 et 9 que j’utilise le plus est apparu en premier sur Blog des télécoms - Par Mathias, expert et formateur rédigé par Mathias.

Gravatar de Mathias
Original post of Mathias.Votez pour ce billet sur Planet Libre.

Articles similaires

Journal du hacker : Liens intéressants Journal du hacker semaine #14

Pour la 14ème semaine de 2016, voici 5 liens intéressants que vous avez peut-être ratés, relayés par le Journal du hacker, votre source d’informations pour le Logiciel Libre francophone !

Pour ne plus rater aucun article de la communauté francophone, voici :

De plus le site web du Journal du hacker est « adaptatif (responsive) ». N’hésitez pas à le consulter depuis votre smartphone ou votre tablette !

Le Journal du hacker fonctionne de manière collaborative, grâce à la participation de ses membres. Rejoignez-nous pour proposer vos contenus à partager avec la communauté du Logiciel Libre francophone et faire connaître vos projets !

Et vous ? Qu’avez-vous pensé de ces articles ? N’hésitez pas à réagir directement dans les commentaires de l’article sur le Journal du hacker ou bien dans les commentaires de ce billet :)

Gravatar de Journal du hacker
Original post of Journal du hacker.Votez pour ce billet sur Planet Libre.

Articles similaires

Planet Libre : Brèves du Planet Libre - lundi 11, avril 2016

La commission des lois du Sénat ne veut ni encouragement, ni priorité au logiciel libre - L'April droit libre April institution

antistress : "À l'occasion de l'examen du projet de loi « pour une République numérique » (renommé en « pour une société numérique ») l'inscription d'un principe de priorité au logiciel libre dans la loi a été rejeté. La disposition, issue de l'Assemblée nationale, qui visait à simplement à encourager l'utilisation des logiciels libres a même carrément été supprimée suite au vote d'un amendement du rapporteur. Le sujet reviendra cependant en débat à l'occasion de la séance publique qui débutera le 26 avril 2016."

Chiffrement : la Cnil met en garde contre les backdoors - Numerama pistage chiffrement Tor institution

antistress : "Sans aller jusqu'à opposer un « non » ferme et définitif, la Cnil s'est montrée très hostile, vendredi, à toute idée de donner à l'État le pouvoir d'accéder aux données chiffrées des citoyens grâce à des backdoors ou à un double des clés de chiffrement."

La liberté de panorama évolue au Sénat, mais restera inapplicable selon Wikimédia - Next INpact copyright droit Wikimédia

antistress : "La commission des lois du Sénat a adopté mercredi un amendement assouplissant légèrement la « liberté de panorama » introduite en janvier dernier par les députés, dans le cadre du projet de loi Numérique. En dépit de ce pas en avant, la fondation Wikimédia estime que ce nouveau droit ne pourra toujours pas être effectif sur Internet."

Quand Snowden se moque de François Hollande et son double discours - Numerama pistage Snowden institution droit lanceur_d'alerte

antistres : "« Vraiment ? », demande Edward Snowden à François Hollande, lorsque le président de la République assure qu'il faut protéger les lanceurs d'alerte."

Réseaux : Darknet et terrorisme, de l’amalgame à la désinformation - SudOuest.fr pistage chiffrement Tor institution

antistress : "Si l’on en croit les autorités, en France comme ailleurs, l’interdiction des échanges anonymes et confidentiels permettrait de repérer et de neutraliser les groupes terroristes, analyse un expert"
(via la revue de presse de l'April)

[TUTO] Les Bloatwares sous Android 5 Lolipop - Le Hollandais Volant Android Google astuce logiciel smartphone pistage

antistress : "Dans mon article expliquant comment désactiver facilement les applications Android, je donnais aussi une liste des APK système qu’on peut désactiver, et avec elle leur fonction au sein d’Android. L’article a presque 3 ans et était faite pour Android 4.1, voici venu le moment pour une mise à jour."
(via les Liens en vrac de sebsauvage)

De l’intimité et de sa nécessité - laquadrature.net pistage institution droit

antistress : "Au fil des ans, j’ai construit quelques arguments contre cette surveillance omniprésente et ses partisans"

Crypto: pourquoi l’ex-chef de la NSA défend Apple - BUG BROTHER pistage chiffrement institution

antistress : "Dans une interview vidéo accordée à l'American Enterprise Institute, un think tank conservateur, Michael Hayden, qui dirigea la NSA de 1999 à 2005, puis la CIA entre 2006 et 2009, expliquait récemment ce pourquoi il comprenait et même soutenait Apple face à la demande du FBI, qui voulait pouvoir disposer d'un logiciel permettant de passer outre le mécanisme de chiffrement des iPhone."
(via le Standblog)

L'Inde suspend le service Internet gratuit de Facebook - LeFigaro.fr Inde neutralité internet droit

antistress : "Free Basics, une application permettant d'accéder à certains services en ligne gratuitement, a été suspendu par le régulateur indien des télécoms". L'inde ne se laisse pas enfumer par Facebook et défend la neutralité du net (et donc l'intérêt général à moyen-long terme). Bravo !

Décidément l'Inde est au taquet : http://liens.planet-libre.org/?TVd3oA

[EN] After Some Dangerous Wavering, Indian Patent Office Gives Definitive 'No' To Software Patents - techdirt brevet Inde droit

antistress : L'Inde refuse de mettre en place la brevetabilité des logiciels. Cool :)
(via le Standblog)

Décidément l'Inde est au taquet : http://liens.planet-libre.org/?9Moh5A

Choisir son smartphone - Standblog Android iOS WindowsPhone Google Apple Microsoft FirefoxOS Firefox Mozilla pistage smartphone

antistress : "Pas facile, dans de telles conditions, d’utiliser un téléphone Android tout en protégeant nos données. Il reste toutefois plusieurs axes sur lesquels travailler :
1. Utiliser des logiciels libres (Utiliser des dépots libres)
2. Utiliser des logiciels proposant du chiffrement
3. Utiliser des applications se connectant à des services de Cloud autres que ceux de Google et des grands silos, idéalement décentralisés
4. Utiliser des versions d’Android moins dépendantes de Google."

Cf aussi "comment désactiver facilement les applications Android" : http://liens.planet-libre.org/?eQLuzQ

Gravatar de Planet Libre
Original post of Planet Libre.Votez pour ce billet sur Planet Libre.

Articles similaires

Angristan : Compiler et installer Nginx avec le module PageSpeed sous Debian 8

Compilier et installer Nginx avec le module PageSpeed sous Debian 8

Ceux qui suivent un peu mon blog doivent savoir que j'ai déjà fait un article sur PageSpeed et Nginx, il y a quelques mois. Dans cet article, j'utilisais les sources des dépôts pour Debian afin d'arriver, au final, à un paquet .deb à installer.

Cette méthode est pratique puisque nginx est installé directement avec tout ce qu'il faut et est facilement désinstallable. Cependant, le désavantage principal c'est que c'est que du bidouillage pas super propre, et c'est très difficilement scriptable donc pas pratique à installer et mettre à jour.

Dans cet article, nous allons voir comment compiler et installer Nginx Mainline depuis les sources officielles de nginx.org, avec le module PageSpeed. En bonus, un script qui permet de la faire sans se fatiguer :)

Installation manuelle Installation des dépendances

On commence par installer les paquets nécessaires à la compilation :

apt install build-essential ca-certificates zlib1g-dev libpcre3 libpcre3-dev tar unzip libssl-dev

On récupère le module et on le prépare. Tout d'abord on définit une variable avec la version, ce sera plus pratique. Vous pouvez soit regarder la version sur cette page et le faire manuellement :

NPS_VER=1.11.33.0

Soit on récupère la version depuis cette même page et on joue avec des commandes pour n'avoir que le numéro de version :

NPS_VER=$(curl -s https://developers.google.com/speed/pagespeed/module/build_ngx_pagespeed_from_source | grep NPS_VERSION= | cut -c13-22)

Ensuite, on télécharge et on extrait les différents fichiers :

cd /opt wget https://github.com/pagespeed/ngx_pagespeed/archive/release-${NPS_VER}-beta.zip unzip release-${NPS_VER}-beta.zip rm release-${NPS_VER}-beta.zip cd ngx_pagespeed-release-${NPS_VER}-beta wget https://dl.google.com/dl/page-speed/psol/${NPS_VER}.tar.gz tar -xzvf ${NPS_VER}.tar.gz rm ${NPS_VER}.tar.gz

Le module est prêt ! On peut passer à Nginx.

Compilation et installation de Nginx

Comme précédemment, vous pouvez définir votre variable manuellement :

NGINX_VER=1.9.14

Ou via le site de Nginx :

NGINX_VER=$(curl -s http://nginx.org/en/CHANGES | awk 'NR==2' | awk '{print $4}')

Vous pouvez aussi utiliser la version stable :

NGINX_VER=1.8.1

Ensuite on télécharge le code source de Nginx :

cd /opt wget -qO- http://nginx.org/download/nginx-${NGINX_VER}.tar.gz | tar zxf -

Puis on configure les paramètres et les modules. Il y a plein de combinaison de modules possible, voici celle que j'utilise. Faites ce que vous voulez avec :)

cd nginx-${NGINX_VER} ./configure \\ --prefix=/etc/nginx \\ --sbin-path=/usr/sbin/nginx \\ --conf-path=/etc/nginx/nginx.conf \\ --error-log-path=/var/log/nginx/error.log \\ --http-log-path=/var/log/nginx/access.log \\ --pid-path=/var/run/nginx.pid \\ --lock-path=/var/run/nginx.lock \\ --http-client-body-temp-path=/var/cache/nginx/client_temp \\ --http-proxy-temp-path=/var/cache/nginx/proxy_temp \\ --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \\ --user=nginx \\ --group=nginx \\ --without-http_ssi_module \\ --without-http_scgi_module \\ --without-http_uwsgi_module \\ --without-http_geo_module \\ --without-http_map_module \\ --without-http_split_clients_module \\ --without-http_memcached_module \\ --without-http_empty_gif_module \\ --without-http_browser_module \\ --with-threads \\ --with-file-aio \\ --with-http_ssl_module \\ --with-http_v2_module \\ --with-ipv6 \\ --with-http_mp4_module \\ --with-http_auth_request_module \\ --with-http_slice_module \\ --add-module=/opt/ngx_pagespeed-release-${NPS_VER}-beta

On voit qu'on a ajouté le chemin vers le module PageSpeed :)

Il ne nous reste plus qu'à compiler :

make -j $(nproc)

L'option -j $(nproc) permet de compiler en utilisant tous les coeurs disponibles sur le CPU, et ainsi accélérer la manoeuvre.

Et on installe :

make install

Voilà !

Il ne nous reste plus qu'à vérifier que le module est bien présent avec la commande nginx -V :

Compilier et installer Nginx avec le module PageSpeed sous Debian 8

Installation automatique grâce à nginx-autoinstall

Bon, maintenant, vous connaissez la marche à suivre et vous avez plus ou moins compris le fonctionnement. Même si cette méthode reste plus légère que celle que je vous avais présenté, il y a quand même quelques désavantages :

  • il faut le faire à la main
  • pas de script d'init pour Systemd
  • la conf de base marche pas...

C'est pour cela que j'ai créé un script qui permet de tout automatiser. Il vous permet d'installer plusieurs modules, dont PageSpeed.

Il est très pratique puisqu'il s'occupe d’absolument tout ! Lorsqu'une mise à jour d'un module ou de Nginx est dispo, il vous suffit de relancer le script. Lors de votre première installation, il s'occupera aussi de vous mettre une configuration fonctionnelle et un script Systemd. Ainsi, votre Nginx sera totalement fonctionnel.

On récupère le script :

wget --no-check-certificate https://bit.ly/nginx-autoinstall -O nginx-autoinstall.sh

On le rend exécutable :

chmod +x nginx-autoinstall.sh

Et on l'exécute !

./nginx-autoinstall.sh

Compilier et installer Nginx avec le module PageSpeed sous Debian 8

Je tiens à préciser que c'est un script perso et qu'il est possible qu'il ne convienne pas à tout le monde. Aussi, il ne fonctionne que sous Debian 8.

Configuration de PageSpeed

Maintenant que Nginx est installé avec PageSpeed, il va falloir le configurer. La doc du module l'explique très bien mais voici une base.

Activation

Dans votre nginx.conf (entre les balises http)

pagespeed off; # Needs to exist and be writable by nginx. # Use tmpfs for best performance. pagespeed FileCachePath /var/ngx_pagespeed_cache;

On désactive PageSpeed de base, pour pouvoir l'activer dans un vhost précis. En ce qui concerne l'emplacement du cache, je vous conseille de lire mon article : Mettre le cache du module PageSpeed en RAM avec tmpfs.

Puis, rajouter ceci dans le vhost de votre choix (entre les balises server) :

pagespeed on; # Don't show PageSpeed version in the header pagespeed XHeaderValue "blablabla"; # Ensure requests for pagespeed optimized resources go to the pagespeed handler # and no extraneous headers get set. location ~ "\\.pagespeed\\.([a-z]\\.)?[a-z]{2}\\.[^.]{10}\\.[^.]+" { add_header "" ""; } location ~ "^/pagespeed_static/" { } location ~ "^/ngx_pagespeed_beacon$" { }

On active donc PageSpeed et on met les règles de bases. On modifie aussi la valeur du header pour éviter de montrer la version.

Les filtres

Actuellement PageSpeed ne fait rien. On va donc rajouter des filtres !

Pour ma part, j'utilise ceux-là (à rajouter dans le server block):

# Filters pagespeed EnableCachePurge on; pagespeed RewriteLevel PassThrough; pagespeed EnableFilters remove_comments; pagespeed EnableFilters collapse_whitespace; pagespeed EnableFilters rewrite_images; pagespeed EnableFilters rewrite_javascript; pagespeed EnableFilters rewrite_css;

C'est ceux qui me paraissaient le plus pertinent. Il y en a plein d'autres, par exemple :

pagespeed EnableFilters move_css_above_scripts; pagespeed EnableFilters insert_dns_prefetch; pagespeed EnableFilters combine_javascript; pagespeed EnableFilters defer_javascript; pagespeed EnableFilters inline_javascript; pagespeed EnableFilters outline_javascript; pagespeed EnableFilters combine_css; pagespeed EnableFilters inline_css; pagespeed EnableFilters outline_css; pagespeed EnableFilters inline_google_font_css;

À vous de les tester et de voir leur impact sur votre site. Tout est expliqué en détails concernant les filtres dans la doc.

Administration

L'administration permet de voir des statistiques et de gérer certaines choses, notamment la purge du cache.

Encore une fois, c'est expliqué dans la doc, mais elle n'est pas super claire donc voici :

Dans votre nginx.conf (entre les balises http)

pagespeed StatisticsPath /ngx_pagespeed_statistics; pagespeed GlobalStatisticsPath /ngx_pagespeed_global_statistics; pagespeed MessagesPath /ngx_pagespeed_message; pagespeed ConsolePath /pagespeed_console; pagespeed AdminPath /pagespeed_admin; pagespeed GlobalAdminPath /pagespeed_global_admin;

Dans votre vhost :

# PageSpeed Admin location /ngx_pagespeed_statistics { allow all; auth_basic "Denied"; auth_basic_user_file /srv/.htpasswd; } location /ngx_pagespeed_global_statistics { allow all; auth_basic "Denied"; auth_basic_user_file /srv/.htpasswd; } location /ngx_pagespeed_message { allow all; auth_basic "Denied"; auth_basic_user_file /srv/.htpasswd; } location /pagespeed_console { allow all; auth_basic "Denied"; auth_basic_user_file /srv/.htpasswd; } location ~ ^/pagespeed_admin { allow all; auth_basic "Denied"; auth_basic_user_file /srv/.htpasswd; } location ~ ^/pagespeed_global_admin { allow all; auth_basic "Denied"; auth_basic_user_file /srv/.htpasswd; }

Ici, je bloque l'accès à l'admin avec un mot de passe, sinon c'est entrée libre. Il faudra donc générer un .htpasswd et modifier le chemin en conséquence. Vous pouvez utiliser cet outil.

PageSpeed c'est sympa, mais attention...

Vous êtes maintenant un pro du module PageSpeed. Mais faites attention, étant en beta, c'est un module assez instable, et d'une version à l'autre ça peut tout foutre en l'air. Utilisez le sur des petits sites, mais surtout pas sur de la grosse prod. Les filtres que vous utilisez peuvent aussi casser des choses (Piwik ne fonctionnera pas avec PageSpeed par exemple).

Petit exemple : hier je me prenais des erreurs 499 de Nginx dans l'admin WordPress. Après une demi-journée de recherche, j'ai finalement trouvé que ces erreurs donnaient parfois ERR_SPDY_PROTOCOL_ERROR dans le navigateur, et que c'était lié à ce bug... Du coup j'ai désactivé PageSpeed en attendant la prochaine version.

Pour résumer : PageSpeed c'est pratique pour optimiser un site web, mais :

  • L'optimisation ne se fait pas que à ce niveau
  • PageSpeed est instable et peut péter un truc d'une version à l'autre
  • Les filtres peuvent aussi causer des problèmes, donc vérifiez bien
  • PageSpeed fait consommer un peu plus de CPU à Nginx.

Ça reste un bon module, je l'utilise depuis plus d'un an ! Mais soyez sûr de bien le maîtriser pour éviter de tout casser ;)

L'article Compiler et installer Nginx avec le module PageSpeed sous Debian 8 a été publié sur Angristan

Gravatar de Angristan
Original post of Angristan.Votez pour ce billet sur Planet Libre.

Articles similaires

nIQnutn : Désactiver le message d'avertissement de xscreensaver au lancement

Pour désactiver le message d'avertissement de xscreensaver au lancement de votre session, voici une solution simple.

Pour désactiver ce message un peu agaçant au démarrage, il suffit de modifier le fichier de configuration .xscreensaver en passant la variable lock à True :

~/.xscreensaver ... lock: True ... Vous voilà débarrasser. Ressources
2016 nIQnutn CC-BY

Gravatar de nIQnutn
Original post of nIQnutn.Votez pour ce billet sur Planet Libre.

Monitoring-FR : Logstash 2.3.0 : forte amélioration des performances

Logstash est un outil de collecte, de traitement et de transport de données. Logstash est disponible en version 2.3.0 depuis le 30/03/2016 et cette nouvelle version apporte, en autres, une augmentation significative des performances.

Présentation rapide de Logstash

Logstash a pour but d’ingérer des logs (fichiers journaux des systèmes et applications) ou des messages (provenant de RabbitMQ par exemple), de les analyser (filtrer les messages inutiles, les découper, extraire l’information utile, les formater) puis de les stocker, généralement dans ElasticSearch pour être indexées. La force de Logstash est de pouvoir ingérer tout type de logs :

  • des logs au format syslog : très répandus sur les systèmes GNU/Linux et Unix
  • des logs en texte brut
  • des logs Apache et Log4j
  • des logs Windows Event Logs
  • des messages au format JSON
  • des messages passant par des files de messages (RabbitMQ, ZeroMQ)

Bien entendu, vous pouvez étendre le système et faire ingérer vos propres formats. Une fois les messages ingérés, Logstash les filtre, prend des actions et/ou les formate pour les stocker dans ElasticSearch, MongoDB, Riak, …

Logstash évolue très rapidement et de nouvelles versions apportent souvent de nouveaux connecteurs, tant en entrée qu’en sortie.

Version 2.3.0 : forte amélioration des performances

La version 2.3.0 de Logstash est sortie le 30/03/2016 et cette version apporte une forte amélioration des performances. Elle se traduit par un traitement plus rapide des messages, une augmentation de la vitesse de traitement jusqu’à, dans certains cas, 79%. Cette augmentation est due à la ré-écriture en pure Java d’un composant de l’application, préalablement écrit en Ruby. L’équipe de développement de Logstash a fait des tests et a publié les résultats dont voici un résumé :

 améliorations des performances diagramme

Lostash 2.3.0 : améliorations des performances diagramme

Lostash 2.3.0 améliorations des performances tableau

Lostash 2.3.0 améliorations des performances tableau

 

 

Relecture à chaud de la configuration

Cette version 2.3.0 introduit la relecture de la configuration à chaud. Cela permet de ne pas avoir à redémarrer le service lorsqu’un paramètre de la configuration est modifié : en effet, Logstash va vérifier régulièrement (toutes les 3 secondes, par défaut) si une modification a été faite sur les fichiers de configuration. Dans ce cas, il va relire les fichiers et adapter son comportement. Pratique lorsqu’on développe mais aussi lorsque la configuration est modifiée par des outils externes, en fonction de règles dynamiques : cela évite de redémarrer Logstash par un script.

Pour activer la relecture à chaud, il faut passer l’option --auto-reload lors du démarrage de Logstash.

Si jamais vous souhaitez maîtriser le moment où LogStash doit relire la configuration, il vous suffit de ne pas passer l’option  --auto-reload et d’envoyer le signal SIGHUP au processus.

Gravatar de Monitoring-FR
Original post of Monitoring-FR.Votez pour ce billet sur Planet Libre.

Articles similaires

Tuxicoman : Que change le chiffrement de WhatsApp?

L’ « annonce » de WhatsApp utilisant le chiffrement de bout en bout ne doit pas vous leurrer:

  • Le chiffrement de bout en bout utilisé fait abstraction du problème des métadonnées.
    Leur page sur la sécurité et le whitepaper sur le chiffrement prend bien soin de ne pas parler du traitement réservé aux métadonnées. Or les métadonnées sont les données les plus efficaces aujourd’hui pour décrire un comportement. Elles sont faciles à analyser.
    WhatsApp récupère toujours tout votre carnet de contacts et vous identifie par votre numéro de téléphone.
    Il note pour chaque message envoyé les numéros de téléphone de l’émetteur et du destinataire, l’heure, les IP. Donc si DSK appelle Julie Gayet à tous les jours à 2H du matin, WhatsApp a cette info, l’enregistre et la transmet à des tiers.
    C’est bien caché mais écrit noir sur blanc dans leur conditions légales, dans le paragraphe « The Information WhatsApp Does Not Collect » : « Notwithstanding the above, WhatsApp may retain date and time stamp information associated with successfully delivered messages and the mobile phone numbers involved in the messages, as well as any other information which WhatsApp is legally compelled to collect. »
    Donc vous ne pouvez même pas dire que vous ne saviez pas.
  • Derrière le vernis de la communication, personne ne peut vérifier ce qu’il en est réellement. On ne peut pas vérifier le code tournant sur le téléphone ni vérifier le contenu du serveur.
  • Si dans une prochaine mise à jour, WhatsApp coupe court au chiffrement pour faire du MitM, vous n’aurez aucun moyen de le voir.
  • Le serveur de WhatsApp est l’unique délivreur des clés publiques temporaires utilisées pour le chiffrement des messages. Il est donc aisé pour lui de faire un MITM quand ça lui chante sans aucune modification du code client.
  • WhatApp comme Signal, utilise Google Cloud Messaging pour acheminer les messages. Pour l’utiliser, il faut avoir les GoogleApps installées et donc donner les droits root sur son téléphone à Google. Donc rien n’empêche Google de récupérer votre clé privée de WhatsApp quand ça lui chante. Si c’est pour se protéger de Google/NSA/USA, c’est raté.
  • Facebook (la maison mère de WhatsApp) n’est pas philanthrope. Le but est de faire le maximum de thune. Avec WhatsApp, je pense qu’ils essayent aussi de conquérir 90% du marché pour remplacer les opérateurs de téléphonie classique. Si bien que demain on sera obligé de donner son carnet d’adresse et le détail de ses communications à WhatsApp/USA.

facture_detaillée

A mon avis, l’onion routing est une bien meilleure façon d’avoir une vie privée. Il faudrait contrôler chacun des nœuds intermédiaires pour avoir accès aux métadonnées.

Sinon, contrôler son serveur de connexion (celui qui manipule les métadonnées) peut également être une solution. Par exemple dans le cas serveur de connexion de WhatsApp, seul WhatsApp sait qui communique avec qui.

Voila, personnellement, j’utilise Conversations (un logiciel libre) depuis Fdroid (un dépôt d’application de logiciels libres recompilés et qui ne demande pas de droits root). Conversation fait du chiffrement de bout en bout (y compris sur le transfert des photos/audios/fichiers) avec OMEMO, OTR ou PGP au choix.
J’ai mon serveur XMPP sous Prosody.

Related Posts: J'aime!(7)Tu dis de la merde!(1)

Gravatar de Tuxicoman
Original post of Tuxicoman.Votez pour ce billet sur Planet Libre.

Articles similaires

Carl Chenet : « La » communauté du Logiciel Libre, ça n’existe pas

Suivez-moi aussi sur Diaspora*diaspora-banner ou Twitter 

J’avais depuis quelques temps envie d’écrire un billet de blog au sujet de la soi-disant communauté du Logiciel Libre et le dernier article de Frédéric Bezies , où il regrette le manque de coordination et d’unité de cette communauté, m’a donné la motivation pour finalement expliquer pourquoi tant de gens se désillusionnent quant à « cette » communauté.

« La » communauté du Logiciel Libre, ça n’existe pas

Il est en effet vain dans la plupart des cas de parler de « la » communauté du Logiciel Libre. On peut – et je le fais souvent moi-même – parler de la communauté du Logiciel Libre pour regrouper dans un même sac tous les acteurs touchant de près ou de loin au Logiciel Libre, mais c’est une dénomination vague, peu précise et que l’on ne doit pas employer à tort et à travers.

Et pour cause, car aussi bien d’un point de vue technique que d’un point de vue idéologique, nous, les acteurs de cette soi-disant communauté, sommes profondément et sûrement irrémédiablement divisés.

Les communautés techniques

Rappelons-le car beaucoup de personnes même proches du Logiciel Libre ont tendance à l’oublier. 99% du temps, un projet du Logiciel Libre, c’est au départ un individu isolé non rémunéré qui se motive et prend son courage à deux mains pour écrire du code et porter seul – au moins au début – un projet pour répondre à un besoin existant qui le dérange lui.

Ce faisant, il s’insère dans une communauté technique, celle des outils qu’il utilise pour régler son problème, puis le jour où son projet est prêt, s’il fait le choix de le rendre public, dans une communauté idéologique répondant aux critères que l’on verra au chapitre suivant.

python-logo-master-v3-TMLa communauté Python, avec sa propre licence : la PSF, sa propre vision, ses propres objectifs

Au premier niveau, le développeur du Logiciel Libre, c’est donc un utilisateur des outils qui sont mis à disposition par une communauté technique. Il adhère souvent aux idées derrière les outils qu’ils utilisent au quotidien parce qu’il y voit un avantage direct et ressent la cohérence des choix techniques et idéologiques faits par la communauté l’ayant précédé.

Maintenant si on parle de « la » communauté du Logiciel Libre, ça sous-entend que le premier niveau dont je parlais à l’instant se fond  dans un deuxième niveau, un niveau plus vaste, plus abstrait, plus global. Donc plus éloigné du développeur au quotidien, touchant des problématiques qu’il ne ressent peut-être pas tous les jours.

Alors qu’au quotidien pour lui, « sa » communauté, c’est par exemple le langage Python et ses membres, pas Perl. Ou la distribution Debian et les buts du projet Debian, pas les systèmes BSD. On se construit donc aussi en opposition à d’autre communautés techniques et idéologiques.

freebsdFreeBSD, système d’exploitation et suite d’outils qui privilégient la licence BSD

Les développeurs contribuent donc – le plus souvent dans le cadre de leur temps libre, le plus souvent de façon non-rémunérée, et dans ce domaine seule la motivation permet d’avancer – aux sujets qui nous intéressent et nous motivent au sein d’une communauté technique et idéologique et pas sur les sujets dont « la communauté du Logiciel Libre » aurait besoin.

La diversité des acteurs et de leurs idées, de leurs approches techniques et des solutions qu’ils trouvent au quotidien  sont les éléments qui rendent aussi attractif pour beaucoup d’entre nous ce milieu technique et idéologique.

GPL contre BSD/MIT

J’ai évoqué et développé ce point dans l’un de mes précédents articles le danger Github : d’un point de vue idéologique, principalement deux idées du Logiciel Libre coexistent.

La vision incarnée par la licence GPL peut être résumée à une notion fondamentale intégrée par ses défenseurs et ses détracteurs : contaminante.  La GPL va nourrir d’elle-même la communauté en réinjectant automatiquement dans le parc logiciel sous GPL tous les dérivés des logiciels eux-mêmes sous GPL. La communauté sert la communauté. Les utilisateurs de la GPL trouvent cohérents de n’utiliser que du Logiciel Libre pour ne pas nourrir l’ennemi , c’est-à-dire le logiciel privateur.

Les licences BSD/MIT sont pour leur part plus permissives, permissives à l’extrême. Rappelons qu’un logiciel dérivé d’un logiciel sous licence  BSD/MIT peut être déposé sous une licence propriétaire. Les licences BSD/MIT sont donc non-contaminantes. On a donc la liberté de rendre un logiciel – libre à la base – privateur. Ce qui se fait beaucoup et l’on retrouve les systèmes d’exploitation BSD dans nombre de système d’exploitation propriétaires. voir à ce sujet la liste à couper le souffle des produits commerciaux reposant sur FreeBSD.

Les défenseurs des licences BSD/MIT parlent de liberté réelle face à la GPL, ses détracteurs de la liberté de se tirer une balle dans le pied. Étant donné que les défenseurs de ces licences permissives type BSD/MIT trouvent normal la coexistence du Logiciel Libre et du logiciel privateur, ils utilisent eux-mêmes les deux sans problème, ce qui est cohérent idéologiquement.

bsdvsgpl

Donc au final deux visions très différentes du Logiciel Libre – la GPL plus conquérante, les BSD/MIT plus flexibles – coexistent.

Des communautés constituent le Logiciel Libre

On l’a vu, il serait donc plus précis de parler des communautés qui constituent le Logiciel Libre. Elles sont à la fois techniques et idéologiques et apportent des outils concrets à leurs membres. Elles se définissent par rapport à ce qu’elles construisent, à leurs contributions, mais aussi par opposition aux autres communautés techniques et idéologiques. Il est donc impossible de parler d’une communauté du Logiciel Libre, à moins de la réduire au peu d’idées transverses aux différentes communautés techniques et idéologique la constituant.

J’ai pu remarquer que de nombreux intervenants parlent souvent de la communauté du Logiciel Libre pour parler en fait d’un sous-ensemble de celle-ci, en fait de leur communauté.Par exemple un défenseur de la GPL va parler de la communauté du Logiciel Libre en omettant l’idée de liberté complète derrière les licences BSD/MIT. Ou un idéologue auto-proclamé du Logiciel Libre va déclarer de grandes directions que « le Logiciel Libre » devrait prendre dans une approche top-down alors que, comme nous l’avons vu, tous les contributeurs techniques du Logiciel libre intègrent avant tout une communauté technique et idéologique précise, un sous-ensemble de « la » communauté du Logiciel libre.

trollLes trolls, une activité prisée des Libristes

Au final il est peut-être rageant de voir au quotidien des projets s’affronter, se troller, de voir des projets réinventer ce qui existent déjà au lieu de l’améliorer. Il semble même incompréhensible de voir des projets entièrement recoder pour des questions de licences ou parfois juste d’ego entre membres de ce qu’on croit être une même communauté. Mais cela tient à une incompréhension de l’organisation et des interactions des projets du Logiciel Libre entre eux.

L’explication tient au fait que le Logiciel Libre est constitué de nombreuses communautés, qui partagent quelques grandes idées communes certes, mais qui portent chacune des solutions techniques, une vision et une identité propres. Elles arrivent à se rejoindre très ponctuellement autour d’un effort commun sur un point extrêmement consensuel, mais il sera tout simplement impossible de les faire toutes et en permanence converger vers des grands objectifs qui bénéficieraient (ou pas) à  une vague communauté globale dans laquelle se reconnaîtraient tous les acteurs du Logiciel Libre.

La diversité des communautés qui le compose fait la force du Logiciel Libre, nous partageons quelques grandes idées et nous inventons au quotidien nos propres solutions. Et c’est de cette façon que nous avons avancé jusqu’à aujourd’hui.


Gravatar de Carl Chenet
Original post of Carl Chenet.Votez pour ce billet sur Planet Libre.

Articles similaires

Dimitri Robert : Initiation GIMP : la retouche photo

Dans les formations professionnelles que je propose via la coopérative Artefacts il y a l’initiation GIMP à la retouche photo.

Chacune de mes formations fait l’objet d’un support de cours afin de laisser plus que des notes aux stagiaires. Afin de respecter la philosophie du logiciel libre (et la mienne) ces supports sont mis à disposition sous une licence libre (en l’occurrence Creative Commons Attribution – Partage dans les Mêmes Conditions 4.0 International comme le reste de ce site).

Ces supports feront l’objet d’une publication en ligne au fur et à mesure de leur état d’avancement. Voici donc celui sur GIMP : initiation GIMP à la retouche photo. Vous pouvez également consulter le support sur la mise en page avec Scribus (qui a fait l’objet de substantielles améliorations récemment). Vous pouvez vous abonner à la lettre d’informations pour être tenu au courant des évolutions (dans la barre de gauche du site).

N’hésitez pas à commenter (sur la page de contact) et à revenir le consulter ultérieurement, il ne peut que se bonifier avec le temps, des évolutions sont ajoutées régulièrement, notamment après une formation, afin de mieux adapter le discours.

Couverture GIMP débuter en retouche photo et graphisme libreEn complément vous pouvez aussi vous procurer mon livre GIMP 2.8 débuter en retouche photo et graphisme libre dans une librairie.

Voici la table des matières actuelle :

Cet article Initiation GIMP : la retouche photo est publié sous licence CC By-SA 4.0 par Dimitri Robert sur Formation logiciel libre - Reprenez le contrôle de votre informatique !.

Gravatar de Dimitri Robert
Original post of Dimitri Robert.Votez pour ce billet sur Planet Libre.

Articles similaires

genma : Ubuntu et trois écrans ? Oui c'est possible

Un petit billet rapide qui fait suite à un message sur le forum d'Ubuntu-fr.org (Voir à ce sujet mon billet assez ancien mais toujours d'actualité Les forums d'Ubuntu-fr).

Il est tout à fait possible de faire du tri-écran avec un PC.Le tri-écran, c'est comme le bi-écran, mais avec trois écran.

J'ai en prêt via mon entreprise un PC portable de la gamme Lenovo, modèle Thinkpad. Ce PC, qui tourne très bien sous Ubuntu (voir à ce sujet mon billet Ubuntu sur un disque externe ? Oui c'est possible). Ce PC possède un écran (c'est un portable), et deux sorties écran : une sortie VGA (analogique) et une sortie Mini-display port (numérique, sur laquelle on peut mettre un convertisseur vers une sortie HDMI ou DVI). Le tout utilisant la carte graphique Intel HD intégrée au processeur (un Intel Core i5).

Si l'on branche un écran sur la sortie VGA et un autre écrans sur la sortie mini-display port, on a alors 3 écrans (on compte l'écran du PC portable). On peut gérer les résolutions et disposition de l'espace/du bureau de chacun indépendamment via le paramétrage écran inclus dans Ubuntu (dire que tel écran est au-dessus et tel autre sur la droite). On a alors un bureau étendu, ce qui est bien pratique pour avoir plusieurs fenêtres ouvertes (agrégateur RSS, navigateur, autre) en même temps, réparties sur les différents écrans. On gagne en confort et en productivité.

Gravatar de genma
Original post of genma.Votez pour ce billet sur Planet Libre.

Thuban : Par quoi remplacer xscreensaver?

Nous avons récemment eu la mauvaise surprise de recevoir un avertissement injustifié de xscreensaver. Sans parler du manque de respect que représente cette agression à l'utilisateur, la meilleure solution reste la suppression pure et simple de xscreensaver.

Plusieurs personnes vous rappeleront qu'il n'est plus nécessaire "d'économiser les écrans" récents. Mais on peut souhaiter vouloir faire défiler les photos de famille ou simplement bloquer l'écran après quelques minutes d'inactivité pour éviter des manipulations indésirées pendant la pause café.

Mais par quoi le remplacer?

Nous allons utiliser des petits outils KISS pour ça. Je vous invite à installer le paquet xautolock, qu'on lancera en début de session. Il se chargera de lancer une application après un certain temps d'inactivité. Il s'utilise ainsi pour lancer une commande après 5 minutes d'inactivité :
xautolock -time 5 -locker commande_à_lancer

Voyons quelques cas :

** Je veux seulement bloquer l'écran après 10 minutes d'inactivité : vous pouvez utiliser le petit outil slock disponible dans le paquet suckless-tools. Il se contente de mettre l'écran en noir. Tapez votre mot de passe et valider pour débloquer
xautolock -time 10 -locker slock
** Je veux voir un diaporama après 5 minutes d'inactivité (méthode KISS) : Installez le paquet qiv, qui se chargera du diaporama. Au début de la session, lancez la commande suivante :
xautolock -time 5 -locker "qiv -u -s -r -d 3 -i -c -f /home/moi/Images"
Remplacez /home/moi/Images vers le dossier contenant vos photos.
(-u va chercher dans les sous-dossiers, -s lance le diaporama, -r le rend aléatoire, -d 3 change les photos toutes les 3 secondes, -i cache la barre d'information, -c lit les images en boucle, -f met en plein écran)
** Je veux voir un diaporama après 5 minutes d'inactivité (méthode bidouille) : Vous pouvez utilisez ce que vous préférez pour le diaporama. Je vais ici créer un script qui s'en charge avec cyclope, la visionneuse d'image disponible sous handylinux.
On enregistre le script suivant dans /home/utilisateur/scripts/diaporama. Ce script a besoin du paquet xdotool
#!/bin/sh # dépendance : xdotool # répertoire contenant les photos PHOTOS=/home/xavier/Images cyclope "$PHOTOS" & sleep 1 xdotool search --class cyclope key --window %@ f p exit 0
On n'oublie pas de rendre le script éxécutable :
chmod +x /home/utilisateur/scripts/diaporama

Enfin, en début de session, on lance la commande suivante :
xautolock -time 10 -locker /home/utilisateur/Scripts/diaporama
Oui, cyclope n'est certainement pas le plus adapté pour cette tâche, mais vous aurez compris le principe

** À ce stade, toutes les folies sont permises. Par exemple, on peut lancer un film tiens :
xautolock -time 10 -locker "vlc -f /home/moi/Vidéos/film.mp4

Je vous laisse imaginer les choses les plus folles.

Dernière astuce avant de vous laisser : vous pouvez conserver xscreensaver sans le démarrer en début de session. PAr contre, il vous est possible de lancer votre écran de veille favori en allant directement le chercher dans /usr/lib/xscreensaver. Par exemple en lançant :
/usr/lib/xscreensaver/xmatrix

On peut même les mettre en fond d'écran :
/usr/lib/xscreensaver/glmatrix -root
— (permalink)

Gravatar de Thuban
Original post of Thuban.Votez pour ce billet sur Planet Libre.

Marco : Django: enregistrer une entité en utilisant plusieurs pages

Le but de cet article est de vous présenter la méthode que j’ai utilisée pour enregistrer une entité en plusieurs étapes, donc en utilisant plusieurs pages. La sauvegarde en base de données s’effectue seulement lors de la dernière étape.

Contexte technique: Django 1.9.5, Python 3.5.1

Cas concret: enregistrement d’un profil utilisateur sur plusieurs pages. Ici nous nous limiterons à deux pages mais il est très facile de l’étendre à n pages. Donc sur la page 1 nous permettrons à l’utilisateur de saisir certains champs. Ensuite sur la page 2 il renseignera les champs restants et l’enregistrement en base de la totalité des éléments (page 1 + page 2) s’effectuera.

Installation de l’application django
  • Initialisation de l’application
pip install django django-countries django-admin start project user_profile_several_pages cd user_profile_several_pages # Notre application de création de profil utilisateur s'appelle ici website ./manage.py startapp website # Création du super utilisateur pour la partie admin ./manage.py createsuperuser
  • Éditer le fichier user_profile_several_pages/settings.py et ajouter l’application:
INSTALLED_APPS = [ ... 'website', ]
  • Éditer le fichier user_profile_several_pages/urls.py et ajouter les urls:
from django.conf.urls import include, url from django.contrib import admin urlpatterns = [     url(r'^admin/', admin.site.urls),     url(r'^', include('website.urls', namespace='website')), ]
  • Depuis la racine du projet Django, créer ensuite le répertoire des templates: website/templates/website
Le modèle (fichier website/models.py) from django.db import models from django.contrib.auth.models import User as DjangoUser from django_countries.fields import CountryField class UserProfile(models.Model): user = models.OneToOneField(DjangoUser, on_delete=models.CASCADE) sex = models.CharField( u"Sexe", max_length=1, choices=(('m', u'Masculin'), ('f', u'Féminin')) ) city = models.CharField(u"Ville", max_length=20) country = CountryField(verbose_name=u"Pays", default="FR") web_site = models.URLField(u"Site web", blank=True, null=True) age = models.PositiveSmallIntegerField(u"Age", null=True, blank=True) information = models.TextField(u"Autres informations", null=True, blank=True)     class Meta:         verbose_name = u"Profil utilisateur"         verbose_name_plural = u"Profils utilisateur"     def __str__(self):         return "%s %s" % (self.user.first_name, self.user.last_name)

Rien de bien compliqué dans ce modèle. On notera simplement la référence vers django.contrib.auth.models.User pour les éléments spécifiques au compte utilisateur « système » (first_name, last_name, email, password).

Les forms (fichier website/forms.py) from django import forms from django.utils.translation import ugettext, ugettext_lazy as _ from website.models import DjangoUser, UserProfile class DjangoUserForm(forms.ModelForm):     error_messages = {         'password_mismatch': _("The two password fields didn't match."),     }     first_name = forms.CharField(required=True, label=u'Nom')     last_name = forms.CharField(required=True, label=u'Prénom')     email = forms.EmailField(required=True, label=u'Mail')     password = forms.CharField(required=True, label=u'Password', widget=forms.PasswordInput)     password_conf = forms.CharField(required=True, label=u'Password (confirmation)', widget=forms.PasswordInput)     def clean_password_conf(self):         """         Cette méthode est exécutée automatiquement         lorsque form.is_valid() est invoquée dans la vue         """         password = self.cleaned_data.get('password')         password_conf = self.cleaned_data.get('password_conf')         if password and password_conf:             if password != password_conf:                 raise forms.ValidationError(                     self.error_messages['password_mismatch'],                     code='password_mismatch',                 )         return password_conf     class Meta:         model = DjangoUser         fields = ['first_name', 'last_name', 'email',] class UserProfileFormStep1(forms.ModelForm):     class Meta:         model = UserProfile         exclude = ['user', 'web_site', 'age', 'information'] class UserProfileFormStep2(forms.ModelForm):     class Meta:         model = UserProfile         fields = ['web_site', 'age', 'information']

On peut noter ici la présence de trois formulaires:

  • DjangoUserForm: va être utilisé pour afficher dans la page les champs qui nous intéressent pour la gestion du compte Django. A noter la présence de la méthode clean_password_conf, qui va etre automatiquement appelée lorsqu’on va appeler la méthode is_valid() sur le formulaire dans la méthode post de la vue. Ainsi cette méthode de validation commence par clean_ suivi du nom du champ à valider.
  • UserProfileFormStep1: formulaire pour la première page. On exclut donc les champs qui vont être affichés dans la seconde page.
  • UserProfileFormStep2: formulaire pour la seconde page. On inclut donc seulement les champs qui vont être affichés dans la seconde page.
La vue (fichier website/views.py)

On utilise ici une vue générique basique pour bénéficier d’un minimum de traitements automatiques du framework Django. J’hérite ici de la TemplateView qui est assez rudimentaire. Je n’ai pas utilisé de vue de plus « haut niveau » (type FormView) car j’avais besoin d’effectuer des traitements manuels pour coller à mes besoins.

from django.core.urlresolvers import reverse from django.db import transaction from django.views.generic.base import TemplateView from django.http import HttpResponseRedirect from django.shortcuts import render from django.contrib import messages from django.contrib.auth.models import User from website.forms import * class ProfileAdd(TemplateView):     template_name = 'website/profile_edit.html'     def get(self, request, step, **kwargs):         context = super(ProfileAdd, self).get_context_data(**kwargs)         if step == '1':             context['up_form'] = UserProfileFormStep1(prefix='user_profile')             context['user_form'] = DjangoUserForm(prefix='user')         elif step == '2':             context['up_form'] = UserProfileFormStep2()         else:             logger.error("Step number invalid: '%s'" % step)         context['step'] = step         return render(             request,             self.template_name,             context,         )     def post(self, request, step, **kwargs):         context = super(ProfileAdd, self).get_context_data(**kwargs)         context['step'] = step         if step == '1':             user_form = DjangoUserForm(request.POST, prefix='user')             up_form = UserProfileFormStep1(                 request.POST, prefix='user_profile'             )             context['user_form'] = user_form             context['up_form'] = up_form             if up_form.is_valid() and user_form.is_valid():                 user = User.objects.filter(email=user_form.cleaned_data['email'])                 if user.exists():                     user_form.add_error('email', u'Ce mail existe déjà.')                     return render(                         request,                         self.template_name,                         context,                     )                 request.session['user_form'] = user_form.cleaned_data                 request.session['up_form'] = up_form.cleaned_data                 return HttpResponseRedirect(                     reverse('website:profile_add', args=[2])  # step=2                 )             else:                 return render(                     request,                     self.template_name,                     context,                 )                          elif step == '2':             up_form2 = UserProfileFormStep2(                 request.POST             )             context['up_form'] = up_form2             if up_form2.is_valid():                 user_form = DjangoUserForm(                     request.session['user_form']                 )                 up_form1 = UserProfileFormStep1(request.session['up_form'])                 with transaction.atomic():                     user = user_form.save(commit=False)                     # Dans notre système le mail est aussi le nom d'utilisateur                     user.username = user_form.cleaned_data['email']                     # Le formulaire contient un mot de passe en clair                     unencrypter_pass = user.password                     # Donc on utilise set_password pour le chiffrer                     # Afin qu'il ne soit pas en clair dans la base de données                     user.set_password(unencrypter_pass)                     user.save()                     user_profile = up_form1.save(commit=False)                     user_profile.user = user                     user_profile.web_site = up_form2.cleaned_data['web_site']                     user_profile.age = up_form2.cleaned_data['age']                     user_profile.information = up_form2.cleaned_data['information']                     user_profile.save()                 return HttpResponseRedirect(                     reverse('website:user_profile_created')                 )         return render(             request,             self.template_name,             context,         ) La méthode get

Elle est appelée lorsqu’on accède à la première ou seconde page. Le paramètre step est passé en paramètre lorsqu’on appelle cette vue (voir plus loin la configuration des urls). Cette méthode effectue essentiellement deux choses:

  • Initialisation des forms à passer dans le template via le contexte.
  • Passer dans le contexte le paramètre step afin de savoir dans le template à quelle étape nous nous trouvons.
La méthode post

Elle est évidemment un peu plus compliquée et comme son nom l’indique récupère les données saisies dans la première page et dans la seconde page suite à l’envoi du formulaire.

  • Cas de la première page (step == 1)
    • On récupère les données de la requête et on les met dans les deux formulaires user_form et up_form. On les insère dans le contexte ce qui permettra de réafficher les données saisies en cas d’erreur.
    • On vérifie la validité des formulaires en faisant appel à la méthod is_valid() ce qui implique l’appel automatique des méthodes de validation du formulaire (comme clean_password_conf de DjangoUserForm).
    • On vérifie que l’email n’existe pas déjà.
    • Les données sont ensuite stockées en session pour pouvoir les récupérer lorsqu’on voudra enregistrer l’ensemble des données après l’envoi du formulaire correspondant à la page 2.
    • Si tout est bon, on appelle la vue mais avec le paramètre step=2.
  • Cas de la seconde page (step == 2)
    • On crée le formulaire en récupérant les données saisies dans la seconde page.
    • Si les données sont valides, on restaure les formulaires de la page 1, c’est à dire le formulaire utilisateur système (user_form) et le formulaire profile utilisateur partie 1 (up_form).
    • Ensuite on initie une transaction car on va sauvegarder en bases deux entités distinctes: celle de l’utilisateur système (django.contrib.auth.models.User) et celle du profile d’utilisateur (website.models.UserProfile). Ainsi si l’un des deux enregistrements échoue, on ne souhaite pas que l’autre soit sauvegardé en base.
    • Ensuite on récupère une instance de User suite à sa sauvegarde. Cependant on n’effectue pas de commit immédiatement afin de pouvoir chiffrer le mot de passe saisi.
    • En ce qui concerne le UserProfile on utilise la même technique d’enregistrement différé pour pouvoir affecter à l’instance UserProfile une instance User créée au point précédent.
Les urls (fichier website/urls.py) from django.conf.urls import url from django.views.generic import TemplateView from website import views urlpatterns = [ url( r'^$', TemplateView.as_view( template_name='website/index.html' ), name="home" ),     url(         r'^profile_add/(?P\\d+)/$',         views.ProfileAdd.as_view(), name="profile_add"     ), url( r'^user_profile_created/$', TemplateView.as_view( template_name='website/user_profile_created.html' ), name="user_profile_created" ), ]

On a trois urls qui correspondent aux trois vues qui nous redirigent vers trois templates:

  • Page d’accueil
  • Page de saisie des informations du profil
  • Page de confirmation de la création du profil
Les templates

website/templates/index.html

Page d'accueil

Créer un nouveau profil utilisateur

website/templates/profile_edit.html

Il est commun pour la saisie des données en page 1 et en page 2.

{% csrf_token %}   {% if up_form.errors or user_form.errors %}     

Le formulaire contient des erreurs :

  {% endif %} {% if step == "1" %} {{ user_form.as_table }} {{ up_form.as_table }} {% endif %} {% if step == "2" %} {{ up_form.as_table }} {% endif %} {% if step == "1" %}Suivant{% elif step == "2" %}Enregistrer{% endif %}>

A noter qu’à la limite on aurait pu se passer du test sur la variable step pour l’affichage des formulaires. A l’étape 2 user_form n’est pas instancié donc il n’aurait pas été affiché. Mais une des règles de Python est bien « explicite est mieux qu’implicite » non ?

website/templates/user_profile_created.html

Création utilisateur

L'utilisateur a bien été créé

Création du module d’administration (fichier website/admin.py)

Il est simplement utilisé ici pour vérifier que la création du profil utilisateur s’est effectuée correctement.

from django.contrib import admin from website.models import UserProfile admin.site.register(UserProfile) Lancement de l’application ./manage.py makemigrations ./manage.py migrate ./manage.py runserver
  • Dans le navigateur accéder à la page d’accueil (par défaut: localhost:8000).
  • Vérifier dans la partie admin que l’utilisateur a bien été crée (par défaut: localhost:8000/admin).
Remarques sur cet article
  • Dans un contexte réel d’application, on aurait fait une vue pour éditer un profil existant. Mais l’article est déjà long et ce n’est pas son but.
  • Je n’ai pas trop détaillé les commandes Django. Je pars du principe que si on s’intéresse à ce genre d’article c’est qu’on sait utiliser un minimum Django.

Voilà j’espère que cet article a pu vous être utile. Ceci dit en aucun cas je ne prétends que c’est la meilleur façon de faire, que c’est la solution la plus rapide. D’ailleurs si vous avez des remarques je suis preneur, car parfois quand on code et qu’on souhaite à tout prix résoudre un problème, on a du mal à prendre du recul.

Gravatar de Marco
Original post of Marco.Votez pour ce billet sur Planet Libre.

Articles similaires

Thuban : Blogotext mis à jour

Je suis totalement passé à côté de la nouvelle version de blogotext.
Alors que tout le monde parle de PluXML en version 5.5, je passe ce blog sous blogotext en version 3.2.8 sortie en mars 2016. Toutes les informations pour mettre à jour sont disponible ici.

J'adore blogotext. Pour avoir testé les 2, il est nettement mieux que PluXML. Oui, je le dis carrément, mais je justifie :

** Pluxml est vendu comme génial car sans bases de données. Ouais, ok, ça simplifie les choses à côté d'un wordpress et son gros MySQL. MAIS, pour un blog, qui va contenir des commentaires, une base de données est tout à fait adaptée pour éviter une surcharge du serveur. Car sinon, c'est php qui se charge d'aller parser un tas de fichiers XML. Alors même si c'est bien fait sous pluxml, je rappelle que blogotext utilise la base SQLite. En gros, vous n'avez rien à faire pour l'installer. SQlite est génial pour ça, c'est blogotext qui se charge de l'installer, et la sauvegarde de la base tient en un seul fichier.
De toutes façons, blogotext intègre tout ce qu'il faut pour sauvegarder un site sous forme de .zip.
** Dans blogotext, tout est intégré pour faire une veille efficace : flux rss, partage de liens à la shaarli, hébergement de fichiers, prise de note. Et franchement, même si on n'utilise peut-être pas tout tous les jours, ça dépanne. Et dans une archive de 482ko, pourquoi s'en priver?
** La gestion des commentaires est à mon avis nettement plus simple.
** Il s'agit d'un ensemble de petites choses bien pensées, peaufinées comme il faut. Bref, Timo fait vraiment du bon boulot!

Blogotext, je t'aime! ❤
— (permalink)

Gravatar de Thuban
Original post of Thuban.Votez pour ce billet sur Planet Libre.

genma : Yunohost - Comment installer Spip

Prérequis :
- Avoir YunoHost d'installer et savoir utiliser "la moulinette"
- Connaître SPIP (savoir l'installer)
- Savoir taper quelques commande shell

Spip n'est pas une application officielle. Comme indiquée dans la documentation Ces applications n'ont pas été validées par l'équipe YunoHost et ne sont pas officiellement prises en charge. Vous pouvez les tester et les utiliser à vos risques et périls.

Ce qui signifie qu'il faudra veiller à ce que ces applications soient bien à jour (pour éviter les failles de sécurité potentielles).

Installation

Pour installer, SPIP, conformément à la documentation de YunoHost, on passera par le dépôt git :
https://github.com/magikcypress/spip_ynh
et la commande
yunohost app install https://github.com//

Ce dépôt n'était pas à jour, j'ai interagi avec Cyp pour qu'il le soit.

Une fois SPIP installé, on y aura donc accès via mondomaine.tld/spip/ sur le même principe que pour les autres applications YunoHost. Le script aura crée le répertoire /var/www/spip/ avec les droits qui vont bien (appartient à l'utilisateur www-data)

Rq : Cela reste SPIP et il fonctionnera comme n'importe quel SPIP. Il faudra finaliser l'installation etc. via son navigateur avec l'url du type https://mondomaine.tld/spip/ecrire/

MySQL

Le script d'installation de SPIP crée automatiquement une base de données SPIP dans Mysql. J'ai choisi, via phpmyadmin, de créer un utilisateur dédié pour cette base SPIP (avec les bons droits). Lors de la configuration de l'installation de SPIP, on choisit donc "localhost" pour le serveur de la base de données, "SPIP" pour la base de données, l'utilisateur et le mot de passe crée spécifiquement et éventuellement un prefixe si on souhaite héberger plusieurs instances SPIP dans la même base de données.

Migration d'un SPIP existant

Rq : cette partie est indépendante du fait que ce soit SPIP est peut être appliquée à d'autres "logiciels".

La version de SPIP installée est la version par défaut. Il faut donc transférer les fichiers images, squelettes etc. si on veut migrer un SPIP existant.

Rq : on ne peut pas se connecter en ssh à son serveur avec les utilisateurs YunoHost. Seul l'utilisateur admin peut se connecter en ssh aux serveur YunoHost (ce que j'ai désactivé par sécurité), j'ai donc créer un utilisateur dédié pour ssh, qu'on appellera ryoga pour la suite

Pour ce faire, je me connecte avec "ryoga" via sftp (FTP + SSH via Filezilla) et je dépose les fichiers dans /home/ryoga. On peut également le faire par "scp", la commande de copie via ssh.

Ensuite on doit changer le propriétaire de ces fichiers et les déplacer au bon endroit.

ryoga@yunohost$chown -R www-data:www-data ./css/* #par exemple pour les css
# On déplace ensuite les fichiers dans le répertoire de spip.
ryoga@yunohost$sudo mv ./css /var/www/spip/

Une fois que j'ai les fichiers, je peux réimporter un dump de base de données (que j'ai déposé dans /var/www/spip/tmp/dump selon les quelques commandes données ci dessus).

Gravatar de genma
Original post of genma.Votez pour ce billet sur Planet Libre.

Journal du hacker : Liens intéressants Journal du hacker semaine #13

Pour la 13ème semaine de 2016, voici 5 liens intéressants que vous avez peut-être ratés, relayés par le Journal du hacker, votre source d’informations pour le Logiciel Libre francophone !

Pour ne plus rater aucun article de la communauté francophone, voici :

De plus le site web du Journal du hacker est « adaptatif (responsive) ». N’hésitez pas à le consulter depuis votre smartphone ou votre tablette !

Le Journal du hacker fonctionne de manière collaborative, grâce à la participation de ses membres. Rejoignez-nous pour proposer vos contenus à partager avec la communauté du Logiciel Libre francophone et faire connaître vos projets !

Et vous ? Qu’avez-vous pensé de ces articles ? N’hésitez pas à réagir directement dans les commentaires de l’article sur le Journal du hacker ou bien dans les commentaires de ce billet :)

Gravatar de Journal du hacker
Original post of Journal du hacker.Votez pour ce billet sur Planet Libre.

Articles similaires

Carl Chenet : Nouveau forum pour l’emploi dans la communauté du Logiciel Libre et opensource

Suivez-moi aussi sur Diaspora*diaspora-banner ou Twitter 

Un rapide message pour annoncer le lancement d’un forum dédié à l’emploi dans la communauté du Logiciel Libre et opensource :

Le forum de LinuxJobs.fr : https://forum.linuxjobs.fr

forum-small

Devant le succès de LinuxJobs.fr , le site d’emploi de la communauté du Logiciel Libre et opensource, et la communauté d’utilisateurs qui s’est constitué autour, il était dommage de s’arrêter à l’échange d’offres d’emplois. C’est pourquoi LinuxJobs.fr créé un lieu d’échange et de discussions pour sa communauté, avec des catégories comme les rémunérations, le droit du travail, les questions des jeunes diplômés, des les étudiants ou l’entrepreunariat.

banieres linux vert

Ce nouveau forum est fièrement propulsé par le nouveau moteur de forums Flarum, un logiciel libre sous licence MIT.

Au plaisir de discuter bientôt avec vous sur le forum de LinuxJobs.fr.

Quelques liens pour finir :


Gravatar de Carl Chenet
Original post of Carl Chenet.Votez pour ce billet sur Planet Libre.

Articles similaires

Planet Libre : Brèves du Planet Libre - lundi 04, avril 2016

La surveillance de masse fait taire les opinions minoritaires sur internet - Slate.fr pistage institution Web

antistress : "Une nouvelle étude montre que les révélations sur les écoutes poussent un peu plus les gens à s’autocensurer en ligne."
(via le Standblog)

Pour Amnesty International le chiffrement doit être un droit fondamental - Numerama pistage chiffrement institution droit

antistress : "Amnesty International prie les États et les entreprises de reconnaître le chiffrement comme un droit fondamental de tout citoyen, et de garantir le niveau optimum de protection des communications. Faudra-t-il un traité ?"

Gravatar de Planet Libre
Original post of Planet Libre.Votez pour ce billet sur Planet Libre.

Articles similaires

Pages