jeudi 18 avril 2013

Notebook Androïd Dust: à la recherche du menu perdu, l'onglet Développeur

Voici la suite de ma quête pour trouver les clés de cette petite machine.
Actuellement je bute sur le menu "Paramétres" (settings en VO). Ce menu permet de configurer son terminal Androïd. Malheureusement le menu dont j'ai hérité semble avoir été "bridé", car impossible d'y trouver le fameux onglet "Développeur", qui permet entre autre d'activer le mode "USB debug", qui est un moyen permettant d'accéder à des fonctionnalités étendues, et qui est parfois la première étape pour "rooter" son terminal.

La version de mon Androïd : 4.0.3 n'a rien d'extraordinaire (icecream sandwich). J'ai tenté sans succès toutes sortes de manipulations décrites pour les versions suivantes d'Androïd, comme par exemple les 7 pressions sur le n° de build dans l'onglet "A propos de la dispositif" (sic, le traducteur embauché pour la version française est quelque peu chatouilleux sur la détermination du genre dans la langue de Molières). Cela a très bien marché pour mon HTC One SV (mon autre Androïd), mais inopérant sur le Dust. J'ai même tenté cela sur toutes les options du menu "A propos...". J'ai même fini par tomber par hasard sur un "œuf de pâques". J'ai même cru au début que c'était un moyen pour activer un menu caché. Heureusement la recherche d'image de google m'a permis de comprendre la signification de cette image (une "private joke" entre développeurs).
Voici donc le menu qui me manque désespérément. J'ai bien tenté de faire toute sorte de recherche sur la toile, mais la aussi sans succès. Je commence à me poser des questions sur la possibilité de trouver le commencement d'un début de réponse.

A votre bon cœur messieurs/dames. Si jamais vous avez une petite idée, n'hésitez pas, vous ferez une bonne action.




Liens:
Easter eggs Androïd

Une copie d'écran du menu incomplet provenant du notebook DUST :


mercredi 17 avril 2013

DUST, Notebook vendu en grande surface < 100€: peut-on le rooter?

 
C'est toujours étonnant de trouver des Notebook pour moins de 100€. C'est tellement intrigant que cela donne envie d'en acheter un rien que pour tester la bête. Mon idée était d'utiliser cette machine pour tester certaines distributions Linux..
 Celle-ci a été achetée dans une grande surface spécialisée dans l'électronique à bas-coût (je ne vous donne pas le lien pour un produit qui aura disparu des rayons aussi vite que sera publié cet article). Il s'agit d'un modèle chinois, muni d'une puce tout en un. Il s'agit donc d'une puce SoC (System on a Chip), principe popularisé par la Raspberry, et qui permet de bénéficier d'un ordinateur ou d'une tablette pour moins de 50$ (voir pandawill ou autre site marchand distribuant une multitude de produit pas cher et exotique). Dans la fiche produit, il est mentionné Cortex A9, ce qui correspond à la famille ARMv7 (famille d'instruction). En réalité, ce processeur Cortex est inclus (AMHA) dans le SoC directement.
.
Voici l'étiquette du constructeur:
Première chose, essayons de décrypter cette étiquette, car la documentation livrée avec est réduite à sa plus simple expression, et en recharchant sur internet, aucune trace de ce modèle (en dehors de très nombreux clone vendu par alibaba par exemple).
Premier élément: P/N: VN10-V8850/4G
Le P/N signifie product (ou part) number), cad l'identifiant du produit selon le constructeur ou le distributeur (ou équivalent). La aussi, aucune trace sur google. A noter que le code barre du magasin est inutile sur ce point. Le but est de déterminer l'origine de cette machine pour déterminer les moyens de rooter cette machine (cad posséder les privilèges root pour par exemple exécuter des commandes interdites). La finalité est de modifier ou bidouiller cette machine et, pourquoi pas, y installer une distribution linux.

En faisant une recherche sur une partie du P/N, je découvre une référence à WonderMedia. Il semblerait après quelques recherches que Wondermedia soit le "fondeur" de cette puce, et qu'il s'agisse d'une puce SoC, c'est à dire une puce réunissant en un seul composant les éléments nécessaires pour faire fonctionner un ordinateur (le microprocesseur, la RAM, la ROM, la carte Graphique et l'équivalent d'une carte mère et du Bios). Cette Puce semble être référencée différement selon les modèles:
   WM8850, VIA8850, V8850 (si j'interprête la référence de mon propre notebook.
La confusion concernant WM et VIA semble être la conséquence d'une approximation : le premier est une filiale (ou un sous-traitant) du deuxième. Et comme VIA est un peu plus connu, la référence VIA peut apparaitre. Ensuite, voici les éléments que l'on observe au moment du boot:
     Androïd OS:    4.0
     Build Number : V1.5.5
     Kernel :       3.0.8

Intéressant, mais insuffisant.




Voici les points bloquants:
1- je ne parvient pas à trouver le nom et la référence exacte de ce produit (ni même son constructeur).
2- je ne trouve pas l'option développeur dans les paramètres Androïd.
En conclusion, je suis toujours aux prémices de ma quête des clés de cette machines. Incroyable qu'aujourd'hui, alors que les machines sont basées sur des OS ouverts (à l'instar d'Androïd) qu'il soit terriblement difficile (voir impossible) de simplement booter sur une disquette (c'est une expression de vieux) pour exécuter l'équivalent d'un 'live CD' sur une clé USB ou une carte SD.

Suite au prochain épisode, en espérant le succès dans ma recherche du Graal. Il me reste quelques quelques pistes à explorer.

"Dans un voyage, l'important n'est la destination, mais le cheminement pour y parvenir"

Quelques liens:
Wonder Media
SoC

(Nouveau lien)
Lien vers un forum qui semble avoir la solution (Merci pour le commentaire)

vendredi 12 avril 2013

Inkscape: conversion en format plt impossible suite à une erreur Python

L'informatique réserve toujours des misères cachées dans les usages les plus élémentaires. Ma dernière galère concerne mon plotter chinois (grandeur et décadence des imprimantes à découpe pas cher venant directement de Chine) que je pilote avec Artcut, un logiciel si peu pratique. Lui-même pourrait donner lieu à des dizaines d'articles pour commenter les problèmes qu'il représente. Confronter à ces soucis, j'ai logiquement choisi Inkscape pour concevoir les différentes formes à découper, Artcut n'étant plus utilisé que pour piloter l'imprimante. (A noter qu'Inkscape ne semble pas pouvoir piloter le plotter directement).


Pour importer dans Artcut, j'utilise l'importation de fichier PLT. C'est le seul format qui ne posait pas de soucis. Le PLT est le format de fichier traditionnel pour les plotters. Malheureusement Inkscape plante au moment de sauvegarder le fichier dans le format PLT: j'obtiens systématiquement une erreur Python (mais que fait donc cet animal dans cette galère). J'ai eu beau essayer les mises à jours, rien n'y faisait. La solution est heureusement relativement. Merci au forum qui m'a donné la solution.

Il suffit d'installer sur sa machine le convertisseur qui permet de convertir un SVG (fichier Inkscape) en fichier PLT -plotter). Voici donc la liste des éléments à installer (en plus d'Inkscape):

  • - Python 2.6.6  (se limiter à une V2)
  • - PIL 1.1.7
  • - reportlab 2.5
  • - uniconvertor 1.1.4

Je n'ai aucune certitude concernant les n° de versions, moi-même je n'ai pas suivie ces numéros. Ensuite, il vous suffira de lancer uniconvertor pour transformer votre svg en PLT. Le fichier PLT est accepté par Artcut. Comme quoi, il suffit parfois de peu de chose. Je n'ai pas vérifier si les 4 items étaient nécessaires, ou seulement le dernier. Tous ces logiciels semblent être libres et répandus pour la plupart des plateformes.

Je peux enfin découper mes créations réalisées sous Inkscape. C'est pratique pour contourner les limitations d'Artcut comme par exemple l'incapacité à gérer les accents pour les textes. C'est ce genre de détail qui vous font regretter un logiciel venant de Chine.

Liens
Le lien donnant une solution
Pourquoi Inkcape
Quid de Python

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();

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