PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

Thuban : Un GUI en python : TP 2, des dialogues

mercredi 18 janvier 2017 à 16:16

Nous sommes aujourd'hui réunis suite à un terrible constat : notre visionneuse tkv craint un max.
C'est pourquoi nous allons ajouter une toute petite option nous permettant de choisir l'image que l'on souhaite visualiser sur notre ordinateur. Cela nous permettra par la même occasion de nous débarasser de certains morceaux qui ne sont plus utiles.

Profitons des dialogues déjà prêts dans la bibliothèque de tkinter en important celle qui nous intéresse :

from tkinter import filedialog

Nous pouvons à la place du téléchargement de l'image appeler une fenêtre de dialogue pour demander l'image à ouvrir :

# Ouverture de l'image
img_path = filedialog.askopenfilename(\\
        initialdir=(os.path.expanduser("~")),\\
        title="Image à ouvrir",\\
        parent=w)

Notez ici plusieurs options :

Cela ne sufit pas, il faudrait proposer seulement les fichiers qui sont des images. On va donc indiquer les motifs qui nous intéressent (pattern). En gros, ce sont juste les extensions :

# Ouverture de l'image
img_path = filedialog.askopenfilename(\\
        initialdir=(os.path.expanduser("~")),\\
        filetypes=[('Images', ('.png', '.PNG', '.jpg', '.JPG', '.gif', '.GIF')), ('Tout', '.*')],\\
        title="Image à ouvrir",\\
        parent=w)

On ajoute quand même un petit test pour vérifier que on a bien sélectionné un fichier valide. On utilise la bibliothque "mimetypes" qui est livrée par défaut avec python, et on regarde si le mot "image" apparait dans le type du fichier.
Pour afficher l'erreur, on utilise une fenêtre de dialogue livré avec tkinter après avoir importé la partie qui nous intéresse :

mimtyp = mimetypes.guess_type(img_path)[0] # i.e 'image/jpeg'
if not mimtyp or "image" not in mimtyp :
    # Il n'y a pas le mot "image" dans le mimetype
    from tkinter import messagebox
    messagebox.showerror("Fichier invalide", "Le fichier demandé n'est pas une image.")

Et voilà !

Remarquez qu'il existe un tas de fenêtres de dialogue déjà toutes prêtes pour afficher des avertissements (showwarning) ou des informations (showinfo) ou de poser une simple question (askquestion). Regardez par ici pour plus de détails : http://effbot.org/tkinterbook/tkinter-standard-dialogs.htm.

Je vais rajouter quelques lignes pour afficher une image si elle est passée en argument (par exemple en faisant tkv /home/bibi/image.jpg) :


# Ouverture de l'image
if len(sys.argv) == 2:
    # On a une image en agument
    img_path = sys.argv[1]
else:
    # On va chercher une image sur le disque
    img_path = filedialog.askopenfilename(\\
    # ...
    # ...

Il reste encore quelques points à améliorer, mais ça reste déjà plus pratique. ^^
Ça sera tout pour aujourd'hui.
La prochaine fois, nous ajouterons quelques boutons à notre visionneuse d'images :)

Voici le code final :


#!/usr/bin/env python
# -*- coding:Utf-8 -*- 

import os
import sys
import mimetypes
from tkinter import *
from tkinter import filedialog
from PIL import Image, ImageTk


# Notre fenêtre principale
w = Tk()
w.title("tkv : visionneuse d'images") # Un titre
w.configure(background='#000000')     # Fond noir

# Un conteneur dans la fenêtre
mainframe = Frame(w)
mainframe.pack(fill=BOTH,expand=True, padx=15, pady=15)

# Ouverture de l'image
img_path=""
if len(sys.argv) == 2:
    # On a une image en agument
    img_path = sys.argv[1]

if not os.path.isfile(img_path):
    # On va chercher une image sur le disque
    img_path = filedialog.askopenfilename(\\
            initialdir=(os.path.expanduser("~")),\\
            filetypes=[('Images', ('.png', '.PNG', '.jpg', '.JPG', '.gif', '.GIF')), ('Tout', '.*')],\\
            title="Image à ouvrir",\\
            parent=w)

# Est-ce un fichier valide ?
mimtyp = mimetypes.guess_type(img_path)[0] # i.e 'image/jpeg'
if not mimtyp or "image" not in mimtyp :
    # Il n'y a pas le mot "image" dans le mimetype
    from tkinter import messagebox
    messagebox.showerror("Fichier invalide", "Le fichier demandé n'est pas une image.")
    sys.exit(1)

# Ouverture de l'image
image = Image.open(img_path)
# Dimensions de l'écran : 
gap = 100 # marge par rapport aux bordes de l'écran
screen_width = w.winfo_screenwidth() - gap
screen_height = w.winfo_screenheight() - gap

if image.width > screen_width : 
    image = image.resize((screen_width, int(image.height * screen_width / image.width)), Image.ANTIALIAS)
if image.height > screen_height :   
    image = image.resize((int(image.width * screen_height / image.height), screen_height), Image.ANTIALIAS)

# Chargement de l'image en mémoire
img = ImageTk.PhotoImage(image)

# Insertion de l'image dans le conteneur.
img_widget = Label(mainframe, image=img)
img_widget.pack()

# Démarrage du programme
w.mainloop()

sys.exit(0)

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

nIQnutn : Gestionnaire de liens: adieu Shaarli, bonjour PluXml

mercredi 18 janvier 2017 à 13:31

Après avoir utilisé Shaarli comme gestionnaire de liens depuis 2015, j'ai décidé de passer à autre chose. En fait c'est Bronco qui m'a un peu inspiré.
C'est sympa de partager des liens, mais ça devient vite pénible et on ne sait pas par où commencer: réseaux sociaux, site web, shaarli,...
Je n'utilise que la gestion des liens avec Shaarli et je n'ai pas eu de problème avec. C'est juste que ça ne correspond plus à mes besoins et j'ai envie de me simplifier la vie.

Comme je suis plus attaché à ce blog, j'ai décidé de gérer les liens directement depuis PluXml.

Dans son article, Bronco explique l'abandon de Shaarli:

Dans un souci de simplicité et de compacité, je vais désormais réunir le maximum de choses sous PluXml, à commencer par mes liens...

Dans mon cas, c'est la même chose. J'ai envie de faire simple et gérer le maximum de chose possible depuis un seul outil. Comme je ne compte pas me séparer pour le moment de PluXml, c'est Shaarli qui prend le départ.
Dans le même esprit, blogotext permet de gérer des liens. Dommage que le projet soit abandonné.

Au final, je ne perds pas beaucoup au change, éventuellement l'absence de tags et des vignettes.
Je n'utilise évidemment pas toutes les fonctionnalités de Shaarli.

Le passage vers PluXml

Coté PluXml, j'ai décidé d'utiliser les commentaires d'un article comme gestionnaire de liens.
Il n'y a pas de gros changement à effectuer et ça peut fonctionner sans modifications de PluXml.

On commence par créer un article qui recensera tous les liens.
Ensuite, il suffit d'ajouter de nouveaux commentaires qui seront en fait nos liens.

Pour créer un lien, il nous faut:

On aura aussi un flux RSS pour ceux qui veulent suivre les derniers liens.

Création d'un template

Pour faciliter la lecture des liens j'ai créé un nouveau template d'article et ajouter un champ de recherche.
J'ai aussi modifié le formulaire pour ajouter un lien. En l'état, il faut faire correspondre les champs et c'est pas très pratique. C'est pas indispensable mais plus agréable à l'usage.

La discussion et les détails sur le forum PluXml: http://forum.pluxml.org/viewtopic.php?id=5751

Les éventuels problèmes

J'ai eu un petit doutes concernant les performances pour afficher un nombre important de liens. Pour le moment ça semble tenir le choc et j'ai décidé de limiter les liens en créant un article par année. De toute façon, je n'ai pas l'intention de faire une collection de liens, seulement partager ceux qui me semblent intéressant de partager.

Si je dois faire un retour en arrière, je sais que je pourrais facilement récupérer mes liens.
Ils sont faciles à récupérer et l'utilisation de fichiers XML me permettra d'extraire facilement les données si besoin.

Il est possible d'exporter ses liens depuis Shaarli vers un fichier Nestcape html bookmark pour ne rien perdre.
Depuis le menu: Tools > Export


2016 nIQnutn CC-BY

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

genma : A quand un Frama OS ?

mercredi 18 janvier 2017 à 09:00

Ce billet fait suite à mon premier billet De Framasoft à Yunohost, réapproprions nous le cloud.

Devant l'ampleur que prend le projet Degooglisons Internet avec Framasoft, devant tous les services qui sont mis en ligne, beaucoup sont les demandes d'avoir un système d'identifiant unique pour les différents services et surtout des remarques du type "à quand un Frama OS ?".

Je répondrais en mon nom, en fonction de ce que je sais et ces propos n'engage que moi. Pour le premier point, la demande revient à avoir un annuaire LDAP. Et ce n'est pas là la volonté de Framasoft. Framasoft propose et restera une vitrine de services alternatifs basés sur du logiciel libre, chaque service étant indépendant des autres. Si l'on souhaite un ensemble de services interconnectés et liés avec un même compte, il faudra se tourner vers un membre de C.H.A.T.O.N.S..

Pour le second point, à quand un Frama OS, je répondrais avec un simple mot. Jamais. Comme dit dans ma conférence De Framasoft à Yunohost, réapproprions nous le cloud, je cite : Ne réinventons pas ce qui existe : Un rapprochement et une collaboration Framasoft avec Yunohost se prépare peu à peu. Du temps salarié de Framasoft va être dédié à Yunohost. L'idée est que l'on ait tous les logiciels Framaxxx packagés pour Yunohost.

Réinventer un OS ne sert à rien. Yunohost eux-mêmes n'ont pas inventés un OS, ils utilisent une base Debian et ajoutent des fonctionnalités tels que l'automatisation de la configuration de nginx (entre autre), le développement des différents logiciels (partie utilisateur et administration) sont nécessaires car n'existant pas. Les applications elles sont simplement packagées, au plus près des applications natives... Un peu comme ce que fait Framasoft. Et du coup, les membres de la communauté Yunohost ont entrepris un travail de travail de référencement des applications Framasoft et de leurs existences (ou de ce qui serait équivalent) en tant que package pour Yunohost. Si ce n'est pas le cas, un appel à packagé (et maintenir le package) est lancé. On peut suivre tout ça ici.

Le rapprochement Framasoft avec Yunohost permettra, à terme, à chacun d'avoir les équivalents ou les applications Framasoft disponibles de façon simple. Il suffira pour cela d'installer Yunohost sur un Raspberry Pi autohébergé, sur une Brique Internet (qui rappelons le, utilise Yunohost comme Système d'exploitation), sur un PC ou encore sur un serveur dédié en ligne. Yunohost répondra alors aux deux besoins évoqués ci-dessus. En effet Yunohost intègre un système LDAP et on pourra donc (pour les applications le permettant), avoir un compte unique pour l'ensemble des applications. Et Yunohost répond également à la demande / remarque sur le Frama OS.

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

Philippe Scoffoni : Comment choisir entre Owncloud et Nextcloud ?

mardi 17 janvier 2017 à 22:24

Le fork, bifurcation, fourchette ou embranchement (choisissez le terme qui vous plaît le mieux) a eu lieu il y a maintenant plus de six mois. Un délai que l’on peut juger raisonnable pour pouvoir essayé de se prononcer sur un choix entre les deux branches divergentes de ce projet. Reste la question de savoir sur quel critère. Voici les éléments qui à ce jour me permettent de trancher.

Activité du projet

Ce critère est particulièrement important. Il est toujours bon à l’heure du choix d’un logiciel libre de se poser la question de l’activité visible du projet. Dans le cas qui nous occupe, il suffit de se rendre sur le site GitHub, et d’étudier les statistiques des deux projets.

Tout d’abord l’activité sur le dernier mois pour Owncloud

Et Nextcloud

Les chiffres parlent d’eux même, l’activité en terme de modifications intégrées (Merged Pull Requests) est bien plus importante chez Nextcloud que Owncloud : 37 contre 152 respectivement.

Si on compare l’activité depuis le mois de juin 2016 (la zone encadrée dans les images), date du fork en commençant par Owncloud

puis Nextcloud

Là on voit clairement où sont passé les nouvelles lignes de code. Évidement, je ne suis pas allé analyser le contenu des modifications apportées à Nextcloud et si il s’agit bien de « vraies modifications ». Un point pour Nextcloud.

Les évolutions

Je me suis penché sur les « changelog ». Ces longues listes en anglais qui détaillent les nouvelles fonctionnalités et les corrections apportées par une version. Je ne me lancerais pas dans un comparatif détaillé. Mon impression a cette heure est la suivante : les évolutions d’Owncloud semblent plus tournées vers les besoins des administrateurs systèmes confrontés à des problématiques de montés en charge et d’infrastructure pour « gros ». Côté Nextcloud, je vois beaucoup d’améliorations pour les utilisateurs. Un nouveau point pour Nextcloud.

En ce qui concerne la maintenance des versions, Nextcloud a sorti des versions correctives pour 3 versions le 16 janvier (il est noté 2016 sur la page du changelog, une coquille à mon avis) : les 9, 10 et 11.  Côté Owncloud, la dernière mise à jour date du 13 décembre avec des mises à jour pour les versions 9.1, 9.0. Nextcloud continue la politique de mise à jour d’Owncloud avec une version de plus semble-t-il.

Le modèle économique

Oserais-je dire copie conforme ? Il me semble que c’est le cas. Les offres visibles concernent essentiellement le support avec des tarifs qui démarrent à 1900 $ pour Nextcloud et 3600 $ pour Owncloud. Si on compare les offres à services équivalents, les tarifs se tiennent. Ce n’est pas sur ce critère que se fera la différence.

Au final ?

A ce jour, il n’y a pas trop de raison d’hésiter, Nextcloud s’impose, la communauté a visiblement suivi le créateur d’Owncloud dans son fork. Si vous avez des arguments en faveur d’Owncloud, ils sont les bienvenus 🙂


Réagir à cet article

Article original écrit par Philippe Scoffoni le 17/01/2017. | Lien direct vers cet article

Cette création est mise à disposition sous un contrat Creative Commons BY à l'exception des images qui l'illustrent (celles-ci demeurent placées sous leur mention légale d'origine).

.

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

Articles similaires

Tom : Mon bashrc

mardi 17 janvier 2017 à 22:05

Suite à l’article sur mon motd dynamique, je vous propose en téléchargement mon fichier bashrc personnalisé.

Explication de la personnalisation de Bash (source : Mistra.fr)

Pour personnaliser l’invite de commande bash nous allons devoir modifier quelques fichiers de configuration relatifs à bash.

 

Voici les fichiers qui configurent un bash à son lancement :

Concrètement nous allons travailler dans ~/.bashrc car nous ne souhaitons pas forcément modifier le prompt des autres utilisateurs. On aurait pu travailler dans /etc/bash.bashrc  pour modifier tous les prompts d’un coup.

[ -z "$PS1" ] && return

# source du bashrc système
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# source du fichier des alias personnalisé
if [ -f ~/.bash_aliases ]; then
        . ~/.bash_aliases
fi

# Meilleure completion du bash
# Installer le package bash-completion
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
        . /etc/bash_completion
fi

# n'affiche pas les commandes tapées en double dans l'historique.
export HISTCONTROL=ignoredups:ignorespace
# nombre de lignes dans l'historique, par session bash
export HISTSIZE=5000
# nombre de lignes conservées dans l'historique
export HISTFILESIZE=20000
# ajout de la date et de l'heure dans l'historique
export HISTTIMEFORMAT="%d/%m/%Y - %T : "
# supporte des terminaux redimensionnables (xterm et screen -r)
shopt -s checkwinsize

# lesspipe.sh is an input filter for the pager less as described in less's man page.
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# ajout de la colorisation syntaxique
if [ -x /usr/bin/dircolors ]; then
        test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
fi

# Mes alias BASHRC
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias ls='ls --color=auto'
alias dir='dir --color=auto'
alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
alias ll='ls -alFh --color=auto'
alias la='ls -A --color=auto'
alias l='ls -CF --color=auto'
alias miseajour='sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade && sudo  apt-get autoclean && sudo apt-get clean && sudo apt-get autoremove'
alias saidar='sudo saidar -c -d 1'
alias htop='sudo htop'
alias calendrier='var=$(cal); echo "${var/$(date +%-d)/$(echo -e "\\033[1;31m$(date +%-d)\\033[0m")}"'
alias du='du -h --max-depth=1'
alias dusort='du -x --block-size=1048576 | sort -nr'
alias df='df -h'
alias passgen='pwgen  -y -n  20 1'


# Mes exports
export EDITOR=vim
export VISUAL=vim

# Affichage du prompt
PS1="\\n\\$(if [[ \\$EUID == 0 ]]; then echo \\"\\[\\033[0;31m\\]\\"; else echo \\"\\[\\033[0;33m\\]\\"; fi)\\342\\226\\210\\342\\226\\210 [ \\u@\\h ] [ \\w ] [ \\t ]\\n\\[\\033[0m\\]\\342\\226\\210\\342\\226\\210 "

# lecture colorée de logs
# installer le package ccze
logview()
{
        ccze -A < $1 | less -R
}

# lecture colorée de logs en direct logview()
logtail()
{
        tail -f $1 | ccze
}

Téléchargez le fichier .bashrc

Voici à quoi ressemble mon interface, avec un putty en mode Solarized (source : https://github.com/altercation/solarized/tree/master/putty-colors-solarized)

Lorsque l’utilisateur est root le prompt devient rouge, c’est juste une manière de me repérer lorsque je travaille.

bashrc

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