PROJET AUTOBLOG ~ Streisand Effect


sciunto

Site original : sciunto

⇐ retour index

Don du mois : Joey Hess

Saturday 11 July 2015 à 00:00

Ce post s'inscrit dans la série des dons pour vous donner envie de contribuer même très modestement à des logiciels libres. Les petites pierres font les grands édifices.

Mes précédents dons étaient destinés à des projets. Ce mois-ci, j'ai décidé de faire à don à Joey Hess, un développeur de logiciel libre dont voici la liste. J'utilise trois d'entre-eux et pas des moindres :

Ces logiciels sont d'une très grande qualité, pas destiné à un grand public mais ils permettent de faire des choses uniques et ça me rend bien service. Il est aussi amusant de lire sa page sur ses goûts en matière de langages de programmation.

Joey propose sur son site plusieurs moyens pour les dons et j'ai choisi de lui offrir un album sur sa liste amazon, une manière très intéressante de dire merci je trouve.

Python : callback à paramètre unique et passage d'options

Sunday 14 June 2015 à 00:00

Le besoin m'est venu de la bibliothèque pims permettant de charger séquentiellement des images. Typiquement, on fait

frames = pims.ImageSequence('../sample_data/bulk_water/*.png')

Mais si on veut appliquer une fonction appliquant un pré-traitement, on peut ajouter une callback


from skimage.color import rgb2grey 
def preprocess(im):
    """
    callback prenant une image im
    """
    return rgb2grey(im)

frames = pims.ImageSequence('../sample_data/bulk_water/*.png', process_func=preprocess)

Ce qui a pour effet que les images soient en niveau de gris plutôt qu'en RGB. Maintenant, imaginons que ce soit un seuil que je souhaite appliquer

def preprocess(im):
    threshold = 0.8
    grey_im = rgb2grey(im)
    # selectionne les indices satisfaisant la condition
    idx = grey_im < grey_im.max() * threshold
    # applique une transformation
    grey_im[idx] = 0
    return grey_im

L'exemple fonctionne toujours, mais on a un paramètre threshold définit dans la fonction, ce qui n'est pas très flexible si on veut placer cette fonction dans une petite bibliothèque maison. Je préfèrerais la signature suivante :

def preprocess(im, threshold=0.8):

Je vais donc définir dans ma bibliothèque la fonction suivante :

# Je definie une fonction qui prend une fonction et des arguments optionels
def all_args(func, **params):
    # Je definie une fonction qui prend une image
    def wrapper(im):
        # Je retourne ma fonction func avec les bons arguments
        return func(im, **params)
    # je retourne une fonction
    return wrapper

# Je definie ma fonction comme je le souhaite
def preprocess(im, threshold=0.8):
    grey_im = rgb2grey(im)
    idx = grey_im < grey_im.max() * threshold
    grey_im[idx] = 0
    return grey_im

Ainsi je peux faire dans mon code principal

from mabiblio import all_args, preprocess

mythreshold = .36

# je crée une fonction new_preprocess à partir de preprocess, auquel je cache
# le parametre threshold
new_preprocess = all_args(preprocess, threshold=mythreshold)

frames = pims.ImageSequence('../sample_data/bulk_water/*.png', process_func=new_preprocess)

Ici, je peux donc utiliser la fonction preprocess, de manière compacte, un peu partout dans mes codes, sans me soucier de son détail.

Je crois que je dois cette astuce à Thomas Caswell que je remercie.

Liens utiles de sametmax :

Fabriquer et partager

Monday 1 June 2015 à 00:00

Résumé : faire en sorte que le monde matériel soit aussi agréable que le monde du logiciel libre

Logiciel Libre

Depuis près de 10 ans, ma culture est fortement influencée par le Logiciel Libre. Il s'en est suivi l'auto-hébergement. L'apport est immense :

Mais tout ceci concerne les biens non-rivaux. Qu'en est-il des biens rivaux (ie matériels) ?

Le monde matériel

Je suis de plus en plus déçu par les solutions toutes faites, que ce soit dans le cadre personnel comme professionnel. Il y a deux stades.

Stade 1 : quand ça marche

Quand ca fonctionne :

Stade 2 : ça ne marche plus

L'appareil tombe en panne :

Approche de solutions

Cette approche veut se calquer sur celle que m'apporte le logiciel Libre au sens où on y retrouve les mêmes avantages : indépendance, connaissance, évolutivité, pérennité, prix. Le point sureté est cependant moins évident.

L'approche que je me propose est donc de cuisiner plutôt que d'acheter le plat préparé. Ca demande d'apprendre la cuisine, de passer un peu de temps, mais la première satisfaction est la satisfaction personnelle et intellectuel d'avoir réussi et appris. Attention, il n'est pas question de partir de zéro mettant en place une rizière dans le jardin.

Il s'agit donc d'apporter une réflexion critique sur les produits que l'on nous vend. Il y a deux niveaux de réflexion à distinguer :

Niveau 1. Parmi un ensemble de solutions clés en main, laquelle m'offrira le moins de désavantages compte tenu des stades 1 et 2 ci-dessus :

Niveau 2. Balance prix fait-main plus temps / tout-fait moins apprentissage.

En cherchant une échelle plus atomique de l'achat, c'est généralement maximiser un niveau de satisfaction du niveau 1. C'est adopter l'esprit "hacker" au sens noble du terme. C'est se donner une puissance sur les choses en agissant plutôt qu'en étant passif et donc tributaire des aléas. La valeur de l'échelle est donnée par le niveau 2.

Exemple d'une station météo :

L'échelle 2 maximise mon niveau 1 et 2.

Quelques points de départ pour réfléchir

J'apprécie beaucoup la vision de David Manise, et en voici une tranche, que je renommerai bien en "Les 10 trucs les plus importants pour vivre...", s'il me le permet. Je n'aime pas ce terme survie (et lui non plus, d'après ce que je sais).

Les points 8 à 10 nous intéressent ici :

  1. Ton matériel doit être simple et fiable. Plus ça ressemble à une massue, mieux c’est. Plus ça ressemble à une calculette, moins ça marchera. Une lame fixe ressemble plus à une massue qu’un couteau suisse. Un poncho est plus « massue » qu’une veste. Etc. Moins de pièces mobiles, plus de qualité de finition/fabrication.
  2. Toujours tricher, toujours gagner. Sors du cadre. Ne t’impose pas de contraintes artificielles. Si c’est une mauvaise idée qui fonctionne, c’est que c’est une bonne idée. Ne laisse personne t’enfermer dans une prison mentale. Reste libre, critique, et humble.
  3. On a toujours avantage à coopérer. Même égoïstement, c’est généralement plus payant de coopérer avec les gens qu’on rencontre. Ne fais pas confiance aveuglément. Ne sois pas non plus paranoïaque. Assainis en permanence ton réseau. Tisse du lien avec des gens bien. Evite et oublie les autres. Tout simplement.

Plus particulièrement, pour le point 8, je cite David Manise sur l'apport d'une massue par rapport à un couteau suisse :

Si les massues de nos ancêtres sont restées à la mode pendant des millions d’années (pour finalement être célébrées dans le cadre d’un étrange culte semi-religieux que les États-Uniens appellent « base-ball »), ça n’est pas pour rien. La massue est l’archétype de l’outil de survie idéal : simple, fiable, d’une efficacité brutale, et ne sollicitant ni notre intelligence, ni notre motricité fine. Lorsque vous avez un choix à faire entre deux pièces d’équipement, choisissez donc, de façon réaliste, celle qui a le plus de points communs avec une bonne vieille massue... Le plus simple, le plus efficace, le plus facile à utiliser (pour vous), le plus robuste. Les pièces d’équipement de type « massue », loin d’être un choix démontrant un manque d’intelligence, sont une approche réaliste. Elles sont par ailleurs d’autant plus intéressantes qu’elles nous permettent un éventail beaucoup plus large d’utilisations « originales », qui diffèrent parfois grandement de leurs applications d’origine. À titre d’exemple, je dirais qu’on peut très bien utiliser un bandana pour égoutter des pâtes, mais qu’une passoire fait une bretelle de sac à dos plutôt médiocre. De même, un simple bâton de marche peut servir de bras de levier, de grattoir, de point d’appui pour un abri, de béquille, de perche pour faire tomber les pommes ou pour écarter les ronces (et accéder à cette belle grosse mûre bien juteuse sans se piquer), voire de bois de chauffage (vécu !).

Ca peut parraitre elliptique, ce paragraphe est là juste pour essemer.

Ouverture de mes notes

La conséquence est l'ouverture de mes notes. Je possède des wiki privés et je vais en ouvrir une partie du contenu.

Les objectifs sont les suivants :

Le site est ici : http://share.sciunto.org et j'ai choisi l'anglais afin de partager avec le plus grand nombre. Il m'arrivera, comme d'habitude, de déposer une petite note sur ce blog ; l'un n'exclue pas l'autre.

Don du mois : grammalecte

Sunday 3 May 2015 à 00:00

Ce post s'inscrit dans la série des dons pour vous donner envie de contribuer même très modestement à des logiciels libres. Les petites pierres font les grands édifices (ex de pratiques similaires : 1, 2).

Ce mois-ci, j'ai choisi de donner à grammalecte, une campagne de financement pour un correcteur grammatical. Le montant de ce don est de 5€. Les raisons de ce soutien :

Pour donner à grammalecte.

Don du mois : GnuPG

Monday 20 April 2015 à 00:00

Ce post s'inscrit dans la série des dons pour vous donner envie de contribuer même très modestement à des logiciels libres. Les petites pierres font les grands édifices.

Ce mois-ci, j'ai choisi de donner à GnuPG, l'implémentation libre de PGP qui permet de chiffrer et signer ses courriels. Le montant de ce don est de 5€. Les raisons de ce soutien :

A noter que dans le même esprit, j'ajoute à ma liste enigmail qui rend les choses faciles. Peut être pour le mois prochain.

Pour donner à GnuPG.