jeudi 26 février 2009

Loi Création et Internet : Black Out

Je suis bien conscient que je parle rarement politique ou économie sur ce modeste blog. Je suis aussi conscient qu'il y a probablement, en ces temps de crise, moultes sujets plus importants : des 90000 nouveaux chômeurs en France en Janvier, en passant par les réformes dans l'éducation, la recherche ou les collectivités territoriales, les petits soucis dans les colonies, ou ces pauvres moines tibétains dont on ne respecte pas tellement les droits (de l'homme).

Mais en bon geek occidental égocentrique que je suis, je me dois de faire un petit billet contre cette espèce de bouse malsaine que d'aucuns nomment la Loi Création et Internet (dite loi HADOPI). Je ne refais pas ici le topo sur cette loi en cours d'adoption que bien d'autres auront bien mieux expliquée (cf les liens ci-dessous - pour résumer : liberticide, techniquement stupide et fondamentalement inefficace).

Simplement, en bon mouton engagé, je participe d'une part au black out, qui consiste à peindre son site personnel en noir (vous remarquerez que de par mes compétences et mon amour assez relatifs pour le CSS, seule ma bande latérale se retrouve partiellement noircie). D'autre part, je viens de signer à l'instant la pétition lancé par le magazine informatique SVM (qui rappelons-le, ne sont pas d'affreux gauchistes aux relents bolchéviques, le couteau entre les dents, etc... NI -et ça aussi c'est important- des geek boutonneux de libristes utopistes qui font pleins de trucs illégaux et gratuits avec leurs ordinateurs, tellement qu'ils s'en servent bien.).

Bref, dans quelques mois, quand vous serez sous les verrous parce que votre voisine de 12 ans a craqué la clé WEP (15 à 30 min actuellement) de votre DuconBox pour télécharger illégalement le dernier single de Laurie, vous pourrez vous aussi, vous la jouer prisonnier politique si vous prenez vos disposition maintenant. A bon entendeur, je vous laisse de la lecture :


Une dernière chose : comme le prédit la prospective assez inquiétante, cette loi et les moyens qu'elle envisage ne seront pas efficace contre les geeks, les hackers et les libristes, bien qu'elle les fasse passer d'office pour des petits bandits. Que tout soit bien clair entre nous, l'Etat, en France, actuellement, n'a absolument pas les compétences en informatique (mais pas que) nécessaires pour faire appliquer cette loi (pour preuve, la récente infection par Conficker de réseaux de l'armée). Et on ne fait pas voter une loi sans volonté de la faire appliquer.

mardi 24 février 2009

Diffusion du libre

Je ne sais pas si c'est une fausse impression de ma part, mais j'ai l'impression que la notion de logiciel libre est plus connue et mieux comprise par le grand public qu'il y a quelques années. Bien sûr, il reste du chemin à parcourir et de la "propagande" à faire, mais il me semble qu'il y a évolution (même si "libre" reste trop souvent synonyme de "gratuit").
Essayons de synthétiser les vecteurs de cette évolution, ou du moins, les facteurs contribuant le plus significativement à la propagation de la "culture libre" (au sens plus large qu'uniquement logicielle).

Vecteurs de diffusion de la "culture libre"

Bon, je passe sur Internet. C'est évidemment la clef de la naissance, l'évolution et la réussite du libre, depuis le départ. D'ailleurs, Internet et le web sont construits principalement sur des technologies (et des principes) libres ou du moins ouvertes : HTTP(S), SSH, CGI, FTP, Javascript, PHP, etc... (certes, il y a aussi le Flash...).

La fondation Mozilla, via Firefox a été et reste un acteur très important de propagation du libre. Même si la fondation est assez souvent critiquée par la communauté du libre, pour des raisons aussi diverses que de validité variable, elle mérite que l'on reconnaisse le bénéfice de ses actions.
D'abord Firefox est un bon à très bon produit, surtout comparativement à Internet Explorer. Pour autant, je ne pense pas que ce soit le logiciel libre le plus répandu auprès du grand public (les chiffres me manquent pour vérifier ça : si quelqu'un connaît une bonne source de statistiques à propos du libre, je suis preneur) : d'une part, Internet Explorer est encore majoritaire en terme de visites web, et d'autre part, on a tendance à oublier pas mal de programmes, énormément employés (en bonne partie de par leur gratuité) : VLC, eMule, Vuze (anciennement Azureus), The Gimp ou Java... La différence avec ces logiciels, est que Mozilla met largement en avant le côté libre de Firefox (et de ses autres produits), ce qui n'est pas le cas sur ces autres. C'est assez similaire sur la suite OpenOffice de Sun : le côté libre/open source est souvent souligné dans les pubs.

Wikipédia a, je pense, indirectement, mais fortement, contribué à diffuser la culture libre. Le principe d'encyclopédie collaborative est bien connue du public. Le droit de réutilisation du contenu est également bien admis (bien que les conditions de rediffusion imposées par la license de documentation libre GNU (GFDL) le soient nettement moins...). Sur les principes, le logiciel libre et les règles de Wikipédia sont très proches : tout le monde peut participer/contribuer, réutiliser, diffuser, etc... C'est en bonne partie Wikipédia qui fait connaître les licences Creatives Commons via Wikimedia Commons (de plus en plus de sites les mettent en avant cependant, comme Flickr récemment). Ces principes étant compris pour l'encyclopédie, ils deviennent plus clairs lorsqu'ils sont expliqués pour les logiciels.
Par ailleurs, la communauté libre utilisant Wikipédia de façon soutenue, les projets libres sont souvent mis en avant dans les articles du site (parfois de manière subjective et un peu pénible d'ailleurs : je ne pense pas qu'on ait besoin de ça...), ce qui permet une certaine forme de publicité : la pub par la doc (un logiciel (ou autre d'ailleurs) existe-t-il vraiment s'il n'a pas d'article sur Wikipédia ?).

Ensuite, phénomène commercial plus récent, l'apparition des netbooks ou ultra-portables a contribué à faire connaître le logiciel libre et surtout Linux (pas forcément en bien cependant) à un public de néophytes (à commencer par les vendeurs informatiques eux-mêmes...). Je ne suis pas persuadé que les gens aient bien compris la notion de logiciel libre en achetant un eeePC sous Xandros, mais ils ont au moins compris la différence de prix avec Windows... c'est déjà ça (c'est l'argument principal de vente de Linux, hormis la moindre consommation mémoire par rapport à Vista ou même XP).
Par contre, j'ai des doutes plus que prononcés sur l'efficacité de la "pub" des netbooks pour Linux. En effet, les 2 distributions majeures sur ces machines (majeures car les plus "vendues") sont Xandros (eeePC) et Linpus Linux (Acer Aspire One) : ces 2 distros sont... nazes. Bloquées, interfaces trop simplifiées, modification constructeur de packages "basiques" (sous Linpus : Firefox, Pidgin notamment...)... Bref, je les trouve extrêment mauvaises, assez loin de l'esprit de départ de Linux, et forcément décevantes pour le grand public issu de Windows XP. Il y a cependant des exception comme la Suse SLED sur le MSI Wind par exemple, ou d'autres sous Xubuntu.
Il faut par contre noter que l'apparition de ces machines a pas mal boosté la communauté et les entreprises sur le développement, la relance, ou l'adaptation de distros adaptées : gOS, Xubuntu (mon choix sur Aspire One A150 : XFCE devrait vraiment être relancé par les netbooks), Ubuntu Netbook Remix, Joli Cloud (à venir ?), Android (pas mal de boulot a été fait pour récupérer le dev effectué pour les OS de mobiles ou PDA)... plus l'adaptation matos pour les "grandes" distributions existantes : OpenSuse, Ubuntu, Mandriva, etc...
Je suis mal renseigné sur les BSD, mais il serait intéressant de savoir comment ces communautés ont réagi par rapport à ces nouvelles machines.

Bien sûr, il serait injuste de ne pas parler ici du travail constant fait par la communauté dans son ensemble : développement bien sûr, mais aussi et surtout : rencontres, stands, aide, forums, install parties, propagande, pétitions, etc... C'est un boulot souvent ingrat, faut reconnaître le mérite des gars et des gyals qui font ça (bénévolement en général, rappelons-le).
C'est aussi eux qui diffusent l'information lorsque le logiciel libre est adopté par une grande entreprise ou mieux, par une administration de l'état : c'est souvent un bon coup de pub pour le libre.
Plus méchant, les procès contre les entreprises ne respectant pas les licences libres (en France on a eu Free notamment pour du soft intégré dans la Freebox si je me souviens bien) ou contre les monopoles (Microsoft, bien souvent... mais bientôt Google probablement) font parler du libre, et sont toujours une occasion d'expliquer les fondamentaux.

Cela dit, tous ces facteurs doivent, selon moi, à terme devenir de moins en moins significatifs. Même la partie "éthique" du LL passe, à mon avis, au second plan derrière la qualité logicielle. Je ne parle pas ici d'une quelconque norme industrielle bancale : je parle simplement du fait que de par leur nature, les projets libres, ou open sources (sous réserve d'être suffisament "importants") doivent logiquement être d'une qualité supérieure à leurs homologues propriétaires (et à fortiori freewares). Cela peut se constater déjà sur de nombreux exemples : Firefox est probablement le meilleurs navigateur web actuellement (même si Opéra ou Chrome se défendent), la JVM est toujours probablement la meilleure machine virtuelle sur le marché (depar sa portabilité : faut se méfier de .Net sur d'autres aspects...), les langages libres sont systématiquement meilleurs que leurs homologues propriétaires (troll ?), OpenOffice arrive petit à petit au niveau d'offre de Microsoft Office, en science de nombreuses libs sous GPL ou autre dominent l'écosystème (Lapack entre autres...), Linux (troll ?), etc... Je n'ai pas parlé ici des domaines que je connais mal comme le P2P ou la messagerie instantanée où il y aurait des choses à dire...
C'est à mon avis sur ce point qu'il faut appuyer encore et toujours pour convaincre. Il faut croire que Microsoft a droit à l'erreur avec Vista, les migrations d'OS ayant surtout profité à Mac OS et à... Windows XP (!), mais dans le libre, un nouvel utilisateur déçu, c'est un utilisateur perdu ad vitam aeternam. Au boulot ! ^^


Notes :
Je comptais initialement faire un article pour présenter quelques logiciels libres que je considère comme étant injustement méconnus du grand public (Thunderbird, Pidgin, Sage et Freemind probablement). M'étant un peu enflammer sur la diffusion du LL, j'ai pas envie de coller le reste à la fin, ça viendra dans un prochain article.

Je ne prétends aucunement faire autorité sur les questions évoquées ci-dessus (même si mon "style", je m'en rends compte et m'en excuse, peut le laisser penser) : c'est plus un avis personnel, pour invitation à la réflexion et à la discussion sur ces sujets (les commentaires sont grand-ouverts).


Crédit images, par ordre d'apparition : libre.taxi par Gabriel Juan (utilisation commerciale interdite),

jeudi 19 février 2009

Programmation poétique - Chapitre VII : Ton langage pue du cµl n°2

Disclaimer : Attention, article violent : âmes sensibles, femmes enceintes et handicapés du second degré s'abstenir. Malgré ses côtés provocateur, insultant et inutilement vulgaire, cet article se veut humoristique et satirique : l'auteur du présent article ne saurait donc être tenu pour responsable des symptômes suivants suite à sa lecture, même partielle (liste non-exhaustive, donnée à titre d'exemple) : nausées, vomissements, chocs anaphylactiques, chutes de phalange(s), déclenchements de diabète, crises d'épilepsie, ruptures de certitudes programmatiques, constipations, inflammations du nerf trollien, asthmes, infections du compilateur et céphalalgies.

~=o=~

Je me suis fait rouler sur le pied par une voiturette sans permis, ma nouvelle voisine a l'orgasme facile, bruyant et à répétition (à 2H30 du matin en semaine), mon responsable au boulot estime que prendre des vacances au bout de seulement 12 mois de travail, "ça fait pas sérieux", mon PC s'éteint tout seul sans prévenir lorsque j'appuie sur 4 chiffres d'affilé, Facebook vient de décider qu'il posséderait mes données perso et celles de mes 3 seuls amis même après ma mort et la leur (ah tiens, non finalement ?) et un pigeon s'est laissé allé sur ma modeste Merco (neuve) en sortie de station de lavage.
Bref je suis pas jouasse.
Du coup, je vais cracher sur quelque chose pour me détendre : les langages de programmation par exemple. D'une part parce que j'ai mis "n° 1" sur l'article précédent, donc faut bien continuer la série (sinon c'est pas une série, c'est un article tout seul : on se comprend ?) et d'autre part, pour rappeler au monde que moi aussi je sais troller comme un bon gros geek moyen (surtout qu'on cherche à m'asticoter en ce moment...).
Donc, ton langage pue du cµl...



C

Le C pue du cµl.
Ah le C ! Ce beau langage venu des temps lointains... Ses pointeurs, ses références, ses allocations mémoires... Si les performances ont un prix, en C, c'est celui d'un sol intégralement recouvert de peaux de bananes trempées dans l'huile d'olive sous un coulis de vaseline tiède (ça glisse quoi...).
Ah, les instructions préprocesseur, et leur infinie élégance... Ah, le typage faible ! Ah, le paradigme procédural pur de chez pur ! (Oui, je suis au courant, c'est possible d'implémenter la POO en C. Un petit exemple dans un code en production s'il vous plait ? Merci.)
Le plus marrant avec le C, c'est que ses bonnes performances deviennent franchement une malédiction quand on voit tous les jeunes tanchards muants qui s'y frottent. "Attends, han, ton serveur le fait pas en Python/Ruby/Perl, t'es fou, c'est vachement plus speed en C !". Ben voyons mon cochon : ton code sera seulement 3 à 5 fois plus long, et tu gagneras bien 5 milisecondes par requêtes (sur 1 seconde, c'est vrai que ça vaut bien le coup pour un projet amateur...), et tu mettras juste 10 fois plus de temps à le coder. Mais soit, il faut bien que jeunesse se fasse (casser les dents à coup de null pointer exception).
Bon, je reconnais qu'il est difficile d'attaquer le C en tant que langage sur le côté technique. C'est un langage globalement bon, la preuve est qu'il est majoritairement utilisé dans... Attendez voir ! C'est marrant ça : dans le monde du logiciel libre, le C doit (devait ?) couvrir environ 95% du pool de code sous licence approuvée par la FSF. Genre tout GNU (sauf Emacs en LISP, hahaha. Hum...), la majorité du noyau Linux, les gestionnaires de fenêtres, les BSD, and so on... "Pire", la majorité des compilateurs et interpréteurs des langages modernes sont implémentés (ou du moins pour la version standard) en C : gcc, gfortran, gnat (Ada95), g++, Io, MRI (Ruby), CPython, Bigloo (Scheme) and so on... En quoi c'est un problème ? Attendez les gars, on ne peut pas décemment cracher pendant 20 ans sur Microsoft pour sa position dominante, son monopole et blablabla et laisser une technologie, aussi bonne soit-elle rester trop majoritaire ("position dominante", souvenez-vous !) dans son propre écosystème logiciel, si ? Ben si apparemment. Cela dit, vu le temps qu'il a fallu au monde libre pour se mettre à critiquer Google et Apple, on est plus à ça prêt (c'est vrai que c'est bien plus rigolo de se br4nler la nouille des heures sur les différences entre la GPL V2 et V3...). C'est quand même pas si compliqué de recoder KDE en Erlang, m3rde !
Le C sent le cµl dépassant son allocation mémoire (error at runtime).


Python

Le Python pue du cµl.
Même si c'est pas vraiment de sa faute... Bon alors d'accord, on peut critiquer l'indentation obligatoire. Et c'est vrai que c'est trop laid (même si l'indentation "çay b1en"). On pourrait aussi contester le principe du "One and only one way to do it". Et de fait, je peux vraiment pas blairer cette approche. On pourrait, trouver les notations syntaxiques vraiment moches : elles le sont. Enfin, on peut légitimement trouver que la POO est quand même pas glorieuse.
Mais tout cela n'est que broutille face au réel problème de Python. Je parle bien sûr de sa communauté. En effet, la communauté Python possède probablement en son sein le plus grand nombre d'intégristes barbus pré-pubères (la barbe est donc un pastiche) que le monde ait jamais connu.
L'occupation principale du pythoniste convaincu (notez que je ne généralise pas : il y a également des pythonistes pas convaincus, ainsi que des pythonistes asthéniques), plutôt que produire du code Python, est de déféquer dans la bouche des gens pratiquant d'autres langages. Leurs cibles principales sont bien sur les codeurs Perl et Ruby, mais ils s'attaquent également avec la plus grande vaillance à d'autres langages plus costauds (mais néanmoins olfactifs) tels que le C++. Certes ce comportement se retrouve dans bien des communautés de devs... Mais ça se ressent sans doute plus chez les pythoneux. Moi, de mauvaise foi ? Cette page de Wikipédia devrait vous convaincre...
Ces "zealots" ne s'arrêtent cependant pas à de simples attaques directes contre d'autres langages. Inspirés par la propagande faite pour leur dialecte bien aimé par leur grand frère Google ("Nan, mais Python C tro bien : c'est utilisé par Google et la NASA !!!". Voui voui voui...), ces talibans du code source pousse le vice jusqu'à désigner Python comme LE langage implémentant un logiciel donné. Et là ça devient drôle : quelques exemples. Sur Wikipédia tout d'abord, on retrouve fréquemment des programmes "implémentés grâce au langage Python" (merci vieux !). Jusque là pas de problème. Cela dit, je doute qu'Abaqus (voir historique), code de calcul en mécanique solide, soit codé intégralement en Python. La première fois que j'ai lu ça, j'avoue que j'ai bien rigolé... Dire qu'il y a des gars qui ne doutent pas une seconde qu'un code de simulation numérique "lourd" (c'est régulièrement utilisé professionnellement pour passer des calculs, sur clusters, d'une durée de 3 à 10 jours...), vieux de plusieurs décennies, puisse être entièrement en langage de script... (même s'il est vrai que leur utilisation est et sera, je l'espère, de plus en plus importante dans le domaine). Autre exemple, cet article chez Wired (magazine de geeks pourtant réputé - article un peu daté) désigne le logiciel libre de mathématiques Sage comme étant codé en Python. Ben tiens... C'est rigolo, parce que l'intérêt principal du libre (hormis que c'est quasiment toujours gratos...), c'est d'avoir accès au code source. Du coup, je suis allé voir. Hé bien les enfants, c'est pas faute de ne pas l'avoir écrit :

Sage has significant components written in the following languages: C/C++, Python, Lisp, and Fortran. - README.txt

On peut également légitimement penser qu'il utilise pour la partie build/admin le Perl et le M4, vu que les interpréteurs associés sont nécessaires à la compilation du programme... Du coup c'est pas entièrement en Python ? Etonnant... c'est pas ce qu'il y a écrit sur Wikipédia là encore...
Dernière chose, ces fameux zealots ont souvent une excuse pour être aussi souvent ridicules : ce sont des (gros) n00bs. Python est très populaire (ça c'est pas un reproche), du coup il est souvent conseillé aux jeunes débutants en programmation par leurs aînés. Ces petits bons-à-rien prenant exemples sur leurs aînés sus-nommés (symbole du père, Freud, tout ça...), ils crachent eux aussi sur les autres langages et sont d'une mauvaise foi égale justement à la foi qu'ils ont en leur sacro-saint serpent (cf. la secte dans Conan le barbare).
Le Python sent le cµl de jeune intégriste reptilien qui indente.


Visual Basic

Le Visual Basic pue du cµl.
Rassurez vous, je vais faire court. Tout d'abord, précisons que tous les Basic puent du cµl : Visual, Pure, Small, Dark, for Application... Tous. Mais c'est sur le Visual, puisque le plus répandu, que je vais m'étendre (au sens figuré).
"Visual" tout d'abord. "Visual" ça craint parce que c'est Microsoft. J'insiste pas : j'aime pas tirer sur les ambulances, même quand elles sont en or massif avec des jantes en caviar. Mais "Visual" ça craint aussi parce que ça évoque GUI. Et la GUI est à la programmation ce qu'une bonne claque dans la gµeule est à la vie en général : c'est parfois nécessaire, mais c'est jamais agréable.
Ensuite il y a "Basic". Je rappelle qu'au départ, le Basic est basé sur le Fortran (cf article précédant de la série). Alors s'il est vrai que c'est dans les vieux chaudrons qu'on fait la meilleure confiture d'oignons, faut quand même faire gaffe à quel chaudron on prend... Non, ce langage est simplement médiocre.
Le vrai côté puant du Visual Basic, c'est, je pense, qu'il s'agit d'un langage propriétaire. En soi, c'est abbérant que des développeurs (et surtout, les entreprises qui les emploient) osent baser leur propre produit sur une technologie sur laquelle ils n'ont aucun droit, ni aucun contrôle (que ce soit au niveau de ses spécifications ou de son évolution). C'est probablement ce qui explique les problèmes (doux euphémisme) liés aux changements de version (VB6, VB.Net, etc...) et le passage des applications au C#. Sur ce point, je crois que c'est même plus un problème d'odeur : c'est le stade de l'arme chimique (mortelle ?).
Je ne pense pas qu'on puisse parler de communauté pour le VB (pas au même sens que pour les langages libres en tout cas). Pour les autres Basics, elles sont majoritairement composées de jeunes pinpins boutonneux voulant (TOUS !) coder un MMORPG ("mieux que WoW") seuls, et après 2 (longues) semaines d'apprentissage. Je suis de tout coeur avec vous les gars.
Visual Basic sent le cµl de Big Billou (qu'est pas t'a toi !).

~=o=~


Que les petits oubliés de la procédure se rassurent, ceci n'est qu'une seconde partie : je m'amuse bien en trollant gratuitement, je compte bien continuer. Sur ce, j'ai un voisin à castrer (et p't'ê't bien un manager...) avant de débuter à la chasse au pigeon (et p't'ê't bien au manager...).

lundi 16 février 2009

Programmation poétique - Chapitre VI : Ton langage pue du cµl n°1

Disclaimer : Attention, article violent : âmes sensibles, femmes enceintes et handicapés du second degré s'abstenir. Malgré ses côtés provocateur, insultant et inutilement vulgaire, cet article se veut humoristique et satirique : l'auteur du présent article ne saurait donc être tenu pour responsable des symptômes suivants suite à sa lecture, même partielle (liste non-exhaustive, donnée à titre d'exemple) : nausées, vomissements, chocs anaphylactiques, chutes de phalange(s), déclenchements de diabète, crises d'épilepsie, ruptures de certitudes programmatiques, constipations, inflammations du nerf trollien, asthmes, infections du compilateur et céphalalgies.

~=o=~

Un mois que je dors plus, ma copine m'a lâché pour un orang outang ingénieur commercial, j'en suis au 6ème Blue Screen of Death de la journée, mon manager a été obligé de baisser mon salaire à cause de la crise (le pauvre, il va pas pouvoir s'augmenter cette année), ma gangrène au pied me fait un peu de soucis ses derniers jours, et en plus, à midi, c'était navets ou blettes.
Bref je suis pas jouasse.
Du coup, je vais cracher sur quelque chose pour me détendre : les langages de programmation par exemple. D'une part j'en ai croisé quelques uns ces derniers temps, et d'autre part, ils sont vachement moins forts à la bagarre que la plupart des gars sur lesquels je pourrais avoir envie de déverser ma bile (et accessoirement, il a été prouvé qu'ils n'appréciaient pas le contact de la salive ou de la bile d'autrui. C'est pas le cas de toutes les personnes sus-non-nommées...).
Donc, ton langage pue du cµl...


Fortran

Le Fortran pue du cµl.
Pour rappel, le Fortran n'est pratiqué que par de vieux clampins de scientifiques qui codent comme des pieds de cul-de-jattes malgré leur expérience paléontologique : goto partout, noms de variables et de fonctions d'un demi caractère, effets de bords, commentaires inexistants ou ridicules... que du bonheur. Le Fortran n'est pas sensible à la casse : c'est pas chouette ça ?
Il faut par contre porter au crédit des gens bossant sur ses compilateurs un exploit considérable : il n'existe absolument aucune norme pour la compilation de ce langage. Ce qui veut dire que l'on a aucune garantie que les résultats (résultats numériques j'entends : que du calcul en Fortran, on va pas non plus faire du web avec cette bouse !) donnés par un exécutable pondu par un compilo donné soit obtenus à nouveau avec un exe pondu par un autre compilo. Je rappelle aux enfants ici présents que le Fortran a grosso-modo 40 ans, ce qui laisse un rien de temps pour mettre en place ce genre de chose...
Je fais l'impasse sur les normes de codages moches, les variables globales COMMONS, la gestion des chaînes de caractères, la tentative lamentable d'insertion de la POO dans les versions récentes, les formats, les variables implicites, etc...
Le Fortran sent le vieux cµl.


OCaml

L'OCaml pue du cµl.
C'est un langage d'universitaires élitistes qui se la pètent avec leurs "tuples", "motifs", "inférence"... bref que des termes que personne ne b1te. Déjà que c'est assez fastidieux à lire, ça n'utilise que des concepts "rares" pour faire joli et gagner trois lignes de code, ou un effet de bord, voire un +1 en "beauté mathématique".
OCaml est sensé être super-méga-performant-pas-loin-du-C-et-du-Fortran, mais bizarement, personne ne l'utilise en calcul scientifique lourd... c'est d'autant plus c0n que c'est à peu prêt le seul endroit où ça sert, les perfs. OCaml ne supporte pas la surcharge des opérateurs, du coup pour aditionner 2 flottants, il faut utiliser l'opérateur "+." : c'est pas vilain ça ? La communauté OCaml est... non, en fait y en a pas.
Le truc probablement le plus ridicule : systématiquement, lorsqu'un débutant pose une question sur la POO en OCaml, il se voit répondre que c'est pas important, ou que c'est un peu spécial, ou que c'est pas utile dans son cas... A quoi ça sert de mettre "Objective" dans le nom, bande de blaireaux ?
L'OCaml sent le cµl usé sur les bancs de la fac.


Groovy


Le Groovy pue du cµl.
Déjà, son nom est naze. Ensuite, il ne tourne que sur la JVM, et ça, "çay mâl" (cf Java). C'est lent, hybride et pas beau. On verse chaque fois sa petite larme lorsque :

"toto".class

nous renvoie :

class java.lang.String

Pourquoi pas "java.jre_v1056.j2ee.lang.stdlib.groovy.String.gString" ? C'est vrai, quoi, ce serait beaucoup mieux précis plus bien !
Malgré tous les efforts de Sun, Groovy n'est pas populaire (c'est pas parce que ya trois c0uillons sous Grails...). Et de fait, ce langage ne sert à rien : JRuby, Jython, Javascript et compagnie sont déjà là (et mieux).
Groovy sent le cµl moitié Java, moitié Ruby et re-mi-ours derrière.


Io

Le Io pue du cµl.
Il faut franchement avoir le sens marketing d'une mouette albanaise (qui ne vend pas beaucoup de brosses à dents) et la maîtrise des outils de recherche web d'un crabe des îles Kouriles (qui, rappelons-le, n'ont pas encore l'ADSL) pour avoir l'idée sublime de nommer son langage "Io" (prononcé "Ayo" comme les rappeurs quand ils font "Ayo ayo, Wass'up N1gga !"). Deux lettres. Pratique pour Google ! Surtout quand ces deux lettres signifient "Input/Output", terme un tant soit peu employé en programmation... Crét1n...
La documentation fait l'impasse sur énormément de méthodes de base : pratique pour débuter !
A ce jour, il est possible d'estimer la taille de la communauté des utilisateurs de Io grâce à son reddit. Celui-ci compte 24 abonnés (3172 pour Ruby à titre comparatif). Il est cependant fortement probable que certains soient des redditeurs débutants s'étant trompés en s'y inscrivant. Une petite vingtaine donc.
Ah oui : il n'y a quasiment aucune lib, et les seules existantes ne marchent pas vraiment bien... mais bon, comme tout le monde s'en br4nle...
Io sent le cµl de vache grèque abandonnée.


Java

Java pue du cµl.
Java, c'est avant tout une machine virtuelle permettant la portabilité des applications, blablabla... Cela dit, vu que le C tourne toujours à plus d'endroit que la JVM, et bien... avant de sentir mauvais, le Java ne sert surtout à rien, à part à faire dresser le k1k1 des chefs développeurs (ceux qui codent plus quoi) en entreprise.
Chefs développeurs criant à tue-tête sur leurs ingénieurs software (autres appellations possibles) pour qu'ils tiennent leurs délais parce que "depuis qu'on utilise le framework "Swing 40K" au lieu du "JRE v6", on est sensé avoir un gain de productivité de 50% (au bas mot, c'était écrit chez Sun !) et que, ben, donc du coup, on a plannifié les dates de livraison avec ces chiffres et que là on est en retard bande de faignants !". Ben tiens, t'as qu'à coder toi, conn4rd.
Ingénieur software, sinistre p1sseur de code sur- ou sous-payé (non, pas entre les deux), qui passe plus de temps à se (dé)battre avec les spécs du clients et les design patterns imposés (et inutiles 90% du temps) qu'à apprendre à coder correctement ou même, à simplement coder ("de toute façon, il s'en fout, il est dans les télécoms de formation, alors hein !"). Du coup, avec le domaine web et le Fortran (cf ci-dessus), c'est probablement le Java qui a le "code moyen produit" le plus moche.
Enfin, le Java produit un grand nombre d'onomatopés à l'haleine lasse (qui pue donc) : "Sélannnn !", "Sarââââmmm !" ou "Saramsamèrlapuuuuuuute !". On pourra me montrer tous les benchmarks de la créations sensés prouver que Java n'est pas si loin du C++, je reste convaincu que c'est lent. En fait, j'ai même un indice : la petite icône de la JVM est toujours présente en bas d'écran quand les cris ci-dessus sortent de mon acerbe bouche. Si ça c'est pas un signe...
Techniquement, le code n'est pas beau et est verbeux, l'introspection est hyper-lourde, bref...
Le Java sent le cµl professionnel certifié par Sun (mais en retard sur son jalon).


~=o=~


Que les petits oubliés de la procédure se rassurent, ceci n'est qu'une première partie (à ceux qui se posent la question, oui, je ch1erais aussi sur le Ruby : qui aime bien châtie bien). Trop courte, je vous l'accorde, mais là je dois m'amputer le pied pour l'envoyer à un primate de mes amis, avant de "régler" un bug de Windows avec le crâne de mon supérieur hiérarchique, et d'aller me faire un petit roupillon (si j'arrive à digérer ces maudits navets).

dimanche 15 février 2009

Langages en construction

Il existe littéralement plusieurs centaines de langages de programmation. Et malgré ce, de nouveaux langages continue d'apparaître chaque année, développés par de grosses boîtes ou par quelques passionnés. Je n'ai pas vraiment envie de trop discuter de l'intérêt de développer de nouveaux langages aujourd'hui, simplement :


  • Oui, il existe déjà de nombreux langages de très bonne qualité, spécialisés ou non, largement employés ou non, dans la plupart des paradigmes connus.
  • Oui, la qualité de langages récents comme Io, ou le succès d'autres comme Lua justifie de continuer à en développer d'autres.
  • Non, un langage n'est pas "indémodable" ou éternel : le Fortran et le Cobol, notamment, doivent être progressivement abandonnés et remplacés.
Par ailleurs, quand on aime la programmation, le processus de création d'un langage, ses étapes de développements, les choix faits sur ses caractéristiques, son (ou ses) paradigme(s), son implémentation, etc... sont particulièrement intéressants.

Je vous propose donc de jeter un coup d'oeil à 4 langages actuellement en construction :


Cat

Cat est un langage interprété de haut niveau, "stack-oriented", comme le Forth, et fonctionnel. Des 4 que je vous propose dans cet article, c'est probablement le plus avancé au niveau de son développement, celui-ci ayant débuté en 2006, malgré la présence de bugs conséquents (flottants et récursivité notamment).

Les langages de ce type, à pile, sont relativement peu nombreux : Forth, Joy, Factor, PostScript et quelques assembleurs en gros... Cat ne rentre donc pas dans une niche trop saturée. Ce paradigme est assez intéressant et original... et déroutant : il utilise la notation post-fixée (on en parlait ici) qui reste plutôt rare, et la manipulation de la pile demande un certain temps d'adaptation. Cela dit, pris comme un jeu, c'est assez amusant.
Le côté fonctionnel du langage est dû au fait que toute instruction correspond à une fonction appliquée à la pile. Le langage supporte aussi une forme de macro.
Petit plus, le typage est statique et inféré (comme en OCaml par exemple).

La version actuelle de Cat est implémenté en C#. Oui, je sais, berk. Cela dit, d'une il compile sous Mono et donc est utilisable partout (théoriquement...), et d'autre part, une machine virtuelle en C++ est actuellement en cours de développement par Christopher Diggins.

Vous pouvez aller jouer avec, directement en ligne sans rien installer, grâce à cet interpréteur online (Allez y je vous dis, c'est rigolo ! Par contre, tout le langage n'est pas dispo dessus...).

Exemple de la factorielle naïve (récursive) :





Ioke

De ces 4, Ioke est peut-être le plus "sérieux" et le plus suceptible de connaître le succès auprès des programmeurs amateurs et même professionnels. Ioke (prononcé "Ayoki", comme "Io" en anglais et "Loki", le dieu scandinave) est développé par Ola Bini qui travaille également sur JRuby (implémentation de Ruby sur la JVM), entre autres.
Ioke est un langage dynamique, orienté objet, à prototypes, tournant sur la JVM, et inspiré par Io, Smalltalk, LISP et Ruby. Sa première version est sortie il y a seulement quelques mois.

Bien que je ne l'ai pas testé, je trouve Ioke très prometteur pour plusieurs raisons. D'abord parce qu'il s'inspire de très bons langages et que son paradigme (OO à prototype) est très intéressant. Ensuite, qu'on le veuille ou non, parce que le fait qu'il tourne sur la machine virtuelle Java lui ouvre les portes du monde professionnel : ce n'est pas une garantie d'utilisation par les entreprises, mais ça augmente significativement ses chances. Il contient une foule de concepts/features intéressantes : syntaxe, blocks, macros, "lecros", aspects, introspection... La documentation est particulièrement riche et bien faite.

Ola Bini, son développeur principal, est un blogger assidu et un passionné des langages de programmation : il est possible de suivre les étapes de réflexion et de construction de Ioke, et bien d'autres choses sur son blog. C'est assez enrichissant.

Exemple de "99 Bottles" (oui, on dirait vraiment du Io...) :




Potion

L'un des derniers projets de Why's the Lucky Stiff s'appelle Potion. Comme d'habitude avec ce hacker, il s'agit d'un petit OVNI. Potion est un tout petit langage, qui se veut rapide, orienté "objet et mixin".

Sa machine virtuelle fait à peine 4000 lignes de code, en C. Il faut croire que c'est une obsession pour _Why de réduire au maximum la taille de tout code : Shoes pour la GUI et Camping comme micro-framework web en Ruby, ou Yown en Io. Une bonne partie de Potion est inspiré par Lua.

La syntaxe est assez particulière, et le langage s'appuie sur l'approche suivante :

  • Tout est un objet
  • Même les mixins sont des objets
  • Et bien sûr, les fermetures sont des objets
  • CEPENDANT, les objets ne sont pas tout : ils ne sont rien sans les mixins.
Les objets n'ont pas de classe : les données (attributs) sont au niveau de l'objet lui-même, et les méthodes sont conservées dans des mixins. Tout objet possède par contre des mixins.
Je n'ai pas encore testé Potion, n'ayant pas réussi à le compiler sous Windows. On va le tenter prochainement sous 'nix, ça a l'air vraiment marrant...

Exemple de Fibonacci récursif :



Tinyrb

Plus qu'un langage à proprement parler, Tinyrb est une toute nouvelle machine virtuelle pour le langage Ruby. Elle s'annonce comme la plus petite VM du langage, mais aussi comme étant plus que raisonnablement rapide. Il s'agit pour l'instant d'une version "allégée" du langage Ruby : tout code Tinyrb tournera avec un autre inerpréteur Ruby, mais l'inverse n'est pas vrai (il manque notamment un certain nombre de classes du core standard de Ruby) .

Marc-André Cournoyer a lancé ce projet en s'inspirant de Lua (encore !), Potion (tiens donc !) et Tinypy. Ici, comme pour Lua, l'aspect intéressant, c'est le côté portable et embarquable. C'est un côté de plus en plus présent dans les langages récents (Lua, Io...)

Comme pour Potion, je n'ai pas encore réussi à compiler la VM sous Window$ : à retenter aussi sous Linux... Pas de code ici, c'est du Ruby, pas plus (mais un peu moins).

~~~~

Voilà, n'hésitez pas à jeter un coup d'oeil à ces "petits" projets, et bon hack !

NOTE : les images de cet article sont libres/dans le domaine public et liées aux projets associés, hormis celle employée pour Potion , qui est l'avatar actuel de Why's the Lucky Stiff, et qui lui appartient.

samedi 14 février 2009

Expatriation et Microblogging

Expatriation

Pour la première fois de ma, colossale, vie de blogger, je viens de publier un article dans un autre blog que celui-ci : L'autre instrument du Blues, chez Lefty, à propos de l'harmonica... en Blues.

Pourquoi ?

D'abord, parce que c'est Lefty qui me l'a demandé (et qu'on ne refuse rien à "Mickey le gaucher dit La corde"). Ensuite parce que ça me gênait de parler de musique de façon aussi spécialisée sur ce blog, sachant que ça n'a strictement rien à voir avec mes "sujets habituels" (même si ça peut être assez large, je reste plutôt ciblé sur le monde de la programmation, du web, du logiciel libre... bref plutôt informatique et sciences malgré quelques écarts qui restent dans la geekerie ordinaire). Sans aller jusqu'à dire que j'aurais déstabilisé mon (immense) public, ça n'était pas très logique.

Il n'est pas du tout exclus que cette expérience continue (c'est à dire que je publie d'autres articles sur la musique dans les Chroniques de Lefty) voire même que je l'étende à d'autres sujets, qui sait ? Pourquoi pas par exemple un article sur le BHM par exemple ? Même si nous avons plus ou moins la même cible au départ, je ne détesterais pas participer à leur série sur les paradigmes de programmation... (si j'ai le temps, sur les langages stack-oriented).

J'ajoute un encart "Copinage Honteux" qui manque un peu sur ma colonne de droite...

Microblogging

Vous avez peut-être remarqué que j'utilisais la fonction de partage de Google Reader comme un Tumblelog (ici), ou que je m'étais mis à Twitter... J'avoue qu'après avoir pas mal critiqué ce genre d'outils/pratiques, à l'usage (avec un peu de temps libre aussi, il faut bien le dire...), c'est assez addictif. Twitter me semble ouvrir des voies très intéressantes dans la façon de communiquer, mais j'avoue que ça reste assez "gadget" à mon niveau (encore que...).

En bref, si vous êtes absolument fascinés (si si, vous l'êtes !) par ma vie, mon oeuvre et mon cµl (ou du moins ce qu'il en reste...), vous pouvez vous abonner à ces flux.

J'en profite pour signaler que j'ai récemment mis à jour ma liste de blogs Ruby. Je vais probablement bientôt faire une autre page de ce type pour les blogs de programmation autre que sur le Ruby que je suis.

dimanche 8 février 2009

Atlas du monde réel

Il y a de nombreuses façons de représenter le monde qui nous entoure. Traditionnellement, un carte représente le monde en tant qu'espace "physique" (ou plus exactement, une de ses projections) le plus fidèlement possible en termes de surfaces et distances.
Un cartogramme tente lui de représenter le monde en fonction d'une variable donnée : PIB d'un pays, densité de la population, taux d'accès à une ressource, etc. Pour ce faire, il déforme les surfaces et les distances réelles proportionnellement à la variable qu'il exprime. Cette technique est relativement récente : inventée durant le XIXème siècle, elle n'est fréquemment utilisée que depuis la seconde moitié du XXème. Par exemple, ci-dessous, la répartition des destinations touristiques dans le monde (où l'on peut voir que la France, l'Espagne et l'Italie apparaissent bien plus volumineuses que sur une carte classique de par leur forte attraction touristique). De nombreux cartogrammes sont consultables en ligne sur le site WorldMapper.



L'Atlas du monde réel (chez l'éditeur) propose avec 366 cartogrammes une représentation originale et souvent très efficace du monde, sur des problématiques très diverses (économiques, politiques, ressources, sociologiques, médicales, culturelles, etc...).

L'une des très grandes qualités de cet ouvrage (hormis sa présentation très claire et agréable) se cache derrière la méthode employée pour la génération de ses cartes. En effet, il s'agit d'une méthode numérique récente (2004) développée par Michael Gastner et Mark Newman (coauteur de l'ouvrage et chercheur numéricien à l'université du Michigan).
Cette méthode se base sur le phénomène physique de la diffusion (mécanique des fluides/thermique) : les territoires représentés se déforment comme s'il s'agissait de ballons contenant du gaz (la variable étudiée) avec des zones de pression (les zones de fortes densités de population, le plus souvent). Article de référence : Diffusion-based method for producing density equalizing maps, Michael T. Gastner and M. E. J. Newman (PDF).
D'un point de vue purement numérique, l'équation de la diffusion est résolue par une transformée de Fourrier rapide (FFT) et intégrée par une méthode de Runge-Kutta d'ordre 4. Selon les auteurs, une précision à 1.0E-4 (cela peut paraître décevant, mais une précision plus grande n'est quasiment pas observable humainement) est obtenue en peu d'itérations (ordre de temps de calcul : quelques minutes sur un ordinateur de bureau).

Ce qui m'a paru intéressant dans cette méthode, c'est l'application d'un problème de physique (la diffusion/mécanique des fluides) à un contexte tout à fait décalé (cartographie/représentation des données). Dans l'article cité plus haut, sont listées les précédentes méthodes de génération de cartogrammes, dont une autre consiste en une analogie physique avec l'élasticité des matériaux (mécanique solide déformable).
Dans d'autres domaines, pour ce type d'analogie, on peut citer l'utilisation de méthodes de CFD (calcul en mécanique des fluides) dans des calculs de trafic (routier ou autre) ou en finance ("flux" monétaires...).


Références :



Autres liens en vrac à propos des cartes :



Note : le cartogramme présenté ci-dessus est tiré de l'"Atlas du monde réel" et appartient à ses auteurs.