Linux (fr)

  • Conférences autour du Libre à Metz (Dépêches LinuxFR)

    Le Graoulug - Groupe d'utilisateurs de GNU/Linux et de logiciels libres à Metz et ses environs - présente une journée de conférences autour du Libre le samedi 24 mai 2014.

    Voici le programme:

    • 09:30-10:30 : Leed: immersion dans un développement coopératif par Christophe HENRY, contributeur Leed.
    • 10:30-12:30 : 15 ans de direction d’entreprise dans le logiciel libre – anecdotes et réflexions par Arnaud LAPRÉVOTE, ex Directeur Général Mandriva.

    • 13:30-15:00 : Présentation FirefoxOS par Alexandre LISSY, FirefoxOS Software Engineer, Mozilla corp.

    • 15:00-16:15 : Le projet Debian par Lucas NUSSBAUM, Debian Project Leader.

    • 16:15-17:30 : Libérer Internet : Sexe, alcool et vie privée par Julien VAUBOURG et Sébastien JEAN, association LDN (Lorraine Data Network).

    Fly Conférences autour du Libre à Metz 2014

    L’accès est libre et gratuit, sous réserve de places disponibles.

    Lire les commentaires

  • Hermaia (Journaux LinuxFR)

    en bref : Hermaia est un projet (Python3/GPLv3) pour créer et consulter des listes de mots préalablement analysés du point de vue morphologique. Un exemple ici (si vous voyez n'importe quoi, pensez à utiliser l'unicode comme encodage).


    Hermaia est un (très modeste) projet (Python3/GPLv3) permettant

    • de créer une liste de mots accompagnés de leur analyse morphologique. Exactement comme si l'on associait le mot "aimerai" à "aimer"+"futur.3S".
    • de rechercher un mot et de l'analyser. Ex : est-ce que le mot "aimerai" existe ? Oui, il s'agit d' "aimer"+"futur.3S" .

    Un objet Hermaia lit et écrit ses informations dans une base de données MySQL pour la structure de laquelle j'ai dû demander de l'aide.
    Il est également possible de demander une image texte (un dump) de la base de données : on obtient alors un fichier texte qu'il est possible de modifier et de retransformer en base de données.

    La base de données est gérée par le module sqlite3 : si certains veulement m'aider à utiliser PostgreSQL, je suis preneur.

    La recherche se fait par l'intermédiaire d'un buffer qui garde en mémoire les demandes les plus fréquentes.

    J'ai essayé d'écrire un code aussi propre que possible : Pylint m'accorde une note de 10/10 au prix de quelques concessions (voir le fichier pylint.rc dans le dépôt).


    Comment utiliser Hermaia pour chercher un mot dans la base ?

    with sqlite3.connect("database.db") as database:
        with Hermaia(database = database) as h:
            h.search("aimerai")

    … ce qui renvoie une liste des occurrences du mot à chercher : dans le cas d' "aimerai", cette liste serait composée d'un seul dict contenant les informations nécessaires.


    Comment remplir la base de données ? L'exemple de Phokaia

    J'ai développé Hermaia pour servir d'extension au projet Logotheras qui crée des dictionnaires. Comme les articles d'un dictionnaire Logotheras peuvent contenir l'ensemble des formes possibles d'un mot (project inflectiones) il suffit de récupérer le contenu du tableau généré et de l'injecter dans la base de données.
    Travaillant principalement sur une ébauche de dictionnaire grec ancien->français j'ai donc récupéré l'ensemble des formes calculées. Le résultat se trouve . Le résultat me paraît encourageant.


    et la suite ?

    Je cherche des personnes susceptibles de m'aider à passer de MySQL à PostgreSQL mais aussi des profils plus orientés "lettres" et désireux d'utiliser Hermaia pour leurs projets personnels, pour d'autres langues… Faites-moi signe !

    Lire les commentaires

  • journal bookmark : vers un fork d'OpenSSL ? (Journaux LinuxFR)

    Bonjour Nal,

    je t'écris pour te faire part d'un possible fork d'OpenSSL par les développeurs d'OpenBSD qui ont démarré depuis quelques jours un nettoyage complet.

    Entre autres :

    • suppression des fonctionnalités heartbeat qui ont conduit au bug de la semaine dernière;
    • suppression de beaucoup de code cryptographique en trop;
    • suppression de wrappers autour de fonctions standard, en particulier pour malloc qui entravait des techniques de mitigation d'exploit

    et autres nettoyages divers (cf premier lien), ce qui vu de loin paraît assez impressionnant en juste quelque jours.

    Il ne reste plus qu'à attendre pour voir ce qu'il adviendra, mais en tous cas ce qui est sûr c'est que le code d'OpenSSL va être passé à la loupe, et peut-être que finalement le bug de la semaine dernière aura de bonnes conséquences à long terme.

    NdM: correction du nom de la fonctionnalité TLS

    Lire les commentaires

  • Modèle économique dans les jeux libres (Journaux LinuxFR)

    Bonjour à tous,

    Ce week-end, j'ai fait une petite virée à Lyon pour tenir un stand de Jeux Libres aux JDLL 2014.
    Le stand Jeux Libres proposait de découvrir 0AD et Battle of Wesnoth. Geeky Goblin Productions étaient sur le stand juste à côté de moi. Il présentait évidemment Ned et les maki. Devnewton n'était pas présent.

    Parmi les sujets abordés tout au long du week-end, nous avons discuté avec Pierre et Alexandre du modèle économique le plus adapté pour se rémunérer au moins un minimum.
    Qu'est-il possible de mettre en place en France pour que l'artiste (le développeur, le game designer, …) qui donne de son temps libre (ou pas) sur une œuvre vidéo-ludique obtienne une reconnaissance pécuniaire ?
    Je suis tombé sur cet article et j'ai pris quelques informations sur la fondation ici et .
    Le sujet me semble suffisant imposant pour en parler ici et lancer une réflexion sur LinuxFr. Si quelque chose se met en place, ce sera avec la communauté. A vos claviers, donc, pour lancer cette réflexion.

    Du côté de Toulouse et pour le prochain Capitole du Libre, j'espère que nous pourrons proposer avec Toulibre un track "Jeux Libres" et faire découvrir au public qu'il existe aussi dans le libre une alternative aux jeux vidéos des grands studios de développement.

    Dernier jour pour proposer une conférence "Jeux Libres" pour les RMLL de juillet prochain.
    N'hésitez pas à vous proposer.

    Lire les commentaires

  • Soirée avec S. Brocca, "l'Utopie du Logiciel Libre" au Lay t'Motiv à Lay (42) le 17 avril 2014 (Dépêches LinuxFR)

    Ce jeudi 17 avril 2014 à 18h30 le bar associatif Lay t’motiv’ accueillera en partenariat avec Chantier Libre le sociologue Sébastien Broca pour son livre « Utopie du logiciel libre, du bricolage informatique à la réinvention sociale ».

    Cet événement sera couvert par RVR RADIO pour son émission « à ciel ouvert »

    Ce n'est peut-être pas la peine de présenter Sebastien Brocca et son livre ici, mais un copier-coller n'étant pas très long à faire, vous trouverez ci-après une présentation de son livre (NdM: et dans la dépêche précédente sur le sujet). Pour ce qui sera plus spécifique à cette soirée, outre votre présence éventuelle et souhaitée :

    • Lay t'Motiv est un bar associatif, ce sera donc une soirée conviviale avec des boissons de producteurs locaux,
    • la soirée est organisée avec Chantier Libre, fablab et GUL embryonnaire du Roannais, nous espérons donc être nombreux à parler de logiciel libre ce soir là.

    Lay se trouve à une petite heure de Lyon et 20 minutes de Roanne

    Né dans les années 1980 de la révolte de hackers contre la privatisation du code informatique, le mouvement du logiciel libre ne semblait pas destiné à renouveler nos imaginaires politiques. Les valeurs et les pratiques du Libre ont pourtant gagné d’autres domaines, dessinant peu à peu une véritable « utopie concrète ». Celle-ci a fait sienne plusieurs exigences : bricoler nos technologies au lieu d’en être les consommateurs sidérés, défendre la circulation de l’information contre l’extension des droits de propriété intellectuelle, lier travail et réalisation de soi en minimisant les hiérarchies. De GNU/Linux à Wikipédia, de la licence GPL aux Creative Commons, des ordinateurs aux imprimantes 3D, ces aspirations se sont concrétisées dans des objets techniques, des outils juridiques et des formes originales de collaboration qui nourrissent aujourd’hui une sphère des communs propre à encourager l’inventivité collective. On peut être tenté de voir là un projet de substitution au modèle néolibéral. Pourtant, dans sa relation à l’économie d’Internet, ses enthousiasmes technophiles ou ses ambiguïtés politiques, le Libre soulève aussi nombre de questions. Sébastien Broca fait ressortir celles-ci, en racontant une histoire dans laquelle les hackers inspirent la pensée critique (d’André Gorz aux animateurs de la revue Multitudes) et les entrepreneurs open source côtoient les défenseurs des biens communs. À travers ce bouillonnement de pratiques, de luttes et de théories, l’esprit du Libre émerge néanmoins comme un déjà là où s’ébauchent les contours d’une réinvention sociale.

    Sébastien Broca est sociologue au Centre d’études des techniques, des connaissances et des pratiques (Cetcopra) de la Sorbonne. Ses travaux portent sur les projets de transformation sociale en lien avec les mouvements du numérique. Il est membre des réseaux de recherche Anthropological Materialism et Numer-Univ.

    Lire les commentaires

  • La durée de vie de Python 2.7 encore repoussée (Journaux LinuxFR)

    Bonjour Journal,

    Python 2.7 a encore de beaux jours devant lui.

    Sur la mailing list, Guido van Rossum employé maintenant par Dropbox ( qui emploie aussi Condoleezza Rice ) vient d'annoncer que Python 2.7 serait maintenue au moins jusqu'à 2020.

    Being the last of the 2.x series, 2.7 will have an extended period of
    -maintenance. The current plan is to support it for at least 5 years
    +maintenance. The current plan is to support it for at least 10 years
     from the initial 2.7 release. This means there will be bugfix releases
    -until 2015.
    +until 2020.
    

    Alors;

    • Est-ce une mauvaise nouvelle pour Python 3 qui malgré des gros effort de portage peine toujours autant à prendre le pas sur son petit frère ?
    • Vas-t-on voir apparaître un python 4 avant la mort de de Python 2.7 et avant le passage à l'âge adulte de Python 3 ?
    • Rien-à-carrer, Python 2.7 est bien meilleurs.

    Sur le fil d'Hacker News, on peut également lire que l'entreprise Red Hat serait impliqué dans dans ce processus. Leur futur version RHEL 7 avec un support de 13 ans embarquera python 2.7 et sera maintenu jusqu'à 2027. Pour éviter de voir une autre version de python 2.7.made-in-Red-Hat avec les patchs de sécurité et deux, trois broutilles distribuée qu'avec RHEL 7, Python se propose de maintenir la branche 2.7 pour recevoir les éventuelles mises à jour.

    Finalement, il ne semble n'y avoir pas grand chose de vraiment intéressant.

    Désolé !

    Lire les commentaires

  • Condoleezza Rice nommée au conseil de direction de Dropbox (Journaux LinuxFR)

    Je n'ai pas vu passer l'info sur linuxfr, alors je pointe un lien:

    Dropbox : polémique autour de la nomination de Condoleezza Rice

    Pour info, "Dropbox" était marqué comme bientôt opérationnel dans PRISM, à une époque ou cette femme était au gouvernement.

    Pour vos données, notez qu'il existe des alternatives comme Owncloud ou Cozycloud.

    Bien sûr, il faut mettre les mains dans le cambouis, mais c'est le prix de la liberté…

    Lire les commentaires

  • Défi Data+ : dernière ligne droite (Journaux LinuxFR)

    Disclaimer : ce journal contient de la pub pour des projets auquel j'ai participé. Il vous incite à voter pour eux afin que mon Fablab gagne des bons d'achat.

    Bonjour,

    Le Défi

    Le défi Data+ est un "concours" lancé par plusieurs partenaires (ville de Rennes, Snootlab, Orange, ERBA …). Il a pour but de rendre tangibles et compréhensibles par le grand public des données habituellement présentées sous forme de chiffres abstraits.
    C'est un concours de prototypes (ie: d'objets fonctionnels) permettant de donner des propriétés physiques à ces données. Il s'appuie sur le réseau des Fablab pour fournir de l'aide aux participants qui peuvent être particuliers, associations, entreprises … Le choix de licences libres est encouragé.
    Celui-ci est aujourd'hui dans son dernier jour de "vote du public" pour déterminer les gagnants.

    Le Fablab de Lannion

    Nous avons présenté 2 objets à ce concours :

    AquaMarium

    Il s'agit d'un aquarium dont le niveau d'eau varie en temps réel en fonction de la marée d'un lieu donné. Il permet de voir physiquement la hauteur d'eau actuelle, le cycle des marées, la vitesse de montée/descente, les coefficients (mortes eaux/vives eaux) …

    Basé sur un Arduino, une pompe et un aquarium à niveau variable il est entièrement sous licence libre (GPLv3, CC-BY-SA).

    Toute sa documentation est disponible sur le wiki du Fablab, et ses sources sur le github.

    Vous pouvez voter pour lui ici en cliquant sur le petit pouce levé.

    ¿WhereIsTheBeach?

    C'est est un projet qui vise à rendre tangible un ensemble de données (météo, géo, web,..) pour rendre le choix d’une plage le plus pertinent possible.
    Il se présente sous forme d'une carte munie d'un sélecteur de critère (bronzette, sports nautiques, popularité). En fonction de votre préférence, différentes données sont analysées et la plage la plus apte à répondre vous est proposée.

    Ce projet est aussi OpenSource/OpenHardware et toute sa documentation est disponible sur le wiki.

    Vous pouvez voter pour lui ici en cliquant sur le petit pouce levé.

    Les autres

    Bien entendu, beaucoup d'autres projets ont étés présentés, et même si mon but n'est pas que vous votiez pour eux ;), vous pouvez les retrouver sur la page générale des projets.

    Lire les commentaires

  • Cerberus 0.9.1 est disponible (Dépêches LinuxFR)

    Après 6 mois de développement intensif depuis la version 0.9.0, une nouvelle version 0.9.1 de Cerberus vient d'être publiée. Cerberus (sous licence GPLv3) est un outil de test pour les applications web, les applications back office et les tests d'infocentres et outils décisionnels. En mode web lié à une base de données, il permet de centraliser la totalité des tests utilisateurs de n'importe quel type d'application.

    Titre de l'image

    Grâce à Selenium (autre framework de tests informatiques), Cerberus permet aussi de lancer en mode automatique (par une API REST) les tests d'application web en batch dans le cadre, par exemple, d'un processus d’intégration continue.

    Au delà d'un script Selenium, Cerberus rend l’édition des actions utilisateur facile et lisible à travers une interface web. Les utilisateurs peuvent donc spécifier leur exigence dans chaque test et sur le même écran, les actions selenium peuvent être définies pour rendre l’exécution automatisée.

    Bon test à tous…

    Cette version ajoute de nombreuses améliorations comme :

    • De nombreux nouveau écrans
    • Une gestion des droits utilisateurs plus fine
    • La gestion des exécutions manuelles
    • Des nouvelles actions et fonctions de contrôle
    • Une documentation en ligne plus précise

    Lire les commentaires

  • Sortie du Glorious Haskell Compiler 7.8 (Dépêches LinuxFR)

    Ghc, le Glorious Haskell Compiler est sorti le 9 avril 2014 en version 7.8.1. Il s'agit du compilateur le plus populaire pour le langage Haskell. Haskell est un langage de programmation purement fonctionnel, avec un système de types sophistiqué. C'est le principal langage généraliste à utiliser une stratégie d'évaluation non-stricte par défaut : la valeur d'une expression n'est calculée que si elle est nécessaire.

    Sommaire

    Haskell en trois mots

    Haskell est un langage de programmation purement fonctionnel, avec un typage statique fort, et une stratégie d'évaluation non stricte.

    Le Glasgow Haskell Compiler est le principal compilateur Haskell, bien qu'il en existe d'autres.

    Quelques exemples

    L'inévitable hello world :

    main = putStrLn "Saluton Ĉirkaŭaĵojn!"

    Suite de Fibonnacci :

    fibs :: Int -> Int
    fibs 0 = 0
    fibs 1 = 1
    fibs n = fibs (n-1) + fibs (n-2)
    
    -- Sous forme de liste infinie
    fibs':: [Int]
    fibs' = 0:1:(zipWith (+) fibs' (tail fibs'))

    Un langage fonctionnel pur

    La spécificité la plus marquante de Haskell, c'est qu'il s'agit d'un langage fonctionnel pur : une fonction appelée avec les mêmes arguments renverra toujours le même résultat, contrairement à une fonction comme input(message) en python.

    Cela rend possible la transparence référentielle : une expression peut être remplacée par son résultat sans changer le comportement de l'application. Le raisonnement sur les équations est mené par substitution sans inquiétude des effets de bord.

    Les entrée-sorties et autres effets de bord sont bien sûr possibles, mais ils sont distingués dans le système de type des calculs sans effets de bord. Cela permet des optimisations assez poussées et garanties correctes sur ces derniers. Cette distinction des effets de bord dans le système de type est déroutante au début, mais avec l'expérience, elle apporte un réel confort.

    Avec un typage puissant

    Le typage statique permet de vérifier à la compilation la cohérence d'un programme et de détecter de nombreuses classes d'erreurs fréquentes. Un type statique est une approximation réalisée pendant la compilation des valeurs rencontrées au cours de l'exécution. Il est extrêmement difficile de concevoir un système de type à la fois flexible (faiblement verbeux, avec une inférence utile), complet (de grain fin, éliminant plus de bugs) et correct (pas de programmes justes rejetés). Haskell essaye de trouver le juste milieu pour que la programmation généraliste soit efficace.

    Les aficionados du typage dynamique et du « duck typing » argumentent que, lors du développement avec les langages statiquement typés (typiquement C/C++), une grande partie des ressources sont gaspillées à combattre le système de type. Le typage statique de Haskell est rendu extrêmement flexible grâce au polymorphisme paramétrique, similaire aux templates en C++, mais avec des possibilités d'inférence bien plus développées.

    Un type polymorphique peut être restreint à l'aide de contraintes, c'est-à-dire un ensemble de spécifications (ou typeclasses). Par exemple pour insérer un élément dans un Set, il est nécessaire de pouvoir le comparer aux éléments déjà présents avec la méthode compare de la typeclasse Ord, d'où la contrainte Ord a => dans le type de insert :

    insert :: Ord a => a -> Set a -> Set a

    En pratique, dans les cas courants, la seule différence induite par le système de types entre un code haskell et le code python correspondant est la présence (facultative mais habituelle) en haskell de la signature de chaque fonction… Signatures qui sont en cours d'adoption par la communauté python.

    Les nouveautés de ghc 7.8.1

    Changements du langage

    Typed holes

    Grâce au typage fort de haskell, on se trouve souvent à utiliser les types pour guider la conception : on écrit d'abord les types dont on va avoir besoin, puis les signatures des fonctions. Ensuite, de proche en proche, l'implémentation des fonctions est guidée par les signatures. Bien sûr, dans les cas les plus complexes, il faut d'autres ressources que cette méthode, mais on y devient rapidement accro. L'extension typed holes (littéralement « trous typés ») permet d'utiliser cette démarche dans le corps d'une fonction.

    Cette extension est souvent utilisée conjointement avec le drapeau -fdefer-type-errors qui transforme les erreurs de typage en warnings. Dans ghci, cela permet de charger toutes les définitions et de les manipuler même si leurs types sont incorrects. Une expression mal typée ou contenant des typed holes est équivalant à undefined et déclenchera une erreur uniquement si elle est évaluée.

    En pratique, un hole est un _ placé dans le code à la place d'une expression manquante (ici à la dernière ligne):

    getSensorReading :: IO Double
    getSensorReading = return 123.45
     -- TODO: utiliser vraiment la sonde thermique
    
    main = do
        tKelvins <- getSensorReading
        putStrLn ("Aujourd'hui il fait " ++ _ ( tKelvins - 273.15) ++ " degrés")

    À la compilation, ghc émet une erreur (ou un warning si -fdefer-type-errors est activé) pour chaque hole, et affiche son type:

        Found hole ‘_’ with type: Double -> [Char]
        Relevant bindings include
          tKelvins :: Double (bound at toto.hs:6:5)
          main :: IO () (bound at toto.hs:5:1)
        In the expression: _
        In the first argument of ‘(++)’, namely ‘_ (tKelvins - 273.15)’
        In the second argument of ‘(++)’, namely
          ‘_ (tKelvins - 273.15) ++ " degrés"’
    
    

    Dans notre exemple, le warning à la compilation nous indique que pour afficher la température dans le putStrLn, il nous faudra une fonction de type Double -> String. Une simple recherche dans hoogle nous indique que la fonction en question n'est autre que show.

    OverloadedLists

    Haskell repose sur une syntaxe très concise, la majeure partie du langage (Opérateurs, type de base, etc) étant définie dans le Prelude.
    En revanche, ce n'est pas le cas des expressions littérales comme les nombres, les chaines de caractères et les listes. Par exemple [1, 2, 3] est interprété par le compilateur comme 1:2:3:[], où (:) et [] sont les constructeurs du type liste défini dans le Prelude. OverloadedStrings autorisait déjà les chaînes de caractères littérales avec d'autres types que [Char], notamment le type Text pour l'encodage UTF-8.

    Cette extension OverloadedLists est documentée, elle permet d'utiliser la syntaxe des littéraux listes avec d'autres types, comme par exemple les vecteurs, les chaînes du module Text ou encore les ensembles.

    Pour utiliser cette extension, il faut disposer d'une instance de la classe IsList. Il faudra donc attendre que ces instances soient intégrées aux bibliothèques haskell pour vraiment en profiter.

    PatternSynonyms

    Une autre extension, PatternSynonyms permet de donner un nom à un motif pour le filtrage.

    La puissance des types de donnée algébrique (ADT) repose sur la possibilité de filtrer les données par motif, comme en Scala :

    type Errno = Int
    data Error = ErrorLibC Errno
               | ErrorIO IOException
    
    errorToStr :: Error -> String
    errorToStr (ErrorIO ioe)     = "Haskell's IOException: " ++ show ioe
    errorToStr (ErrorLibC errno) = "LibC's errno: " ++ show errno

    Chaque constructeur du type Error défini un motif, utilisé par la fonction errorToStr pour filtrer les erreurs. En revanche il n'était pas possible de définir ses propres motifs en plus des constructeurs. PatternSynonyms permet maintenant cela, par exemple pour avoir plusieurs motifs par constructeurs :

    pattern ErrorPERM  = ErrorLibC 1
    pattern ErrorNOENT = ErrorLibC 2
    pattern ErrorSRCH  = ErrorLibC 3
    
    errorToStr :: Error -> String
    errorToStr (ErrorIO ioe) = "Haskell's IOException: " ++ show ioe
    errorToStr  ErrorPERM    = "Operation not permitted"
    errorToStr  ErrorNOENT   = "No such file or directory"
    errorToStr  ErrorSRCH    = "No such process"
    errorToStr (ErrorLibC errno) = "LibC's unknown errno: " ++ show errno

    Les motifs synonymes sont aussi utilisés pour cibler des données profondément imbriquées : pattern Greetings name = 'h':'e':'l':'l':'o':' ':name. Par défaut il sont bidirectionnels : Greetings "world" est une valeur. Il est possible de définir des synonymes unidirectionnels lorsqu'il n'existe pas de bijection.

    TypeFamilies fermées

    Il est possible de déclarer une famille de type et ses instances dans la même clause, par exemple:

    type family TF a where
        TF ([Bool]) = Int
        TF ([Bool],[Bool]) = Double

    La famille est alors fermée, c'est-à-dire qu'il n'est pas possible de déclarer de nouvelles instances de TF.

    Améliorations du compilateur

    De nombreuses améliorations portent sur le compilateur lui-même, sans modifier le langage. Il est toujours plus rapide et économe en mémoire, notamment pour l'inférence de types. La compilation en parallèle de modules est activable avec la nouvelle option -jN.

    Sur Linux, FreeBSD et Mac OS X, GHCi utilise maintenant le chargeur de code dynamique du système. Auparavant, un chargeur maison liait dynamiquement du code statique (.a) en mémoire. Pour utiliser cette fonctionnalité, il est nécessaire de compiler avec -dynamic-too pour générer des bibliothèques dynamiques (.dyn.so).

    Améliorations de la génération de code

    La qualité du code que ghc produit s'améliore aussi :

    • ghc est capable d'utiliser plus de types «nus» (unboxed), avec l'activation de -funbox-small-strict-fields par défaut;
    • le gestionnaire d'entrée sortie se parallélise mieux, «de façon linéaire jusqu'à 32 cœurs»;
    • le nouveau générateur de représentation intermédiaire Cmm a été activé, après une gestation de plusieurs années;
    • de nouvelles primitives (PrimOps) pour les instructions SIMD sont disponibles, pour l'instant uniquement avec le générateur LLVM.

    Amélioration du gestionnaire d'entrée-sorties

    Le gestionnaire d'entrée-sorties était un des points les plus critiques de la performance du runtime haskell. Dans la version 7.8.1, il a été grandement amélioré, en particulier dans un contexte multi-processeurs. Haskell devient ainsi de plus en plus crédible comme meilleur langage impératif du monde.

    Compilation vers iOS

    La gestion de la compilation croisée a été améliorée, ce qui permet notamment de compiler vers les systèmes iOS.

    Compilation vers javascript avec ghcjs

    La sortie de la version 7.8 devrait être accompagnée de la première version publique de ghcjs, un compilateur haskell vers javascript. Ce langage devient de plus en plus l'assembleur du client web et ghc prend ainsi en charge cette plateforme. Par rapport à Fay, qui est plus ancien, ghcjs cherche à compiler tout le langage haskell et pas seulement un sous-ensemble.

    L'introduction à ghcjs permet de se faire une bonne idée de la façon de l'utiliser, en particulier pour les parties spécifiques à javascript.

    Vers ghc 7.10

    La version 7.10.1 sera la prochaine version majeure de ghc. On trouve sur le trac de ghc une liste de choses qui devraient figurer dans cette prochaine version. Certaines nouveautés de cette version sont préparées dès la 7.8.

    Monad / Applicative

    Ces deux concepts permettent d'associer un effet à une valeur : IO Int peut par exemple représenter l'action de la lecture d'un entier présent dans un fichier. La notion de foncteur applicatif est plus générale : toutes les monades sont des foncteurs applicatifs, tandis que l'inverse n'est pas nécessairement vrai. L'exécution des effets d'une monade peut dépendre des valeurs obtenues des effets précédents, contrairement aux foncteurs applicatifs où les effets sont exécutés dans l'ordre des arguments.

    La classe de type Monad fut introduite dans les premières versions du langage pour gérer les entrées/sorties avec la monade IO. Lorsque, plus tard, la classe de type Applicative apparût dans la bibliothèque de base, Monad n'a pas été modifiée pour avoir Applicative comme super-classe.

    Le but de la proposition Functor < Applicative < Monad est de corriger ce problème pour réduire la redondance (par exemple entre return et pure, liftM et fmap).
    Ce changement, susceptible de rendre du code incompatible, est déjà signalé par un warning dans GHC 7.8 et sera officialisé dans la version 7.10.

    Autres actualités de haskell

    Olivier Charles a publié sur son blog l'édition 2013 de sa chronique 24 Days of Hackage qui offre une série d'introductions (avec des exemples) aux paquets majeurs disponibles sur Hackage. L'édition 2012 vaut également le détour, car elle couvre des paquets encore plus incontournables (base, containers, transformers, etc.).

    Hackage 2

    Le site hackage qui répertorie les paquets haskell libres, exécutables et bibliothèques est passé en version 2 en septembre 2013. L'aspect visuel a été amélioré, la recherche concerne maintenant aussi la description des paquets. La plupart des informations sont plus accessibles, en consultation mais aussi à la modification : le nouveau hackage est plus permissif, et il a une API rest plus étendue.

    D'autres fonctionnalités ont été développées mais pas encore déployées, comme la gestion flexible des tags et le calcul des dépendances inverses.

    Haskell platform

    Il n'est généralement pas recommandé d'installer ghc seul, mais plutôt de récupérer la plateforme haskell, qui contient ghc ainsi que les bibliothèques les plus essentielles du monde haskell. Comme la version 7.8 de ghc a tardé, la plateforme n'a pas été mise à jour depuis la version 2013.2 de mai 2013. Une nouvelle version, adaptée à ghc 7.8 devrait sortir prochainement.

    Lire les commentaires

  • Gnome, l'outbreak après l'outreach? (Journaux LinuxFR)

    Bonjour Nal,

    Je t'écris pour te signaler que ton environnement de bureau préféré est en danger.

    En effet, la fondation Gnome n'a plus un rond, essentiellement, car le succès du Outreach Program for Women a été plus important que prévu.

    Plusieurs solutions sont envisagés dans l'esprit du projet:

    • mettre un bouton faire un don obligatoire au login.
    • saborder le network manager des créanciers.
    • supprimer les femmes et l'argent du système mondial.

    https://wiki.gnome.org/FoundationBoard/CurrentBudgetFAQ

    Lire les commentaires

  • ReactOS : officialisation et financement (Dépêches LinuxFR)

    Il reste presque 3 mois (52 jours) pour financer ReactOS !

    ReactOS est un projet de système d'exploitation libre se voulant compatible avec les programmes et pilotes Microsoft Windows. Visant la sortie de leur version 0.4 intitulée Community Edition, le projet met en place une plate-forme de collaboration avec les fabricants de matériel, les développeurs de logiciel, et les utilisateurs. ReactOS lance une campagne de levée de fonds collaborative permettant de voter pour des priorités de développement, en fonction de la somme investie.

    Logo ReactOS

    Sommaire

    ReactOS

    ReactOS est un projet d’implémentation libre de l’environnement Windows, il s’agit de réimplémenter les API officielles (ainsi que celles non documentées) afin de permettre l’installation d’applications pensées et conçues pour Windows.

    Les développeurs justifient leur développement en expliquant que s’il existe d’excellentes alternatives libres (comme GNU/Linux), elles ne pourront jamais se substituer totalement à Windows et à ses technologies, d’une part à cause de son poids historique et du poids des nombreux outils pensés pour Windows, et d’autre part certains apprécient cet écosystème, tout simplement. ReactOS permet donc de conserver une méthodologie Windows, mais librement.

    Pour mettre en lumière la compatibilité, on peut remarquer que certains composants officiels de Windows peuvent s’installer sur ReactOS, par exemple la page Wikipédia décrivant le projet rapporte qu’il est possible d’installer l’outil de connexion de bureau à distance de Microsoft directement depuis le CD d’installation d’un système d’exploitation Microsoft. ReactOS lui-même peut être compilé avec la suite de développement Microsoft.

    Les développeurs sont invités à tester leur développement sur ReactOS pour garantir la compatibilité binaire de leur application entre Windows et ReactOS, mais le but n’est pas de développer spécifiquement pour ReactOS, le but à terme est une compatibilité entre ces deux systèmes.

    La nature même du projet ReactOS fait qu’il constitue une documentation très approfondie des fonctionnalités non documentées de Windows. ReactOS partage du code avec le projet Wine (implémentation des API Windows sur Unix) et les deux projets bénéficient de leurs travaux mutuels.

    ReactOS est un gros projet qui compte actuellement 4,96 millions de lignes de code, implémentant à la fois un noyau de type NT et l’environnement utilisateur. C’est un projet de longue haleine (initié dans les années 1990) et multiplateforme (i386, amd64, arm).

    ReactOS

    Community Edition

    La communication est d’ordinaire assez confidentielle, et un éventuel visiteur du site web avait de grandes chances de ne retenir que les avertissements (légitimes) mettant en garde sur l’utilisation du logiciel actuellement non stabilisé. Mais pour sa prochaine version 0.4, ReactOS met en avant son travail et lance une grande campagne de communication.

    Zéro point quatre

    Il est encore un peu tôt pour énoncer les nouveautés qu’apportera cette version 0.4, puisque c’est justement la levée de fonds qui va les déterminer. Cependant, c’est l’occasion pour le projet de faire une petite rétrospective entre ReactOS 0.3.0 qui était sortie en 2006 et la prochaine 0.4.0. Support du SATA, de l’USB, du son, du WiFi… ce sont beaucoup de fonctionnalités essentielles qui témoignent du chemin parcouru. On s'attend à ce que la série 0.4 soit la dernière série des versions alpha, la 0.5 étant prévue pour être une version bêta.

    C’est certainement la plus grosse nouveauté visible attendue : un nouveau shell, explorer_new.exe a été complètement redéveloppé dans le cadre d’un contrat que la Fondation ReactOS a passé avec le développeur Giannis Adamopoulos grâce à de précédentes donations.

    La copie d’écran suivante montre le shell explorer_new.exe utilisé comme shell de Windows 8 !

    explorer_new.exe

    ReactOS peut être facilement testé sur Vmware, VirtualBox ou Qemu, des images sont fournies pour ces trois systèmes de virtualisations, ainsi qu’un live CD.

    Financement collaboratif

    Le projet ReactOS vient de lancer une campagne de financement sur la plateforme IndieGogo, ils lèvent 50 000$ en financement flexible, c’est-à-dire que tout argent levé est gagné, indépendamment du fait que l’objectif soit atteint ou non. La campagne prendra fin le premier juin.

    Chose originale, en fonction du montant donné, on peut décider quel est le matériel ou logiciel prioritaire à supporter, et cela orientera le travail de l’équipe. Évidemment, plus vous financez et plus vous pesez dans les décisions. Pour 20$ vous pouvez voter pour un logiciel, mais à partir de 10 000$, vous passez outre les votes, vous soumettez directement votre demande. De même, avec 40$ vous pouvez voter pour du matériel, mais avec 35 000$, c’est vous qui décidez.

    Il y a trois créneaux disponibles pour les applications, c’est à dire que ReactOS travaillera sur le support des trois applications les mieux notées. Mais en fonction du nombre de participants au programme de vote, c’est-à-dire des donateurs qui choisissent comme rétribution un droit de vote, d’autres créneaux peuvent se libérer, 5000 votants font 5 créneaux, et une personne qui paie suffisamment pour décider directement ouvre jusqu’à 10 créneaux.

    Un mécanisme similaire est en place pour le support du matériel (jusqu’à 6 pièces), mais si vous avez vraiment de grands moyens vous pourrez voir plus grand…

    Évidemment, pour ce type d’opération plusieurs rétributions sont proposées pour motiver le don, avec les traditionnels T-shirt ou CD collectors, mais pour 600$ vous recevrez une petite carte-mère préinstallée avec ReactOS, et si vous êtes un peu mégalo, vous pouvez acheter le droit d’apposer votre nom en dessous du logo de démarrage (mais attention, il n’y en aura qu’un pour les gouverner tous) !

    Cette opération de financement permettra entre autres de renouveler le contrat de Giannis Adamopoulos ainsi que de financer de nombreux autres développements, mais si vous êtes compétent(e), les fonds levés par ReactOS peuvent également servir à vous embaucher vous aussi.

    À l’écoute des développeurs, des fabricants et des utilisateurs

    Le projet ReactOS met en place trois programmes de collaboration avec les développeurs ou fabricants afin de travailler la compatibilité main dans la main.

    • Un programme de collaboration avec les développeurs d’applications libres, afin d’intégrer ces applications au gestionnaire de paquet de ReactOS ou dans le processus d’installation du système (l’application pourra être choisie au moment de l’installation et directement utilisable à la fin de l’installation du système). Pour participer à ce programme de collaboration, une seule exigence : il suffit que votre application soit libre. Autrement, rien d’autre n’est fixé : vous pouvez participer en faisant la promotion de la campagne de financement, ou toute autre action de votre imagination.

    • Un programme de collaboration avec les développeurs d’applications « officielles ». Les développeurs sont invités à passer un contrat avec ReactOS pour piloter les développements nécessaires à la compatibilité. Si la confidentialité est nécessaire, un contrat discret (Ghost mode) est possible. Certains le font déjà et vous ne le saviez pas ? C’est le principe. Ce programme concerne les développeurs d’applications propriétaires, mais aussi les entreprises qui développent des applications libres. Une entreprise qui développe du logiciel libre peut donc contracter avec ReactOS pour travailler sur le support et la compatibilité de leur offre logicielle. Dans tous les cas, ne pas hésiter à contacter ReactOS, c’est l’occasion pour eux de faire un jeu de mot : « please feel free to contact us and suggest any win-win strategy: We're open (source) to new ideas! ».

    • Un programme de collaboration avec les fabricants de matériel est ouvert à toute entreprise qui souhaite voir son matériel officiellement supporté. Cette collaboration permet de piloter le développement dans cet objectif et de voir ses produits référencés dans la liste du matériel officiellement supporté par ReactOS. Un contrat en Ghost mode est évidemment possible et dans tous les cas ReactOS tient secret ses relations commerciales à moins que l’inverse n’ait été explicitement décidé par le constructeur.

    Comme rapporté plus haut, les utilisateurs sont invités à voter pour le logiciel ou matériel qui compte pour eux, voir à ce sujet les options de financement « Push your app! » et « Push your piece of hardware! ».

    Passer à ReactOS

    Comme écrit sur leur nouveau site communautaire, ReactOS permet de rester en sécurité en utilisant un système d’exploitation compatible Windows, mais sans contrat caché avec la NSA ni de de porte dérobée…

    ReactOS est aussi une opportunité très intéressante à l’heure où Microsoft abandonne le support de Windows XP. Ceux qui souhaitent maintenir un environnement de travail compatible (pour cause de logiciel ou de matériel spécifique par exemple) et supporté, seront intéressés par le projet ReactOS.

    Pour essayer, le mieux est de lancer une image dans une machine virtuelle, ou un live CD, mais attention, ce n’est pas encore la 0.4. Il n’y a pas encore le nouveau shell par exemple, l’actuel est assez instable et n’est pas représentatif. ReactOS n’est pas utilisable en production aujourd’hui, mais c’est justement ce que veut réaliser cette levée de fond, et le nouveau shell montre que les financements sont employés efficacement !

    Lire les commentaires

  • mcercle version 14.04 (Dépêches LinuxFR)

    mcercle est un logiciel de gestion libre sous licence GPLv3 pour autoentrepreneur, artisans et TPE. Il se veut léger, ergonomique tout en gardant les performances d’un logiciel de gestion professionnel. Il est multiplateforme s’exécutant sous MS Windows, GNU/Linux et Mac OS X.

    mcercle

     Caractéristiques principales :

    • Gestion clients: carnet d’adresse, interventions/services, devis, factures ;
    • Gestion produits: références fournisseurs, gestion du stock avec seuil d’alerte ainsi qu’un classement par catégorie ;
    • Gestion des fournisseurs: nom du contact fournisseur, adresse, téléphone… ;
    • Base de données: sauvegarde dans une base SQLite qui assure rapidité et intégrité des données.

    D'autres détails en deuxième partie.

    Écrit depuis 2010 par Cyril Frausti qui n'en est pas à son coup d'essai, mcercle a connu beaucoup d'évolutions avec un souci de stabilité et de confort, comme en témoigne le changelog. C'est un logiciel de gestion de plus, oui, mais qui tend à être le plus simple et fonctionnel possible. Et puis quel confort monsieur l'entrepreneur, vous pouvez « gérer votre entreprise avec un outil libre, un outil qui vous appartient totalement ! » (extrait de la plaquette de promotion)

    L'auteur a fait l'effort de fournir des paquets Debian / Ubuntu pour les versions précédentes. Mais si vous ne voulez pas compiler cette version, sachez que le binaire Win32 tourne sous Linux sans problème avec Wine (NdM. qui a testé pour vous).

    Caractéristiques techniques :

    Copies de quelques écrans :

    • Tableau de bord
      tableau de bord

    • Clients
      clients

    • Fiches produits
      produits

    • Devis
      devis

    Micro interview de l'auteur

    Quelle est ton activité?

    Électricien actuellement.

    La programmation tu es tombé dedans étant petit ?

    Petit, pas tant que ça, j'avais 15/16 ans. Avec de l'HTML comme tout le monde, je souhaitais avoir un petit espace internet, puis avec mes études d'électronique j'ai fait du code machine (assembleur) et du langage C. Lors de mon 1er emploi en bureau d'étude je me suis vite confronté à l'informatique comme interface homme/machine pour le pilotage des mes cartes électroniques, j'ai donc naturellement commencé à développer en C++ pour créer mes propres interfaces.

    Pourquoi avoir programmé mcercle? Avais-tu essayé d'autres outils?

    C'est en essayant plusieurs outils justement que j'ai décidé de développer mcercle, je trouvais les autres logiciels beaucoup trop difficiles pour une utilisation basique (en 2010) et ceux qui était assez simples et complets n'étaient pas opensource.

    J'ai cru comprendre que tu n'utilisais plus le logiciel…

    Ce n'est plus vrai à présent; je suis artisan maintenant et j'utilise donc mon outil.

    Le logiciel actuel est très complet. L'export des données vers la compta serait un gros plus, non ?

    Oui, l'export/import est quelque chose d'important surtout pour la migration vers mcercle, mais je voulais avant tout stabiliser mcercle (c'est chose faite) avant de prévoir un import/export. Donc ce sera sur la feuille de route.

    Comment vois-tu l'évolution future ? Ça restera un logiciel très simple et léger ?

    Oui bien sûr. Je prévois dans la version 14.10 d'intégrer une gestion d'extensions pour enrichir les possibilités du logiciel sans toucher le logiciel lui même.

    En plus de Qt4, c'est compilable avec Qt 5.2 je crois ?

    Oui

    Quels échos as-tu de l'utilisation de mcercle?

    Quelques utilisateurs donnent de bons retours généralement et d'autres demandent des ajouts de fonctionnalités mais je ne peux pas répondre oui à tout le monde faute de temps, mcercle reste ouvert et chacun peut le modifier à sa convenance… j'ai d’ailleurs un utilisateur qui l'a compilé pour Android—mais il faut refaire une interface car ce n'est pas adapté.

    Est-il empaqueté par des distributions?

    Pour debian/ubuntu oui, dans les versions précédentes, malheureusement plus aujourd’hui et j'encourage les empaqueteurs si le logiciel leur paraît utile.

    Lire les commentaires

  • HandyLinux pour débuter en informatique (Dépêches LinuxFR)

    HandyLinux est une distribution francophone qui parle aussi anglais, conçue pour faciliter l'accès à l'informatique à ceux qui débutent : les enfants, les seniors et ceux qui recherchent la simplicité.

    logo-HandyLinux

    Cette distribution collégiale, se distingue par son HandyMenu, sa documentation progressive et détaillée, l'accueil et l'écoute des nouveaux utilisateurs. Elle est basée sur Debian Wheezy avec Xfce, un environnement de bureau rapide, léger et stable, HandyLinux est pratique et gratuite.

    La version 1.4.2 sortie le 2 avril 2014, fonctionne sur la plupart des PC construits à partir de 2001 et dotés de 512 Mio de RAM. Matériel testé avec HandyLinux.

    Tous les détails et les captures d'écran en seconde partie.

    L'originalité de cette distribution Debian GNU/Linux, est son HandyMenu prévu pour ne pas effrayer ou perdre le nouvel utilisateur dans un flot d'applications. Afin de lancer les applications usuelles, HandyMenu classe vos programmes en six catégories : Internet, Fichiers, Multimédia, Bureautique, Jeux et Aventuriers.
    HandyMenu

    L'autre point fort est sa documentation détaillée reprenant les catégories du HandyMenu, pour aider l'utilisateur à progresser à son rythme et parvenir à enlever les roulettes et se passer de cette interface simplifiée.

    Cette distribution est collégiale, c'est-à-dire que des améliorations sont proposées par les participants du forum et le développeur les intègre aux dépôts. Elles sont ainsi immédiatement disponibles au moyen du gestionnaire de mise à jour.

    Les atouts d'une dérivée officielle de Debian :

    Pour l'avoir installée sur un pentium 4 à 1,5 GHz, 768 Mio de RAM, de décembre 2001, je réponds que son installation est simple et rapide (elle fonctionne aussi sur des eeepc avec un SSD de 4 Gio !). Ses dépôts sont au format strict Debian. Toutes les améliorations sont installées par le gestionnaire de mise à jour.

    accueil

    Malgré la faiblesse du processeur, cette distribution permet de commencer à surfer sur Internet deux minutes après avoir appuyé sur le bouton ON du PC. Un collégien de douze ans l'a immédiatement prise en main, personnalisé son fond d'écran, ajouté un marque page pour se connecter au site de son collège. Et son père, peu doué en informatique, utilise ce poste pour rechercher de bonnes occasions.

    HandyLinux-start-page

    Les grosses icônes du HandyMenu sont explicites :

    handyblock-manon

    Elle est toute en français et Minitube facilite l'accès aux vidéos du Youtube, un des usages les plus courants d'Internet :

    minitube

    Le menu Slingscold est intégré :

    Slingscold

    Installer des logiciels pour les enfants, comme Gcompris et bien d'autres disponibles dans la logithèque Debian, est expliqué dans la section Aventuriers.

    LibreOffice est fourni dans sa version stable la plus récente.

    La communauté des contributeurs

    • L'équipe est composée de Guantas, Arpinux, Dyp, Fibi, Manon, Wiscot, etc.
    • Plusieurs blogueurs analysent et critiquent les versions : Frédéric Bezies, Cyrille Borne, TechandTux, La vache libre, Sam7.
    • Les utilisateurs novices ou expérimentés participent au forum.
    • Bienvenue sur HandyLinux !

    Lire les commentaires

  • Un projet de VM Python chez Dropbox et état des lieux des autres VM (Dépêches LinuxFR)

    Dropbox lance PySton, une nouvelle implémentation de Python, basée sur LLVM, avec comme objectif de tirer partie des capacités JIT (Just-In-Time compiling, compilation à la volée) de l'architecture LLVM. Le but étant à terme d'utiliser Python là où du C++ était encore utilisé pour ses performances.

    La suite de la dépêche fait un état des lieux des différentes VM Python et des projets d'améliorations de leur performances.

    Sommaire

    Avant de vous parler du projet initié par Dropbox, faisons un petit tour des VM disponibles pour Python.

    CPython

    L'implémentation de référence du langage Python, en C. La syntaxe Python est convertie dans un bytecode Python, qui est exécuté par la VM CPython. On critique régulièrement cette VM, à tort. Elle fonctionne très bien, elle est très portable et a subi de nombreuses optimisations au fil du temps qui en font une VM robuste, rapide et fiable.

    On lui reproche régulièrement son GIL, le Global Interpreter Lock, ce gros verrou global qui protège les accès multi-threads. Dans les faits, le problème du GIL ne se pose que pour les programme multi-threads, CPU-bound, exécutés sur des multi-coeurs, qui se prêtent mal à d'autres techniques de parallélisme (tel que les services offerts par le module multiprocessing). Autant dire qu'on est dans des développements très spécifiques qui n'affectent pas la majorité des programmes écrits en Python.

    Le GIL introduit par ailleurs des simplifications de code massives qui expliquent sa présence et sa longévité.

    IronPython

    IronPython une implémentation du langage Python, basée sur le CLR du framework .NET de Microsoft. Elle profite de tout l'écosystème autour de .NET et notamment des capacités JIT du CLR. Sur les derniers benchmarks dont je me rappelle, IronPython était soit au niveau de CPython, soit plus rapide (sans pour autant exploser les compteurs, on était dans le 1.5x ou 3x sur des benchmarks très ciblés). Si le langage est bien supporté, on peut regarder au delà de la communauté Python et se mettre à rêver grâce à IronPython de convertir des programmeurs Visual Basic. Ça, c'est pour la pub.

    Quand on regarde de près, on découvre qu'en fait, pour les langages dynamiques comme Python, Ruby et Javascript que Microsoft prend en charge, le CLR brut est mal adapté. Microsoft a donc créé un DLR, un Dynamic Langage Runtime, qui s'interface au dessus du CLR et fournit des services particuliers pour gérer le dynamisme des langages précités. Jusque là, très bien…

    Pour faire fonctionner un programme IronPython, il faut donc en plus des dernières versions de .NET installer le DLR dernière version. Moyennant tout ça, un programme Python pourra utiliser facilement n'importe quel composant .NET (écrit en C#, J#, Visual Basic…) mais l'inverse n'est pas vrai : un programme Python ne peut pas produire simplement des objets compatibles CLR et reste cantonné au monde du DLR. Pour accéder à ces objets/bibliothèques depuis un programme CLR, il faut passer par une gymnastique un peu complexe. Du coup, les langages DLR ne sont pas du tout au même niveau que les langages CLR et il y a peu de chance de voir Python remplacer un jour le Visual Basic.

    Récemment, Microsoft a décidé de se débarrasser de ce truc donné IronPython à la communauté. Le développeur principal du projet chez Microsoft, après avoir vu son équipe se réduire au fil des mois, est finalement parti chez Google. Cf cet article de ZDNET qui résume bien ce qui se passe.

    Autant dire que IronPython n'apportera pas la révolution que certains attendaient. Ca reste un projet très respectable, avec des versions compatibles 2.7 complètement fonctionnelles et une intégration dans Visual Studio.

    Jython

    Jython est une implémentation de Python pour la JVM de Java, qui permet d'écrire du code Java en Python et d'utiliser tous les bibliothèques Java en Python. Il supporte Python 2.5 et 2.7 .

    On en entend peu parler dans le monde de l'Open Source mais le projet continue son bonhomme de chemin depuis plus de 10 ans maintenant (la première version est sortie autour des années 2000). Cette longévité est un signe que le projet est utilisé, très probablement dans le milieu de l'industrie.

    Les performances sont à peu près au niveau de CPython (dixit la FAQ), le temps de démarrage d'une appli est assez long (à cause de la JVM, c'est donc peu pratique pour des scripts) ; sur des programmes qui s'exécutent longtemps (comme c'est souvent le cas pour des applis java côté serveur), le compilateur JIT JVM se met en route et fournit des gains intéressants.

    À noter l'addition récente du module JyNI qui permet d'utiliser les modules d'extension Python de façon transparente en Java.

    L'intérêt principal de ce projet, ce ne sont pas les performances mais l'intégration transparente dans l'écosystème Java. Si la JVM gagne encore en performance, le projet en bénéficiera, mais cela fait longtemps qu'on n'entend plus de nouvelles révolutionnaires sur le sujet…

    PyPy

    On ne présente plus PyPy, l'interpréteur JIT Python qui déménage. Après plus de 12 années et 5 réécritures, le projet envoie du bois : ça exécute du Python plus vite que CPython et pas qu'un peu si on en croit les benchmarks. Note de l'auteur: sur un programme ordinaire, tout le monde ne voit pas de tels gains, voire voient des dégradations catastrophiques donc à prendre avec du recul.

    Le projet génère du code x86, x86-64 et récemment Arm (suite à un effort du projet Rapsberry Pi). Il est compatible Python 2.7, avec un effort en cours pour avoir la compatibilité Python 3. Le projet a maintenant atteint un bon niveau de stabilité et de performance, suffisant pour l'utiliser en production. Il est utilisable notamment avec Django, SQLAlchemy ou Twisted.

    Maintenant que les gains sont là, les efforts portent sur l'écosystème ou sur d'autres innovations.

    Côté écosystème, le gros problème de PyPy est que tous les modules d'extensions compilés pour CPython ne fonctionnent pas sous PyPy. Et il y en a beaucoup : des GUI (PyQt, PyGtk…), des bibliothèques de jeu (PyGame), etc.

    PyPy travaille sur le sujet mais sans espoir pour l'instant de résoudre complètement le problème :

    • dans certains cas, une recompilation dudit module pour PyPy avec cpyext permettra de le faire fonctionner.
    • sinon, il faut envisager des méthodes alternatives pour faire le lien C/C++ et PyPy. Il y a des projets vraiment sympa comme Reflex, cffi et autres (cf Writing extensions modules for PyPY) mais au final, on est dans une approche qui demande une réécriture partielle dudit module.

    Un certain nombre de projets sont compatibles PyPy . En plus de ceux que j'ai cité, on peut consulter la liste sur la page de compatibilité PyPy.

    Dans le cas particulier de NumPy, compte-tenu de son importance pour la communauté PyPy (ou en tout cas d'un de ses auteurs qui travaille dans la recherche scientifique), une réécriture spécifique pour PyPy a été démarrée sous le nom de NumPyPy. Celle-ci ne fait pas l'unanimité, les développeurs autour de NumPy arguant d'une part qu'un clone est moins pratique que l'original, d'autre part qu'il y a d'autres modules d'extensions indispensables pour fonctionner dans l'écosystème (matplotlib, SciPy…).

    Côté innovations, PyPy expérimente maintenant les Software Transactional Memory, c'est-à-dire gérer les accès mémoire d'un programme multi-threadé avec des transactions, comme dans une base de données. Une transaction pourrait être commencée, mise en œuvre ou annulée.

    L'approche est originale, et a pour but de se débarrasser du GIL. Pour l'instant, c'est très lent, il est prévu un ralentissement de 2 à 5 par rapport à du CPython de base, mais cela offre en théorie la possibilité de tenir une forte montée en charge. Pour l'instant, on est vraiment sur un sujet de recherche donc à voir d'ici quelques années.

    Il y a aussi un projet PyPy Sandbox qui permet d'isoler proprement un programme Python de son environnement. Les autres projets de ce type ont toujours échoué, Python offrant de multiples mécanismes de contournement de Sandbox. La force de PyPy est de pouvoir faire la Sandbox à un niveau très bas donc ça peut marcher. Pour l'instant, il y a peu de retour sur ce projet.

    PyPy est un beau projet, il a su tenir son cap à travers les années - faisait fi des sceptiques - et nous délivrer ses promesses. Aujourd'hui, c'est à la fois une implémentation de Python rapide et un framework de génération d'interpréteurs Python. Il a même été utilisé très sporadiquement pour d'autres langages. Il a plus été pensé pour un usage scientifique au départ (biais de son auteur) mais les modules qui fonctionnent officiellement bien en PyPy (django, SQLAlchemy, Twisted) font penser que c'est sur les serveurs d'application qu'il va finalement faire une différence…

    Le problème des modules d'extension est malheureusement rédhibitoire dans beaucoup de situations. Il est rare qu'un programme Python n'aie aucune dépendance vers une bibliothèque compilée et l'approche qui consiste à réécrire ledit module spécifiquement pour PyPy n'est pas toujours possible.

    Numba

    Numba est un compilateur JIT/LLVM pour Python, qui transforme des morceaux de Python annotés vers la chaîne de compilation LLVM.

    Le code doit être annoté explicitement avec des marqueurs du type @jit pour demander une compilation générale vers LLVM, soit en laissant LLVM générer le code à la volée en fonction des types passés à la fonction, soit en spécifiant dans les annotations les types à utiliser.

    Le site ne fournit pas de benchmarks explicites mais explique que les performances sont au niveau du C, le code Python étant effectivement traduit en assembleur. L'approche permet par exemple d'appliquer facilement des calculs sur des tableaux NumPy.

    C'est un projet spécialisé dans le calcul hautes performances. On ne parle pas ici d'optimisation générale d'un programme en Python, mais d'optimisation explicite d'une ou plusieurs fonctions avec compilation au démarrage du programme (et non à la volée).

    Unladen Swallow

    Ce projet lancé en 2009 par trois ingénieurs de Google avait l'ambition d'accélérer la VM Python par un facteur 5, en s'appuyant sur l'architecture de compilation JIT du projet LLVM. Une des contraintes était de garder une compatibilité totale avec CPython et notamment avec les modules d'extension Python écrit en C.

    Unladen Swallow est parti de la VM de CPython et a modifié la boucle d'exécution principale pour émettre du bytecode LLVM. Un programme Python était d'abord traduit en bytecode Python classique, puis transformé à la volée et selon les besoins dans la chaîne LLVM pour aboutir à du code assembleur.

    On avait donc à toutes les étapes du projet un compatibilité 100% avec les programmes Python existants, validée par une grosse suite de test multi-projets.

    Le projet a bien débuté, avec des gains intéressants au départ. Une PEP a aussi été acceptée par Guido van Rossum pour intégrer Unladen Swallow dans CPython (alors même que Unladen Swallow n'avait pas encore livré toutes ses promesses—cette décision a été un peu critiquée).

    Au bout d'un an, le projet a été arrêté et la PEP annulée. En cause, d'une part un nombre important de bugs dans la compilation à la volée dans la suite LLVM qui ont fortement ralenti la progression attendue. D'autre part, le manque d'adoption interne chez Google, les développeurs étant finalement assez contents de leur CPython de base.

    Un post d'un des développeurs résume la situation finale : Unladen Swallow Retrospective.

    Le projet a quand même produit 4 versions, chacune plus rapide, ainsi qu'une suite de benchmarks de référence pour Python, assemblant tout en ensemble de suite de tests et benchmarks existants.

    Le dernier né : Pyston

    Dropbox (chez qui travaille maintenant Guido Van Rossum) nous annonce donc un nouveau de projet de VM : Pyston.

    Quelques liens : l'annonce et le code

    Ce sera une implémentation par dessus LLVM et son JIT d'une VM Python complète. Le projet vise au départ une compatibilité Python 2.7, avec un backend x86 uniquement.

    Les développeurs sont partis de l'observation que dans le monde Javascript, les plus gros gains de performances ont été faits avec un compilateur JIT par méthode au lieu d'un tracing JIT qui va se concentrer sur des boucles. PyPy ayant déjà montré les gains qu'on peut avoir avec un tracing JIT, ils ont eu envie d'explorer l'autre versant de la compilation à la volée.

    Pyston est une implémentation avec LLVM de l'interpréteur Python. Le langage Python est compilé en byte-code LLVM et la chaîne de compilation LLVM prend le relai pour ce qui concerne les optimisations et la compilation JIT.

    C'est une grosse différence par rapport à Unladen Swallow qui se penchait sur l'optimisation de la VM CPython : on est là sur une réécriture complète. L'inconvénient est qu'il faut implémenter toute la logique du langage, un travail considérable : impossible de réutiliser l'infrastructure existante de la VM CPython. Les développeurs perdent aussi tout le savoir-faire qu'il y a déjà dans Python pour l'optimisation de la boucle d'évaluation.

    L'avantage plus ou moins théorique est que l'optimisation peut être plus transversale puisqu'on évite un étage de traduction.

    Le projet a aussi changé le garbage collector, passant du comptage de référence de CPython à un ramasse-miettes Conservateur. Sur les modules d'extension, le changement de Garbage Collector rendra ceux-ci nécessairement incompatibles et il y a un vague plan pour corriger cela.

    Les développeurs ont l'air conscients de l'ampleur du travail à effectuer, notamment pour se rapprocher des performances de PyPy. Pour l'instant, le prototype prend en charge un tout petit sous-ensemble du langage Python. Celui-ci aurait montré d'après les développeurs un bon potentiel en terme de gain de performance.

    Depuis le projet Unladen Swallow, LLVM a continué à s'améliorer et la partie qui avait posé tant de problème à Unladen Swallow a été réécrite. Les développeurs Dropbox espèrent donc ne pas subir les problèmes qu'a connu Unladen Swallow avec LLVM, ce qui tend à être confirmé par les résultats du projet Numba.

    Il faut être bien conscient que même si LLVM fournit une chaîne de compilation JIT de bonne qualité, il y a beaucoup de travail à fournir en amont : l'interprétation du langage Python, le traçage des types, l'activation sélective du JIT, la gestion de la durée de vie des morceaux compilés. Il y aura beaucoup d'ajustements à trouver sur la consommation mémoire globale et sur les conditions d'activations du JIT.

    Par la suite, ils envisageront une compatibilité Python 3, d'autres backends de génération de code, un meilleur Garbage Collector, l'intégration plus ou moins transparente des modules externes et même de se pencher sur le GIL.

    Commentaire de l'auteur

    Je précise que je n'y connais rien en compilation, LLVM ou JIT, j'ai juste plaisir à suivre de près ces projets très pointus.

    La rédaction de la dépêche a fait ressortir que les efforts d'accélérations de Python, même s'ils sont réussis, butent presque tous sur la prise en charge transparente des modules d'extension. C'est vraiment un gros point noir, difficile à résoudre, et pourtant majeur. Les programmes Python qui tournent sans dépendances sont à mon avis minoritaires. Même s'il y a un effort un jour pour recompiler facilement vers PyPy ou autres, on tombera toujours sur le module un peu spécifique à un domaine qui ne fonctionnera pas.

    Pyston, en ayant notamment changé le Garbage Collector, se range dans la même catégorie.

    Seul le projet Unladen Swallow avait une approche globale sur le sujet avec une compatibilité totale. Ça aurait permis à n'importe quel programme Python de bénéficier des optimisations JIT, et ce à un coût de migration négligeable.

    L'autre point qui me frappe au sujet de Pyston, c'est une certaine innocence dans l'approche (on pourrait presque dire naïveté). À leur lancement, les projets PyPy et Unladen Swallow avait une idée très précise et documentée de là où ils voulaient aller, articles de recherche à l'appui. On sentait qu'il y avait eu une analyse en profondeur du sujet.

    Pour Pyston, ça ressemble plus à « tiens, pour Chrome, le per-method-JIT a bien marché, on a qu'à faire pareil avec Python et LLVM » . Il y a de très beaux projets qui sont issus d'une telle approche, mais aussi énormément qui se sont plantés parce qu'ils ne savaient pas où ils allaient.

    Le choix de réimplémenter toute la VM Python est quand même très costaud, et implique qu'on ne verra pas de résultats utilisables avant au moins un an, voire plusieurs. Souhaitons en tout cas longue vie à ce projet et bon courage à leur développeurs !

    Post-scriptum

    Il y a plein d'autres efforts pour accélérer Python d'un façon d'un autre, autrement qu'en tapant dans la VM. Allez voir sur le site de Haypo la page qui y est consacrée si vous voulez en savoir plus, ou encore ses notes sur la vitesse de Python.

    Lire les commentaires

  • VGA Passthrough par vfio sur libvirt / qemu / kvm sous Debian Jessie : ca fonctionne ! (Journaux LinuxFR)

    Bonjour à tous,

    Beaucoup de progrès ont été fait ces derniers mois sur VFIO (https://www.kernel.org/doc/Documentation/vfio.txt) dans les dernières versions du noyau linux.

    Il devient maintenant possible d'attribuer un ou plusieurs GPU à une machine virtuelle sans pour autant avoir à patcher et à recompiler qemu. C'est stable et de plus en plus facile.

    En effet la procédure que j'ai suivie fonctionne sur une Debian Jessie out of the box… ou presque \_0< !

    Oui… il faut tout de même encore recompiler son noyau 3.13 pour y ajouter une seule et unique option de configuration : CONFIG VFIO_PCI_VGA qui doit être placé à y. Je pense que les équipes Debian ne vont pas tarder à l'activer par défaut ;)

    Donc si votre plateforme supporte l'IOMMU et que la virtualisation vous intéresse c'est le moment de s'amuser un peu :).

    Voici la procédure en question : https://bbs.archlinux.org/viewtopic.php?pid=1268413#p1268413

    Ce qui donne grosso modo :

    Recompiler un noyau avec CONFIG_VFIO_PCI_VGA=y.

    Configurer les adresses pci à exclure lors du démarrage de l'hôte avec pci-stub dans le chargement des modules initrd pour éviter qu'un driver linux soit chargé lors du démarrage pour les cartes qui seront dédiés aux machines virtuelles.

    Configurer une démarrage auto de vfio-bind avec un nouveau service dans system-d et les ids des cartes à lui passer.

    Pour de meilleurs performances mettre les disques et interfaces réseau en virtio.

    Faire un fichier de configuration pour libvirt pour la plateforme.

    Pour ce qui est de virtio, l'iso est à télécharger chez Redhat (http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/). Les pilotes doivent être fourni à l'installation des invités pour que le matériel soit reconnu. Le montage de l'iso est aussi dans le fichier xml d'exemple ci dessous.

    Que dire de plus, sinon que la machine pour laquelle le xml a été fait est est un Phenom X6 1055T sur une Gigabite 990FXA-UD3. J'ai pu lui passer une Nvidia GTX 275 et une Ati HD 3870 qui fonctionnent toutes les deux dans l'invité sous windows 7 avec l'accélération graphique sans freeze ou autre soucis. Elles encaissent de multiples reboot sans avoir à faire de bidouilles du type éjection du périphérique dans l'invité. Le xml en exemple concerne la Ati HD-3870.

    Bref le bonheur tout fonctionne à merveille.

    Pour ceux que ça intéresse voici le fichier xml que j'utilise pour libvirt / qemu. C'est lui qui m'a posé le plus de problème en somme :

    <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
      <name>windows7</name>
      <uuid>c9c5bd4a-5055-4a60-0bd4-411b8495b1ed</uuid>
      <memory unit='KiB'>6291456</memory>
      <currentMemory unit='KiB'>6291456</currentMemory>
      <memoryBacking>
        <nosharepages/>
        <locked/>
      </memoryBacking>
      <vcpu placement='static'>4</vcpu>
      <os>
        <type arch='x86_64' machine='pc-q35-1.7'>hvm</type>
        <boot dev='cdrom'/>
      </os>
      <features>
        <acpi/>
        <apic/>
        <pae/>
      </features>
      <cpu>
        <topology sockets='1' cores='4' threads='1'/>
      </cpu>
      <clock offset='localtime'/>
      <on_poweroff>destroy</on_poweroff>
      <on_reboot>restart</on_reboot>
      <on_crash>restart</on_crash>
      <devices>
        <emulator>/usr/bin/qemu-system-x86_64</emulator>
        <disk type='block' device='disk'>
          <driver name='qemu' type='raw'/>
          <source dev='/dev/disk/by-id/XXXX ou /dev/sdXXXX'/>
          <target dev='vda' bus='virtio'/>
          <address type='pci' domain='0x0000' bus='0x02' slot='0x04' function='0x0'/>
        </disk>
        <disk type='file' device='cdrom'>
          <driver name='qemu' type='raw'/>
          <source file='/media/medias/Windows7_Professionnel_N_ISO_64bit.iso'/>
          <target dev='hda' bus='ide'/>
          <readonly/>
          <address type='drive' controller='0' bus='0' target='0' unit='0'/>
        </disk>
        <disk type='file' device='cdrom'>
          <driver name='qemu' type='raw'/>
          <source file='/media/medias/virtio-win-0.1-74.iso'/>
          <target dev='hdc' bus='ide'/>
          <readonly/>
          <address type='drive' controller='0' bus='1' target='0' unit='0'/>
        </disk>
        <controller type='pci' index='0' model='pcie-root'/>
        <controller type='pci' index='1' model='dmi-to-pci-bridge'>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
        </controller>
        <controller type='pci' index='2' model='pci-bridge'>
          <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/>
        </controller>
        <controller type='ide' index='0'>
          <address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x1'/>
        </controller>
        <controller type='usb' index='0'>
          <address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x2'/>
        </controller>
        <controller type='virtio-serial' index='0'>
          <address type='pci' domain='0x0000' bus='0x02' slot='0x08' function='0x0'/>
        </controller>
        <controller type='sata' index='0'>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
        </controller>
        <interface type='bridge'>
          <mac address='52:54:00:a3:0a:7e'/>
          <source bridge='br0'/>
          <model type='virtio'/>
          <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x0'/>
        </interface>
        <serial type='pty'>
          <target port='0'/>
        </serial>
        <console type='pty'>
          <target type='serial' port='0'/>
        </console>
        <channel type='spicevmc'>
          <target type='virtio' name='com.redhat.spice.0'/>
          <address type='virtio-serial' controller='0' bus='0' port='1'/>
        </channel>
        <sound model='ich6'>
          <address type='pci' domain='0x0000' bus='0x02' slot='0x07' function='0x0'/>
        </sound>
        <hostdev mode='subsystem' type='pci' managed='yes'>
          <source>
            <address domain='0x0000' bus='0x00' slot='0x12' function='0x0'/>
          </source>
          <address type='pci' domain='0x0000' bus='0x02' slot='0x02' function='0x0'/>
        </hostdev>
        <hostdev mode='subsystem' type='pci' managed='yes'>
          <source>
            <address domain='0x0000' bus='0x00' slot='0x12' function='0x2'/>
          </source>
          <address type='pci' domain='0x0000' bus='0x02' slot='0x06' function='0x0'/>
        </hostdev>
        <memballoon model='virtio'>
          <address type='pci' domain='0x0000' bus='0x02' slot='0x05' function='0x0'/>
        </memballoon>
      </devices>
      <seclabel type='none'/>
      <qemu:commandline>
        <qemu:arg value='-device'/>
        <qemu:arg value='vfio-pci,host=01:00.0,bus=pcie.0,addr=07.0,multifunction=on,x-vga=on'/>
        <qemu:arg value='-device'/>
        <qemu:arg value='vfio-pci,host=01:00.1,bus=pcie.0,addr=07.1'/>
        <qemu:arg value='-vga'/>
        <qemu:arg value='none'/>
        <qemu:arg value='-cpu'/>
        <qemu:arg value='qemu64'/>
      </qemu:commandline>
    </domain>

    Bon week end à tous :)
    Christophe.

    Lire les commentaires

  • Chronique de Wikidata : Esprit Unix appliqué aux données, et plus encore. (Journaux LinuxFR)

    La fonctionnalité officielle de requêtage de Wikidata se fait attendre. Qu'à cela ne tienne, Magnus Manske, dont la liste de titre et d'accomplissements pour Mediawiki ferait pâlir un chevalier de la table ronde, a créé Wikidata Query, qui rend bien des services. Bon, il a aussi crée pleins d'autres outils, et il en avait marre qu'on lui demande parfois des fonctionnalités similaires sur les outils.

    Alors il a eu une idée de génie : fournir un shell Internet javascript accessible de partout pour composer les outils à disposition pour créer ses propres outils. Ça donne ça, et ça promet : description sur son blog

    Aussi à l'ordre du jour : enfin rendre accessible les différentes facettes des projets wikiquotes, wikipédias, wiki* en généralisant efficacement le système d'interwiki aux interprojets grâce à Wikidata qui intègre petit à petit les liens vers tous ces projets aux entités Wikidata, cf. ce mail.

    Révolution silencieuse, le projet fabrique les fondements de quelque chose de bien plus grand, il ne reste plus à faire en sorte que la communauté un peu réticente à ces aspects perçus comme technique et rébarbatif s'en empare en étoffant les fonctionnalité offertes. C'est en bonne voie.

    Lire les commentaires

  • Le Master Ingénierie du Logiciel Libre (I2L) et l'apprentissage (Dépêches LinuxFR)

    En 2006, l'Université du Littoral, le département informatique et de nombreux acteurs économiques du Logiciel Libre ont fait le pari de la formation et du Logiciel Libre et ont ouvert le premier et le seul Master Professionnel entièrement dédié aux logiciels libres. Après cinq ans de fonctionnement et devant le succès du Master, nous avons décidé de changer d'organisation et nous avons opté pour l'apprentissage en septembre 2012.

    La voie de l'apprentissage est aujourd'hui un excellent dispositif pour augmenter l'interaction entre formation et entreprise et pour mieux intégrer l'étudiant à une dynamique professionnelle. De plus, le Master I2L faisait déjà la part belle aux intervenants extérieurs en deuxième année, mais grâce à l'apprentissage nous avons étendu les interventions professionnelles sur les deux années afin de mener des projets d'envergure (et libres, naturellement) en partenariat avec les entreprises accueillants des apprentis.

    Le Master I2L est donc resté fidèle à sa démarche initiale : promouvoir le Logiciel Libre et ses technologies phares, faire prendre conscience des problématiques économiques, légales et organisationnelles.

    Dans ce cadre, l'objectif est donc la formation d'informaticiens de haut niveau capables de mener à bien la mise en place de solutions informatiques basées sur l'intégration de produits et technologies issus du monde du logiciel libre et d'accompagner les organisations dans des processus de migration vers les logiciels libres ou d'intégration de ces logiciels.

    En matière de compétences, les objectifs que nous cherchons à atteindre incluent entre autres :

    • la maîtrise des infrastructures logicielles issues du monde des logiciels libres ;
    • la maîtrise des environnements de développement et de déploiement du logiciel dans le cadre des logiciels libres ;
    • l'évaluation des solutions issues des logiciels libres et l'impact de leur intégration dans une organisation ;
    • la mise en place de processus de migration vers les logiciels libres ;
    • la gestion de projets et les spécificités de l'intégration des logiciels libres en matière de gestion d'un projet informatique (eXtreme Programming, méthodes agiles, …) ;
    • une connaissance des spécificités des logiciels libres en matière de droit, d'économie et de gestion.

    La nouvelle campagne de recrutement est ouverte. Attention, le nombre de places est très limitée : 13 apprentis. Mais si vous voulez conjuguer à la fois une formation universitaire et une réelle expérience dans une SSLL, c'est une superbe occasion.

    Lire les commentaires

  • Comment récupérer les sous-titres d'un enregistrement de la TNT: mini-tuto (Journaux LinuxFR)

    Bonjour,

    Un petit journal pour vous expliquer comment récupérer les sous-titres DVB des chaînes télé françaises et les convertir sous forme d'un fichier texte srt. J'ai pas mal galéré, donc je me suis dit qu'un petit tuto pourrait être utile.

    Pré-requis:

    je suppose que vous avez un fichier .ts contenant la video et les sous-titres. Normalement, vlc ou totem sont capables d'afficher ces sous-titres.
    Si vous découpez un fichier, attention au découpage, certains logiciels perdent la piste de sous-titres au découpage (par exemple dvbcut). Pour ma part, je coupe avec un dd if=$entree of=$sortie ibs=100000 skip=$taille count=$c.

    Installation:

    Vous aurez besoin du logiciel de reconnaissance de caractères tesseract, ainsi que d'outils de création de sous-titres: sous debian, ce sont les paquets tesseract, tesseract-ocr-fra, ogmrip.

    Je suppose également que java est installé.

    Ensuite, il faut récupérer une version très récente de ProjectX.
    La version dans les dépots a un bug

    http://forum.dvbtechnics.info/showthread.php?t=32024

    Une fois ProjectX.zip téléchargé, sauvez-le sous
    /usr/local/share/projectx/ProjectX.jar
    sudo mkdir /usr/local/share/projectx/lib
    cd /usr/local/share/projectx/lib
    sudo wget http://mirrors.ibiblio.org/pub/mirrors/maven/commons-net/jars/commons-net-1.3.0.jar

    Utilisation:

    Mettre le fichier .ts dans un sous-répertoire (pleins de fichiers vont être créés), puis lancer

    java -jar /usr/local/share/projectx/ProjectX.jar

    File: sélectionner le fichier ts

    Cliquer sur Prepare, puis Presettings,

    Onglet Output: tout décocher, sauf subpicture
    Onglet Subtitle: cocher "additional export as Vobsub", choisir la Fonte (je prends courier). Dans l'onglet "simulate DVB Subpictures IRD Color Model", je prends UkFreeview(mc). Vous pouvez tenter d'autres combinaisons, mais un mauvais choix peux amener à des sous-titres que le logiciel de reconnaissance ne saura pas traiter (en particulier le choix par défaut ne convient pas).

    On peut fermer l'onglet, et lancer le traitement avec la touche en forme de triangle. Dans la fenêtre de log, vous pouvez controler le nombre de sous-titres reconnus.

    On ouvre maintenant un terminal dans le répertoire utilisé:

    b="mon_fichier.sup"
    l="fra"
    subp2tiff --sid=0 -n $b
    for i in *.tif; do tesseract $i $i -l $l; done
    subptools -s -w -t srt -i $b.xml -o $b.srt

    Et c'est fini, il n'y a plus qu'à éditer le fichier .srt pour corriger les petites erreurs.

    Lire les commentaires

  • FusionForge 5.3 disponible (Dépêches LinuxFR)

    La cinquième version de la branche 5.3 a été la bonne. Après 4 release candidates, la communauté FusionForge a publié la version 5.3 de sa forge logicielle. Le terme « forge logicielle » est un chapeau regroupant tous les outils de génie logiciel nécessaires au cycle de vie d'un logiciel. Cela inclut habituellement un gestionnaire de source, un espace de publication de fichiers ainsi qu'un outil de suivi des tâches, des anomalies et des demandes d'évolution.

    FusionForge

    Sans vouloir revenir sur le long historique de FusionForge, quelques mots de rappel : FusionForge est la reprise du code communautaire GForge, lui-même hérité de Sourceforge. On retrouve parfois dans le code des lignes datant de 1999. Écrit en PHP5, FusionForge met à disposition l'ensemble des fonctions de génie logiciel attendues pour la gestion de projet, le pilotage et les outils techniques modernes. La conception de FusionForge offre une capacité de gérer un très grand nombre de projets. Certaines forges ont plus de 1000 projets et plusieurs milliers d'utilisateurs inscrits.

    Quelques exemples d'installation plus ou moins récentes et/ou importantes :

    Sommaire

    Fonctions majeures

    On peut citer comme fonctions majeures :

    • gestion multi-projet

    Chaque projet dispose de l'ensemble des outils activables en fonction des besoins. Un mécanisme de classement par typologie et de tags permet une recherche au sein des projets existants. Un greffon de hiérarchie permet d'organiser les projets par relation 1-n.

    • système de droits basé sur RBAC (gestion de rôles)

    Ce mécanisme permet de gérer finement les droits par projet et par outil permettant de rendre privé le projet en entier ou certaines parties uniquement. Il est possible de créer autant de rôles que souhaité ; les rôles étant cumulatifs, il est conseillé de créer des rôles orientés fonctionnels.

    • gestion de globalement tous les (D)VCS

    De CVS à Bazaar en passant par Subversion, Git ou Mercurial, avec un choix entre des accès en mode SSH ou plain HTTP. Une gestion des droits d'accès par utilisateur. Pour Git, la capacité d'avoir son propre clone personnel d'un projet permettant d'implémenter un workflow de type Gatekeeper.

    • gestion simple de documents

    Ajout de documents unitairement ou en masse, notification des actions réalisés sur un répertoire ou un fichier, gestion de la hiérarchisation de projets (via le greffon project-hierarchy), gestion d'actions en masse sur les fichiers, notion de corbeille, notion de documents privés et de documents soumis à validation, export au format ZIP, création en ligne de documents texte (intégration CKEditor).

    • suivi des demandes

    Permettant la création de multi-bugtrackers avec la gestion de workflow en relation avec les droits utilisateurs, l'ajout de champs personnalisés, intégration possible avec la gestion de code source via le greffon scmhook et les hooks commitTracker, construction de feuille de route transverse aux différents bugtrackers créés.

    • suivi de l'activité

    Chaque projet dispose d'une vue immédiate de l'activité par outil : demande, nouveau document, nouveau commit, … Ce tableau de bord d'activité permet en un rapide coup d'oeil de connaitre le dynamisme d'un projet. Un mécanisme de filtre offre la possibilité de s'intéresser à l'activité dans le temps et de limiter la recherche à un ou plusieurs outils.

    • forums

    Un système de forums standard est disponible, permettant la création de forums par thème (support, échange entre développeurs ou entre utilisateurs…)

    • news
      Système d'annonces par projet qui peuvent être mises en avant sur la page d'accueil de la forge. Pratique pour annoncer sur la forge la mise à disposition d'une nouvelle version d'un logiciel.

    • mailing-lists

    Intégration simple avec Mailman. Création, réinitialisation de mots de passe d'administrateur sont les fonctions élémentaires proposées. Un plugin spécifique mailman est disponible en remplacement de l'intégration de base.

    • système de widgets pour des pages projet et utilisateurs personnalisables

    Hérité de Codendi, ce système permet de construire la page d'accueil du projet ou sa propre page personnelle en utilisant des widgets classés par type : SCM, Tracker, Monitoring d'éléments (forums, documents), Documents, Administration.
    Certains plugins mettent à disposition des widgets complémentaires (On notera le plugin block qui laisse la possibilité d'inclure tout élément html, simplifiant ainsi l'inclusion d'éléments provenant d'autres sites. On pense ici à des boutons sociaux, des widgets type flattr, ohloh…)
    La mise en page des widgets est configurable avec des modèles prédéfinis ou un mode 100 % personnalisable.

    Construction du Layout

    • des greffons pour enrichir le tout
      • wikis dont MediaWiki,
      • gestion de captcha,
      • bibliothèques de hooks pour git, Subversion, Mercurial,
      • gestion de bloc HTML par page ou au sein de widget,
      • ajout d'onglets dans les différents menus,
      • intégration Jenkins,
      • … (et d'autres encore).

    La version 5.3 en chiffres

    Les chiffres significatifs :

    • 17000 commits
    • 14 contributeurs
    • 32 bugs fermés dont certains vieux de plusieurs années
    • 31 patchs fournis par la communauté d'utilisateurs
    • 21 demandes de fonctionnalité implémentées

    Les nouveautés de la version 5.3

    Côté frontend

    • gestion documentaire

    L'interface de la gestion documentaire avait subi un lourd lifting dans les versions précédentes avec une réécriture quasi complète de l'interface pour mettre en avant des fonctionnalités qui passaient totalement inaperçues.

    Avant

    Après

    Les informations du nombre de téléchargements, la taille maximum d'upload autorisée sont affichées. Un reporting du nombre de documents téléchargés est aussi disponible.

    Un nouveau widget pour les projets est aussi disponible. Il permet de suivre l'activité sur les 4 dernières semaines en affichant le nombre de nouveaux documents, de documents modifiés et de nouveaux répertoires.

    • gestion utilisateurs :

    La gestion des clés SSH a été réécrite permettant un meilleur suivi du déploiement des clés SSH.
    Les administrateurs peuvent être notifiés lorsqu'un utilisateur a validé la création de son compte.

    • suivi d'activité :

    De nouveaux items sont affichés dans le tableau de bord de l'activité d'un projet. Ainsi l'activité SCM (commits) est disponible pour les repositories de type GIT et SVN, idem pour les nouveaux répertoires créés dans la gestion documentaire.

    • suivi des demandes :

    Un système de votes basé sur les rôles (Il faut avoir l'acréditation de vote pour pouvoir voter sur un item des trackers) a été intégré. Il est enfin possible d'organiser sa roadmap en fonction de l'attente fonctionnelle des utilisateurs.
    Votes

    Le widget "MyArtefacts" a été amélioré pour permettre de suivre directement les items que l'utilisateur surveille.

    • SCM (Git, Mercurial, Subversion et al.)

    Le plugin Git a été enrichi pour permettre le support du protocole http en mode basic. Le support smart http est possible mais les fichiers de configuration fournis par défaut nécessitent une petite adaptation.
    La gestion de multiples dépôts pour un projet est aussi disponible pour Git et de nouveaux hooks sont disponibles via le plugin scmhook.

    Le plugin Mercurial a vu l'intégration d'un patch important permettant son utilisation en tant que type de repository. Navigation en ligne via hgweb, intégration de hooks via la bibliothèque de hooks du plugin scmhook.

    Le plugin Subversion a lui eu le droit à des nouveaux hooks du plugin scmhook.

    Côté Dev

    • jQuery a été choisi comme framework Javascript standard. L'ancien empilement prototype + scriptaculous + jQuery + javascript spécifique a été nettoyé et réécrit. Résultat : des pages plus légères, moins d'incompatibilité avec les navigateurs. Toutefois, certaines portions de code restent encore en Javascript spécifique.
    • tous les graphiques ont été réécrits en utilisant le greffon jQuery jqPlot. La dépendance à l'ancienne bibliothèque jpgraph a été supprimée. Fusionforge dispose enfin d'une bibliothèque moderne et libre pour générer ses graphiques. AvantAprès Cette réécriture a, entre autre, permis l'inclusion d'un meilleur rendu des graphes de type Gantt avec l'affichage des dépendances entre tâches en utilisant le greffon jQueryGantt Gantt Chart
    • le stockage des fichiers joints à un tracker et les documents est à présent fait sur le système de fichiers et non plus en base. La charge de base de données est réduite drastiquement. Il reste encore les fichiers joints au forum qui seront rapidement migrés de la base de données vers le système de fichiers.
    • le code a été nettoyé. Les variables inutilisées ont été chassées à coup de balai. Les erreurs et warnings PHP, les erreurs de syntaxe HTML ont subi la foudre des développeurs.
    • d'anciens plugins ont été intégrés dans des structures de plugin plus polyvalentes. Les plugins type svncommitemail, svntracker ont été intégrés au sein du plugin scmhook.
    • certains cronjobs ont été revus et améliorés profitant de fonctionnalités spécifiques provenant de la souche Debian. (Gestion des répertoires home projets et utilisateurs, gestion des vhosts par projet)

    La communauté et le futur

    La version 5.3 laisse apparaître une augmentation des contributeurs à FusionForge. En effet plusieurs personnes ont rejoint l'équipe FusionForge depuis quelques années et le dynamisme de la communauté commence à porter ses fruits. L'intérêt de FusionForge est grandissant. La communauté est de plus en plus sollicitée sur des problématiques de migration du parc d'installations anciennes de GForge que cela soit des versions "gratuites" ou des versions "Advanced Server". Le nombre de téléchargements des sources a été multiplié par 2. C'est sans compter les installations réalisées via les paquets des distributions comme Debian.
    D'autres projets libres de Forge ont décidé de rejoindre la communauté FusionForge. C'est le cas de Savane qui fusionne avec FusionForge.
    Vous aussi, vous pouvez devenir acteur de la communauté FusionForge. N'hésitez pas à rejoindre le canal IRC (freenode #fusionforge), tester FusionForge, signaler les fonctionnalités qui vous manquent. FusionForge avance grâce à vous.
    La communauté se tourne donc vers le futur et travaille d'ores et déjà sur les nouvelles fonctionnalités ainsi que la réécriture de parties importantes du code.
    En tant que contributeurs majeurs à cette version, on peut lister dans l'ordre alphabétique :

    Cette dépêche est le résultat d'un travail collaboratif avec la communauté FusionForge. Merci aux différents contributeurs disponibles sur le canal IRC (freenode #fusionforge) : Beuc, Lo-lan-do, nerville

    Lire les commentaires

Euclide avait-il raison raison de définir le nombre :
collection d'unités de même espèce ?
-+- Voltaire, Questions sur l'encyclopédie -+-