Boite de réflexions et d'idées autour de cette société de l'information qui peut tout autant nous divertir que nous asservir. La frontière entre les deux est fine et presque impossible à déterminer dans certains cas d'usage. Heureusement tout cela n'est qu'éphémère.
jeudi 11 avril 2013
Python, succès étonnant d'un langage si peu orthodoxe
Langage populaire.
Ayant pratiqué de nombreux langage (Fortran, clipper, C, VBA, JSP, PHP, et j'en passe) mais sans jamais devenir expert, j'ai pu réaliser une grande variété de programmes pour répondre à toutes sortes de défis. A chaque fois, c'est uniquement pour m'adapter au besoin (exemple un site Web), que j'ai dû apprendre un nouveau langage. C'est en me plongeant dans l'univers du Raspberry (projet d'un ordinateur à 25$), que j'ai tenté d'apprendre Python, car la petite communauté à l'origine de ce projet utilise et popularise avec beaucoup d'énergie ce langage. J'ai donc tenté de sauter le pas, en partant à la découverte de ce langage. Ma première surprise fut de découvrir sa grande popularité dans différents domaines (site Web, batch, logiciel graphique, et même pour le HTML5). Inkscape en particulier utilise Python pour la partie conversion.
Premier pas.
Je tiens en premier lieu à rendre hommage à un livre PDF qui m'a enchanté, me rappelant le bon vieux temps de la micro-informatique, un temps où les livres et documentations étaient superbement écrits et constituaient un plaisir de lecture et de pédagogie. Actuellement pour apprendre un nouveau concept, nous sommes écrasé sous la quantité de document mal écrit et oubliant la dimension pédagogique. C'est donc grâce à l'ouvrage de Gérard Swinnen que j'ai pu débuter mon apprentissage. Heureusement qu'il existe encore aujourd'hui des documents pédagogiques donnant envie d'apprendre. A noter que pour moi la référence reste le Kernighan & Ritchie écrit pour apprendre et faire connaitre le langage C.
Caractéristiques (analyse personnelle).
Je définirais Python comme un langage de programmation orienté ligne de commande. En d'autre terme, un langage permettant la réalisation d’algorithmes complexes en ligne de commande (comparable à un shell unix). Pour caractériser concrètement ce langage, voici quelques particularités:
Le mode console qui permet d'exécuter en mode interactif des lignes codes. Ce mode console me semble-t-il relativement inutile car non persistant (les lignes de codes ne sont pas mémorisées) et rend difficile les interactions complexes.
Une autre caractéristique est son mode exécution en commande en ligne ("python script.py" par exemple), fort pratique.
Ce langage appartient à la très grande famille des langages interprétés.
Mais la caractéristique la plus étonnante (vis à vis de mon parcours de développeur) est la méthode de gestion des blocs logiques. Un bloc logique, comme par exemple un bloc conditionnel du type "If() ...endIf", est déterminé par les indentations de chaque ligne. En d'autre terme c'est le nombre d'espace en début de ligne qui détermine si cette ligne appartient à un bloc logique ou un autre.
Pourquoi je n'aime pas.
Les goûts et les couleurs sont difficiles à expliquer. Pour Python, je vais tenter de donner des exemples de choses qui me dérange et qui me pousse à ne pas investir de temps. Je vais en citer deux :
Le système d'indentation et la syntaxe légère. Il s'agit bel et bien d'impression, car n'ayant pas approfondi mon étude et l'apprentissage de ce langage, je ne puis en prendre toute la mesure. Mais l'avantage du monde d'aujourd'hui, c'est le luxe formidable dont jouit le développeur, avec la possibilité de choisir son langage. Il n'y a pas si longtemps, quand vous vouliez réaliser un certain type de traitement ou utiliser certains équipements, vous étiez contraint d'utiliser un système et nul autre. Heureusement les hackers et autres bénévoles ont développé les moyens de pouvoir choisir. Voici donc deux exemples qui me pousse à ne pas choisir ce langage.
Les blocs délimités par indentation.
C'est le point le plus grave. Ayant passé des centaines d'heure à débugger ou décrypter des programmes, je connais l'importance de la délimitation des blocs logiques décrivant des tests ou des boucles. L'idée de délimiter visuellement par indentation les blocs est intéressante théoriquement, mais dans la pratique c'est un cauchemar pour ceux aimant les choses biens rangées. Le plus grave est l'incapacité de "voir" la différence entre un espace, une tabulation ou les différents caractères exotiques de l’ASCII qui s'apparente à un espace (Je me souviens à ce propos avoir un jour perdu beaucoup de temps à cause du caractère ASCII SUB). Quid d'un mélange (invisible sur un éditeur classique) de tabulation et d'espaces. Les conséquences sont terribles: les algorithmes peuvent devenir erratiques et complexe à décrypter. La goute d'eau est le fait d'avoir étendu ce système de bloc à la notion de fonction. On crée déjà soi-même assez de bug, pas besoin d'en générer encore plus avec son éditeur de texte à cause de cette gestion de blocs logiques.
Syntaxe légère.
Sur ce point je ne suis pas un farouche opposant. Mais il existe la aussi des risques difficiles à évaluer. Voici un petit exemple de suite de Fibonacci, justement présenté dans le livre ci-dessus:
Cet exemple présente le dépouillement de la syntaxe. Cette dernière ligne en particulier :
a, b, c = b, a+b, c+1
est en fait la contraction élégante de trois affectations.
Malheureusement, cette syntaxe pour un langage interprété destiné au plus grand nombre, pose un grave problème d'interprétation. Ce petit bout de code peut être "traduit" (ou plutôt interprété) de deux manières en algorythmie simplifié.
Interprétation 1: avec des valeurs évoluant au fil des affectations:
cela donnerait cela pour "traduire" la dernière ligne:
a=b
b=a+b
c=c+1
Interprétation 2: avec des valeurs figées juste avant les affectations:
temp_a= a
temp_b= b
temp_c= c
a= temp_b
b= temp_a + temp_b
c= temp_c + 1
Chaque méthode d'"interprétation" donne des séries de trinômes (a,b,c) différentes:
Trinômes Trinômes
Interpr. 1 Interprétation 2
(1, 1, 1) (1, 1, 1)
(1, 2, 2) (1, 2, 2)
(2, 4, 3) (2, 3, 3)
(4, 8, 4) (3, 5, 4)
(8,16, 5) (5, 8, 5)
......
On remarque d'ailleurs que les deux premières lignes sont identiques, ce qui peut impliquer des risques de camouflage de ce bug d’algorithmie, si seules les premières lignes sont testées. Cela montre le danger de type de syntaxe.
Conclusion
Ma première expérience n'étant pas convaincante, je n'utiliserais pas Python pour un certain temps. J'aime encore mieux les rigueurs et les dangers d'un langage C plutôt que de me lancer dans l'investissement d'un langage si peu orthodoxe. Le plus important pour un langage de programmation n'est pas sa facilité de programmation (syntaxique ou autre) mais sa facilité à debugger. Personnellement je passe bien plus de temps à chercher la "petite bête" que d'écrire des lignes de code. Cette gestion des blocs logiques risquerait bien trop de me procurer des sueurs froides lors de mes recherches quotidiennes de la grosse "petite bête".
Liens:
L'excellent livre d'apprentissage de Python de Gérard Swinnen.
Pour alez plus loin sur ce langage.
Raspberry
jeudi 4 avril 2013
UTF8, BOM, PHP, un mélange indigeste pour les fichiers à télécharger.
En PHP, il est recommandé d'écrire vos scripts en UTF8 sans BOM. Jusqu'à présent, je n'avais jamais prêté attention à cette recommandation. Pour ceux qui douteraient du bon sens de ce conseil, voici un exemple illustrant l'usage malencontreux de ce fameux tiercé de caractères, parfois placés en début de fichier UTF8.
Voici l'exemple PHP en question, et qui permet le téléchargement d'un fichier XML :
header("Content-Type: text/xml");
....
$buffer =file_get_contents('fichier.xml');
echo ($buffer);
exit();
Voici l'exemple PHP en question, et qui permet le téléchargement d'un fichier XML :
header("Content-Type: text/xml");
....
$buffer =file_get_contents('fichier.xml');
echo ($buffer);
exit();
Le but est de pouvoir télécharger coté client un fichier 'fichier.xml', sans en modifier un seul octet. Et pourtant, le fichier téléchargé se trouvait (coté client) augmenté de trois caractères parasites, le tristement fameux BOM. Mais pourquoi donc la fonction echo(), ou la fonction file_get_contents() ajouterait ce BOM parasite. J'ai perdu une bonne heure à éplucher la documentation de ces deux fonctions sans succès. Pour finir, j'ai vérifier le format du script PHP lui-même. Merci d'ailleurs à Notepad++ qui permet en un simple click, de connaitre et de changer le format de ses fichiers:
Le problème fut résolue en supprimant le BOM. Il semble donc que le moteur PHP interprète ces trois caractères, présents au début du fichier PHP, comme des caractères à afficher. Ces trois caractères se retrouvent ainsi et involontairement dans le flux binaire du fichier à télécharger.
Le BOM (Byte Order Mark) est l'une des plus mauvaises idées imaginées pour résoudre la problématique des multiples charsets. Bonne continuation @vous dans le monde merveilleux de l'encodage des caractères.
Inkscape, un choix évident.
J'ai choisi comme logiciel de référence pour le dessin vectoriel, Inkscape. Pour rentabiliser et capitaliser son apprentissage, il est important de se limiter à un et un seul logiciel. Pour parvenir à maitriser les subtilités d'un tel logiciel, il faut du temps, et ce temps est précieux.
Alors pourquoi Inkscape?
Cela se résume en quelques mots:
- Gratuit (autant éviter de pirater ou de dépenser une fortune pour quelques dessins)
- Ergonomie simple (certain logiciel souffre d'une ergonomie complexe longue à assimiler)
- Logiciel stable (pas de grande révolution à chaque version qui obligerait à se remettre en question)
- Communauté importante (pour progresser et surpasser les écueils c'est important).
- Multi-plateforme (Entre Microsoft qui change tous les deux ans d'OS et la fragmentation de Linux, c'est pas un luxe d'avoir le choix).
Inkscape n'est pas parfait pour autant, mais au moins, le difficile et douloureux temps du choix est révolu. On peut alors en toute quiétude investir du temps et de l'énergie à comprendre et apprendre ce superbe logiciel. Félicitation à toute l'équipe d'Inkscape.
PS: j'ai choisi comme image d'illustration une image présente sur le site officiel, autant pour l'esthétique indéniable que la symbolique de l'immersion. En revanche cette image est peu adapté pour décrire un logiciel vectoriel, puisque que s'agissant d'une image plutôt adapté à un logiciel "bitmap' à l'instar de Gimp. Mais le cœur a ses raisons.... Tout cela pour vous signaler l'importance de bien comprendre les différences d'un logiciel "Bitmap" et vectoriel, avant de vous lancer vous-même dans le grand bain des dessins sous Inkscape.
Lien vers le site d'Inkscape
Alors pourquoi Inkscape?
Cela se résume en quelques mots:
- Gratuit (autant éviter de pirater ou de dépenser une fortune pour quelques dessins)
- Ergonomie simple (certain logiciel souffre d'une ergonomie complexe longue à assimiler)
- Logiciel stable (pas de grande révolution à chaque version qui obligerait à se remettre en question)
- Communauté importante (pour progresser et surpasser les écueils c'est important).
- Multi-plateforme (Entre Microsoft qui change tous les deux ans d'OS et la fragmentation de Linux, c'est pas un luxe d'avoir le choix).
Inkscape n'est pas parfait pour autant, mais au moins, le difficile et douloureux temps du choix est révolu. On peut alors en toute quiétude investir du temps et de l'énergie à comprendre et apprendre ce superbe logiciel. Félicitation à toute l'équipe d'Inkscape.
PS: j'ai choisi comme image d'illustration une image présente sur le site officiel, autant pour l'esthétique indéniable que la symbolique de l'immersion. En revanche cette image est peu adapté pour décrire un logiciel vectoriel, puisque que s'agissant d'une image plutôt adapté à un logiciel "bitmap' à l'instar de Gimp. Mais le cœur a ses raisons.... Tout cela pour vous signaler l'importance de bien comprendre les différences d'un logiciel "Bitmap" et vectoriel, avant de vous lancer vous-même dans le grand bain des dessins sous Inkscape.
Lien vers le site d'Inkscape
mardi 18 septembre 2012
OSx serait-il un oasis pour les linuxiens déçus?
En regardant derrière nous, c'est assez fou de voir à quel point Linux est devenu grand public, facile et efficace. Il est vrai que cela reste toujours délicat pour les détails et que les distributions toujours plus nombreuses. Mais objectivement, tout est plus facile. Et pourtant, c'est à ce moment là que certains fans de Linux choisissent pour verser dans l'OSx, alors que justement Apple est sur le point de devenir une caricature de Big Blue des années 80, arrogant et abusant de sa position dominante. Pour ma part, quand je regarde ce que devient Apple, je me surprend à trouver Microsoft fort sympathique . Comme quoi tout arrive.
Longue vie à linux, car tant que l'on a le choix, il y a de l'espoir.
PS:
Pour finir sur une note sérieuse, je dirais qu'il manque à Linux un déclencheur qui permettra de réalisera le mouvement actuellement en marche sur le mobile avec Androïd. Tous les matériaux sont là, il ne manque plus que le chef d'orchestre pour mettre cela en musique, et que linux deviennent l'OS favori de nos PC à la maison.
L'article : De Linux à Mac OSX Autre article sur le même sujet.
Article sur le même sujet.
Toutou linux
Et maintenant quelque chose de totalement différent.
Longue vie à linux, car tant que l'on a le choix, il y a de l'espoir.
PS:
Pour finir sur une note sérieuse, je dirais qu'il manque à Linux un déclencheur qui permettra de réalisera le mouvement actuellement en marche sur le mobile avec Androïd. Tous les matériaux sont là, il ne manque plus que le chef d'orchestre pour mettre cela en musique, et que linux deviennent l'OS favori de nos PC à la maison.
L'article : De Linux à Mac OSX Autre article sur le même sujet.
Article sur le même sujet.
Toutou linux
Et maintenant quelque chose de totalement différent.
samedi 1 septembre 2012
Si jamais votre parseur XML vous insulte avec une entité 'nbsp' non déclarée.
Le mariage d'XML et du HTML a donné à de nombreuses variations. Depuis HTML 4 (pour simplifier), le XTML est devenu une part importante du HTML. Pour ma part, je continue à travailler en 3.2, et à fuir tant que possible les normes XML d'HTML. Malheureusement, il est parfois obligatoire de s'y mettre. Pour cela, j'utilise Tidy, formidable utilitaire qui constitue une boite à outils fort utile. Je l'utilise régulièrement pour tester le HTML produit en php. Je l'utilise également pour transformer une page HTML en XML. C'est dans ce dernier cas d'usage que j'ai découvert un petit soucis. Voici la procédure en question:
1- Récupérer le source HTML d'un site internet
("Wget www.site.com" par exemple)
2- Ensuite convertir ce fichier html => xml
(en utilisant tidy par exemple : "Tidy -config tidy-xml.cfg source.html > source.xml")
3- Edition (parsing) du fichier
(avec par exemple xpath ou autre parseur)
Le fichier xml obtenu (après avoir été aspiré puis transformé par tidy) n'est finalement pas bien formé. J'obtiens avec mon parseur un message de ce type: "Reference to undeclare entity 'nbsp'". L'erreur (ou plutôt le warning, cela dépend du parseur) est la non déclaration d'une entité, en l’occurrence nbsp (l'entité HTML désignant un espace non-sécable). Le XML ne reconnait pas par défaut cette entité (puisque cette entité est à l'origine une entité purement HTML). Malheureusement, cette absence de déclaration peut être considérée par un parseur xml comme fatale. La solution serait pour résoudre ce soucis potentiel de remplacer les ' ' par une entité compatible XML ' '. On peut également et plus simplement demander à Tidy de faire le travail. Pour cela, il suffit d'utiliser l'option Tidy: "quote-nbsp=no". L'entité est alors remplacée par un espace, ce qui est une bonne solution pour mon usage. J'ai donc modifié le fichier tidy-xml.cfg, fichier que j'ai récupéré dans la version graphique de Tidy (GUI en anglais).
Alors si jamais votre parseur vous insulte avec une entité nbsp non déclarée et que vous utilisez Tidy, vous saurez quoi faire. Tout cela pour si peu,...
XML in a Nutshell (sympa les premières de couv.)
Tidy, l'incroyable boite à outils
Esprit d'escalier
1- Récupérer le source HTML d'un site internet
("Wget www.site.com" par exemple)
2- Ensuite convertir ce fichier html => xml
(en utilisant tidy par exemple : "Tidy -config tidy-xml.cfg source.html > source.xml")
3- Edition (parsing) du fichier
(avec par exemple xpath ou autre parseur)
Le fichier xml obtenu (après avoir été aspiré puis transformé par tidy) n'est finalement pas bien formé. J'obtiens avec mon parseur un message de ce type: "Reference to undeclare entity 'nbsp'". L'erreur (ou plutôt le warning, cela dépend du parseur) est la non déclaration d'une entité, en l’occurrence nbsp (l'entité HTML désignant un espace non-sécable). Le XML ne reconnait pas par défaut cette entité (puisque cette entité est à l'origine une entité purement HTML). Malheureusement, cette absence de déclaration peut être considérée par un parseur xml comme fatale. La solution serait pour résoudre ce soucis potentiel de remplacer les ' ' par une entité compatible XML ' '. On peut également et plus simplement demander à Tidy de faire le travail. Pour cela, il suffit d'utiliser l'option Tidy: "quote-nbsp=no". L'entité est alors remplacée par un espace, ce qui est une bonne solution pour mon usage. J'ai donc modifié le fichier tidy-xml.cfg, fichier que j'ai récupéré dans la version graphique de Tidy (GUI en anglais).
Alors si jamais votre parseur vous insulte avec une entité nbsp non déclarée et que vous utilisez Tidy, vous saurez quoi faire. Tout cela pour si peu,...
XML in a Nutshell (sympa les premières de couv.)
Tidy, l'incroyable boite à outils
Esprit d'escalier
dimanche 3 juin 2012
Le "Toujours plus" a-t-il vécu?
En lisant les commentaires de nombreuses personnes à propos de projets de PC à moins de 100$, j’ai remarqué qu'il existe une croyance selon laquelle un ordinateur à moins de 100€ ne peut pas exister pour la simple raison que cela n’existe pas dans la vrai vie. Et pourtant, cela existe dans la vrai vie, mais en pièces détachée. Et pourtant les grand constructeurs actuels (Apple le premier) tente de faire croire qu’un ordinateur à moins de 500$ ne peut qu’une véritable m…. Steve Jobs sur ce point a été très explicite tant par ses paroles que par ses actes.
Et pourtant, des expériences comme le raspberry prouve magistralement ce que l’on savait depuis longtemps: les composants d’un ordinateur de base ne valent presque plus grand chose aujourd'hui. Ce qui coûte, c’est l’inflation imbécile des performances (comme par exemple la résolution de l’écran du dernier iPad), et l’inflation des coûts marketing et développement associés.
J’espère que tous ces projets sont l’annonce de la fin du règne du marketing et du toujours plus. Et vivement que l’inventivité et la créativité redeviennent les principaux ingrédients de nos ordinateurs.
(EDIT:]
Un notebook vendu moins de 100€ en grande surface
(EDIT:]
Un notebook vendu moins de 100€ en grande surface
lundi 23 avril 2012
Pourquoi tant de haine parmi les forums internet
La gestion d'un forum n'est jamais facile. Une des taches les plus délicates est de prévenir les déchainements de haine qui parfois menace l’altruisme et la tranquillité sur un forum internet. Les choses les plus banales peuvent soudainement prendre des proportions incroyables. Les mécanismes psychologiques pouvant déclencher la zizanie sont de véritables pièges pour les plus paisibles d'entre nous. Et pourtant la majorité des utilisateurs piégés dans ces cycles infernales n'ont aucune prédisposition à la zizanie. Selon moi, l'explication de ce piège psychologique est en premier lieu la virtualisation des échanges, et en deuxième lieu la trop grande réactivité de ces échanges:
1- on ne sait plus vraiment à qui l'ont parle sur un forum et chacun peut perdre facilement les nuances d'un message écrit qui pourtant n'aurait pas d'ambiguïté à l'oral avec la connaissance ou la visualisation de son interlocuteur. La société nous a appris à maitriser tant bien que mal les subtilités de la communication en public (dans un lieu publique par exemple), alors que sur internet, nous sommes tout juste au stade de l'apprentissage.
2- Avant quant on écrivait pour dialoguer, on le faisait par lettre. Le temps et le soin que l'on mettait pour écrire permettait de réfléchir soigneusement avant de s'exprimer. Maintenant à l'heure de tweeter, les dérapages sont nombreux, même pour les plus aguerris d'entre nous. La faute certainement à la réduction du temps et des contraintes pour diffuser une réponse ou une communication vers le plus grand nombre.
Malheureusement je n'ai pas de solution à proposer, je me contente de constater les dégâts. Mon conseil est simple: revenir à des méthodes de communication traditionnelles quant il s'agit d'une communication vers plusieurs personnes à fortiori vers un groupe de personne que vous ne connaissez pas. Et surtout, fuyer les médias trop réactifs comme Tweeter et Facebook: sans une machine à remonter le temps, ce genre de média constitue une véritable bombe à retardement pour chacun d'entre nous.
1- on ne sait plus vraiment à qui l'ont parle sur un forum et chacun peut perdre facilement les nuances d'un message écrit qui pourtant n'aurait pas d'ambiguïté à l'oral avec la connaissance ou la visualisation de son interlocuteur. La société nous a appris à maitriser tant bien que mal les subtilités de la communication en public (dans un lieu publique par exemple), alors que sur internet, nous sommes tout juste au stade de l'apprentissage.
2- Avant quant on écrivait pour dialoguer, on le faisait par lettre. Le temps et le soin que l'on mettait pour écrire permettait de réfléchir soigneusement avant de s'exprimer. Maintenant à l'heure de tweeter, les dérapages sont nombreux, même pour les plus aguerris d'entre nous. La faute certainement à la réduction du temps et des contraintes pour diffuser une réponse ou une communication vers le plus grand nombre.
Malheureusement je n'ai pas de solution à proposer, je me contente de constater les dégâts. Mon conseil est simple: revenir à des méthodes de communication traditionnelles quant il s'agit d'une communication vers plusieurs personnes à fortiori vers un groupe de personne que vous ne connaissez pas. Et surtout, fuyer les médias trop réactifs comme Tweeter et Facebook: sans une machine à remonter le temps, ce genre de média constitue une véritable bombe à retardement pour chacun d'entre nous.
Inscription à :
Articles (Atom)







