PROJET AUTOBLOG


Ma parcelle sur le web

Site original : Ma parcelle sur le web

⇐ retour index

Mise à jour

Mise à jour de la base de données, veuillez patienter...

[Android] Afficher du code HTML dans une WebView

mercredi 14 mai 2014 à 12:48

En développant sur la plateforme Android, on se rend compte assez vite des limitations du composant graphique (« widget ») TextView : impossibilité de justifier le texte, pas de formatage possible, l’ajout de liens est difficile, aucun ascenseur n’apparaît si le texte est trop long, etc.

Heureusement, il est possible de contourner toutes ces limitations aisément en utilisant un autre widget : WebView !

Conçu pour afficher du contenu HTML, il n’est pas obligatoire de lui donner une source « externe » (adresse d’une page) et il est tout à fait possible de lui envoyer directement le code HTML à interpréter. Avec quelques subtilités toutefois, d’où l’intérêt de cet article.

Voici un aperçu final de l’exemple qui sera fait :

Aperçu de la WebView

Cela peut être utile afin d’afficher une page « A propos ».

Marche à suivre

Ajouter le widget au layout

Tout d’abord, il faut ajouter le widget WebView dans le layout de l’activité voulue (à la main ou depuis l’éditeur graphique). Une simple formalité normalement, mais voici le code pour référence :

<WebView
    android:id="@+id/webView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

Insérer le code HTML dans les ressources

Ensuite, il faut le contenu, le code HTML à proprement dit.

Première difficulté : comment insérer du code HTML (avec les balises) dans les ressources (le fichier contenant les chaînes de caractères localisées) ?

En l’insérant dans la balise « CDATA », comme suit (dans /res/values/strings.xml) :

<!-- Contenu HTML -->
<string name="html_content">
    <![CDATA[
        <html>
	    <body style="text-align:justify;">
	    <p>Ceci est un paragraphe avec un texte en <b>gras</b>, <u>souligné</u> et en <i>italique</i>.</p>
	    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi feugiat lacus vel scelerisque auctor. Proin sed lorem ut felis bibendum consectetur. Etiam pharetra, sapien non varius consectetur, nulla lorem mattis purus, bibendum vulputate nisl sem eu sem. Fusce in nisi eu risus pulvinar tincidunt. Duis laoreet mi vel mollis cursus. Nunc ut orci libero. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
	    <h3>Liste à puces</h3>
	    <ul>
	    <li>Premier élément&nbsp;;</li>
	    <li>Deuxième élément.</li>
	    </ul>
	    <p>Lien vers le <a href="http://kevinvuilleumier.net">site web du développeur</a>.</p>
	    </body>
	    </html>
    ]]>
</string>

Remarquez que le contenu est justifié.

Charger le code HTML dans la WebView

Pour terminer, il reste à charger le code HTML précédent dans la WebView.

On va le faire à l’exécution, dans la méthode onCreate() de l’activité :

WebView webView = (WebView)findViewById(R.id.webView1);
    	
webView.loadData(getString(R.string.html_content), "text/html", "utf-8");

Malheureusement, cette façon de procéder pose quelques problèmes : le fond n’est pas transparent et, plus grave, les accents s’affichent mal (bien qu’on ait spécifié l’encodage) !

Afin de pallier cela, il convient de s’y prendre de la manière suivante :

WebView webView = (WebView)findViewById(R.id.webView1);
    	
webView.loadDataWithBaseURL(null, getString(R.string.html_content), "text/html", "utf-8", null);
webView.setBackgroundColor(0x00000000);

A présent, les accents s’affichent correctement et le fond est transparent, mais tout n’est pas encore parfait…

En effet, il reste encore un problème sur des versions d’Android plus récentes : la transparence provoque l’apparition de carrés noirs désagréables lors du « scroll ».

Un bug graphique dont la correction se fait comme suit (solution compatible avec les anciennes versions d’Android) :

WebView webView = (WebView)findViewById(R.id.webView1);
    	
webView.loadDataWithBaseURL(null, getString(R.string.html_content), "text/html", "utf-8", null);

if (Build.VERSION.SDK_INT >= 11) {
	webView.setBackgroundColor(0x01000000);
} else {
	webView.setBackgroundColor(0x00000000);
}

Optimiser son SSD sous Windows

mardi 7 janvier 2014 à 18:29

Actuellement, les SSD sont très performants et de plus en plus fiables. Bien qu’ils soient encore onéreux, ils sont idéaux pour héberger le système d’exploitation, car très rapides et avec des temps d’accès proche de l’instantané ! A tel point qu’il est difficile ensuite de revenir aux traditionnels disques durs…

Photo par SamsungTomorrow (licence CC-BY-NC-SA).

Photo par SamsungTomorrow (licence CC-BY-NC-SA).

D’ailleurs, pensez à activer l’AHCI dans le BIOS avant l’installation du système, les transferts n’en seront que plus rapides (que ça soit avec un SSD ou un disque dur) ;) Il est toujours possible de le faire après coup, mais il peut y avoir des problèmes en de rares occasions (dans ce cas, suivre ce tuto).

Toutefois, posséder un SSD ne suffit pas : il faut être prudent avec certaines fonctionnalités et changer certains réflexes acquis avec les HDD pour ne pas user prématurément les cellules du SSD !

En effet, c’est là le principal « point faible » des SSD (avec le prix)… bien qu’il faille relativiser : les premiers SSD « mourraient » certes prématurément et étaient, de ce fait, peu fiables.

Mais la situation actuelle est radicalement différente, comme en atteste cet article : il est possible d’écrire des dizaines de gigaoctets de données chaque jour pendant des années sans pour autant arriver à le « tuer » (de nombreux tests sur le net en témoignent).

Avant-propos

Le but de cet article est de proposer une liste d’astuces (en vrac) visant à limiter l’usure du SSD sous Windows sans pour autant sacrifier les performances !

L’article n’est pas là dans le but d’expliquer le fonctionnement d’un SSD ; pour cela, je vous conseille le dernier lien dans les sources et références ;)

Éviter les modèles à problèmes

Autant le dire tout de suite : certains modèles de SSD ne sont pas fiables du tout !

Inutile d’en faire une liste (qui risquerait d’être rapidement obsolète de toute façon), mais je vous conseille, avant tout achat, de prendre le réflexe de se renseigner un minimum sur le modèle que vous voulez acheter. Il ne faut surtout pas acheter à l’aveugle ! Les tests et avis de consommateurs pullulent suffisamment sur le web à ce sujet.

Par exemple, les Vertex sont (étaient ?) réputés pour rendre l’âme rapidement, ou certains modèles du constructeur OCZ (pourtant réputé) basés sur le firmware « Everest ». De bien mauvaises surprises pour un composant qui coûte un prix non-négligeable (plusieurs centaines de francs).

Acheter du MLC (ou SLC pour les plus riches)

Il y a globalement trois types de mémoire flash sur le marché actuellement :

Ce qu’on constate, c’est que les différences entre les trois types de mémoire sont les performances, le prix et la durée de vie.

Les meilleurs SSD sur le marché sont ceux embarquant de la mémoire de type SLC, mais ce sont aussi les plus chers, par la force des choses. Les MLC, quant à eux, sont les plus présents sur le marché des particuliers et représentent un excellent compromis ! Inutile de dire que je ne recommande pas particulièrement les SSD fonctionnant avec des mémoires TLC…

Utiliser Windows 7 ou ultérieur

Les SSD ne sont gérés nativement qu’à partir de Windows 7. Entre autres, il supporte la commande TRIM, indispensable pour garder des performances élevées pendant toute la durée de vie du disque et éviter une usure trop rapide. De plus, Windows désactive certains mécanismes (comme la défragmentation automatique). Plus de détails sont données dans cet article.

Vous pouvez vérifier l’activation du TRIM comme suit :

  1. Ouvrez une console en tant qu’administrateur ;
  2. Entrez la commande « fsutil behavior query DisableDeleteNotify » ;
  3. Si la ligne « DisableDeleteNotify = 0″ s’affiche, c’est que le TRIM est activé !

En bref, il est contre-productif et risqué d’utiliser un SSD sur un système antérieur à Windows 7.

Pas de défragmentation

Laissez tomber ce vieux réflexe qu’était la défragmentation du disque : non seulement c’est parfaitement inutile sur un SSD (chaque secteur est directement accessible, peu importe où il se trouve sur le disque et sans délai d’attente), mais, en plus, vous allez fortement user le disque par toutes les opérations de déplacement (très nombreuses écritures). Une durée de vie réduite pour un gain absolument nul ? A bannir, donc, sans regrets !

Par défaut, Windows (7 et suivants) désactive la défragmentation automatique lorsqu’il est en présence d’un SSD. Pour vérifier si c’est bien le cas, suivez cette astuce.

Déplacer les données sur un autre disque

Un SSD a une petite capacité de stockage (jusqu’à 256 Go, voire 512 Go pour les plus chers, mais ils sont rares) et il est impératif de ne pas le remplir entièrement pour que les mécanismes de répartition de l’usure (le « wear leveling ») puissent fonctionner correctement ! Certains disent qu’il faut éviter de dépasser le 60% de la capacité du disque, d’autres indiquent 80%, mais en tout cas pas au-delà !

Pour toutes ces raisons et pour éviter qu’il ne se remplisse trop rapidement, il est plus que conseillé de déplacer un maximum de données sur un disque dur traditionnel de grande capacité. D’autant qu’il n’est pas forcément pertinent d’avoir des fichiers (documents, images) sur un disque rapide si c’est pour ne gagner que quelques millisecondes à leur ouverture…

Par exemple, vous pouvez déplacer intégralement le répertoire « Utilisateurs » sur un autre disque en suivant ce tutoriel ! Sinon, je vous conseille au moins de déplacer le répertoire temporaire

Les autres pistes

De même, il n’est pas forcément utile de stocker tous les programmes sur le SSD : est-ce important que la messagerie instantanée démarre 2 ms plus rapidement ?

Vous pouvez également faire le ménage en supprimant le fichier d’hibernation (si vous n’utilisez pas la mise en veille prolongée) et le fichier de pagination (le « swap », si votre mémoire vive est suffisante ou déplacez-le aussi sur un autre disque). Cela fait toujours quelques (dizaines) de gigaoctets de gagné et encore moins d’écritures sur le disque ;)

Vous l’aurez compris, le réflexe de tout mettre sur le C: est à proscrire. A vous de faire les bons choix pour éviter d’engorger votre SSD inutilement !

Désactiver l’indexation du disque

Parfaitement inutile sur un disque aussi rapide, l’indexation n’apportera aucun gain en rapidité lors des recherches et augmente l’usure du disque pour rien. Et puis, on effectue plus souvent des recherches sur le disque de données que le disque système, alors autant le désactiver.

Pour ce faire, cliquez droit sur votre SSD, sélectionnez « propriétés », puis décochez la case « Autoriser l’indexation du contenu des fichiers de ce lecteur en plus des propriétés de fichier ». Sélectionnez ensuite « Ignorez tout » et faites preuve de patience.

Désactiver les points de sauvegarde… aux risques et périls

Beaucoup recommandent de désactiver les points de sauvegarde afin de gagner de la place et de limiter, une fois encore, les écritures sur le disque, mais je déconseille : en cas de pépin, il vous sera plus difficile de récupérer le système à un état fonctionnel !

Pour moi, le jeu n’en vaut pas la chandelle ; autant limiter l’espace alloué que de le supprimer purement et simplement.

Tout cela se trouve sous « Panneau de configuration > Système > Protection du système ».

Désactiver le Prefetch et le Superfetch

Deux mécanismes différents qui ont le même but : accélérer le démarrage de Windows et les applications les plus couramment utilisées.

Alors pourquoi les désactiver ?

Prefetch

Le Prefetch est une fonctionnalité qui réorganise les fichiers sur le disque pour accélérer le démarrage du système. Autant dire que c’est inutile sur un SSD (où l’accès est immédiat).

Il se désactive depuis le registre :

  1. Allez à la clé « HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\MemoryManagement\PrefetchParameters » ;
  2. Mettez la valeur « EnablePrefetcher » à 0 (zéro).

Superfetch

Concernant le Superfetch, il précharge en mémoire (vive) les programmes les plus utilisés. Mais deux écoles s’affrontent : certains préconisant de le désactiver et d’autres de le laisser travailler.

Son impact en écriture est bien plus modéré et le gain de performances (lorsque activé) est, paraît-il, perceptible. Du moins, certaines personnes rencontraient des problèmes de performances s’ils venaient à le désactiver (micro-lags dans des jeux, par exemple).

Ce que je préconise par conséquent, c’est de ne pas le désactiver.

Si toutefois vous décidez du contraire, il vous suffira de désactiver le service « Superfetch ». Tout simplement.

Désactiver la date de dernier accès

Windows enregistre la date de dernier accès de tous les fichiers que vous utilisez, même si aucune modification n’est effectuée ! Concrètement, à chaque fois que vous (ou un programme) accédez à un fichier (même en lecture), Windows en garde la trace. Imaginez le nombre d’écritures inutiles que vous pourriez éviter…

Heureusement, il est possible de désactiver ce mécanisme :

  1. Ouvrez une console en tant qu’administrateur ;
  2. Entrez la commande « fsutil behavior set disablelastaccess 1″ ;
  3. Validez et redémarrez l’ordinateur.

La date de dernier accès prendra dorénavant pour valeur la date de modification du fichier.

Pas de panique, il est possible de revenir en arrière et réactiver la date de dernier accès en entrant la commande « fsutil behavior set disablelastaccess 0″ ;)

Les autres astuces…

Je peux citer en vrac (à compléter, n’hésitez pas à proposer vos astuces !) :

Sources et références

Quelques liens qui m’ont permis d’écrire cet article et pour approfondir le sujet :

[.NET] Convertir un timestamp POSIX en date

vendredi 25 octobre 2013 à 18:02

Ceci est le tout premier article consacré à la programmation avec le Framework .NET.

Tous les codes donnés sont écrits en C#, mais peuvent être aisément convertis dans n’importe quel autre langage .NET de votre choix (VB.NET, C++/CLI, etc).

Préambule

On commence en douceur avec un snippet permettant de convertir un timestamp POSIX en date traditionnelle ;)

C’est toujours pratique de l’avoir sous le coude au cas où !

Qu’est-ce qu’un « timestamp POSIX » au fait ? C’est un nombre entier (codé sur 32 bits) représentant le nombre de secondes écoulées depuis le 1er janvier 1970 00:00:00 UTC, comme décrit dans la norme POSIX.

Code

Ce snippet convertit ce timestamp sous forme de chaîne de caractères représentant l’équivalent en date et heure locales :

String POSIXTimestampToDate(String timestamp)
{
    DateTime date = new DateTime(1970, 1, 1, 0, 0, 0);

    date = date.AddSeconds(Double.Parse(timestamp)).ToLocalTime();

    return date.ToString();
}

Exemple

En bonus et en guise d’exemple, voici comment extraire la date d’installation de Windows en utilisant ce snippet (en effet, celle-ci est stockée dans le registre sous la forme d’un timestamp POSIX) :

using Microsoft.Win32;

String GetSystemInstallDate()
{
    String data = Registry.GetValue("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion", "InstallDate", "").ToString();

    return POSIXTimestampToDate(data);
}

Exemple de la sortie d'une application affichant la date d'installation.

Exemple de la sortie d’une application affichant la date d’installation.

La légende de Hugh Williams

lundi 29 juillet 2013 à 15:16

La légende prend place dans le détroit de Menai, un bras de mer peu profond séparant l’île d’Anglesey du reste du pays de Galles (Grande-Bretagne).

Carte Détroit Menai

Voir l’emplacement sur Google Maps.

La légende conte les faits suivants :

Le 5 décembre 1664, dans le détroit de Menai, un bateau coule à cause d’énormes marrées : 81 passagers meurent, ne laissant qu’un rescapé, nommé Hugh Williams.

Le 5 décembre 1785, un autre navire sombre dans le détroit. Une fois de plus, tout le monde meure à bord, à l’exception d’un homme : Hugh Williams !

Le 5 décembre 1820, un autre bateau connaît le même sort funeste et ne laisse qu’un seul survivant… il se nomme, là encore, Hugh Williams !

Trois navires qui coulent dans le même lieu, un 5 décembre et ne laissant qu’un seul rescapé, toujours nommé Hugh Williams ! Ne vous y trompez pas, car, selon la légende, il s’agit bien à chaque fois d’un homme différent, mais portant – par une coïncidence incroyable – le même nom !

Comme toutes les légendes, les faits divergent à quelques détails près selon les sources : les mêmes prénoms et noms, mais pas à la même date ; deux rescapés, un oncle et son neveu, tous deux nommés Hugh Williams… Quoi qu’il en soit, il est toujours question d’une ou plusieurs personnes nommées Hugh Williams et ayant survécus à des naufrages.

Mais au fond, quelle est la part de vérité de cette légende impressionnante ?

Le détroit de Menai, très dangereux pour les navires

En premier lieu, il faut noter que la côte du Pays de Galles est une zone très dangereuse pour les navires, car c’est une des plus exposées aux intempéries du Royaume-Uni ! De nombreuses histoires de naufrages existent chez les britanniques pour la simple et bonne raison qu’il y a effectivement eu énormément de naufrages, surtout le long de la côte nord du Pays de Galles. Ainsi, il n’est pas étonnant de trouver de nombreuses légendes à ce sujet.

Carte des naufrages au Pays de Galles

Carte des naufrages au nord du Pays de Galles et aux larges de l’île d’Anglesey. Source.

Même si la légende n’en mentionne que trois, mais il y a eu, en réalité, plus de 300 naufrages dans cette zone ! Cela signifie qu’il y eut, au pire, que trois naufrages sur plus de trois cents (donc 1%) qui eurent comme rescapés des Hugh Williams. Toujours une sacrée coïncidence, certes, mais bien plus modérée !

L’hiver, le moment propice

Concernant la date, identique à chaque fois, il peut y avoir une raison toute simple à cela : c’est l’hiver !

L'hiver vient

« L’hiver vient ». Source.

En effet, on peut soupçonner que la plupart des naufrages ont lieu pendant l’hiver, particulièrement dans une zone à risques comme le détroit de Menai : un temps humide, venteux et orageux (climat hivernal typique du Pays de Galles), une mauvaise visibilité et des eaux plus froides… La recette idéale pour créer des épaves, en maximisant le nombre de décès !

Hugh Williams, ersatz de John Smith

Le nom lui-même est, en fait, peu surprenant quand on sait que le nom de famille « Williams » est très répandu au Pays de Galles. Sans surprises également, le prénom « Hugh » est très populaire chez les gallois !

Finalement, le nom de « Hugh Williams » est l’équivalent gallois du « John Smith » anglais : un nom qui sonne terriblement populaire, parfait pour nommer un anonyme… ou le protagoniste d’une histoire.

Illustration de John Smith

Exemple d’un John Smith parmi tant d’autres. © Disney. Source.

Du fait, que les survivants se nomment « Hugh Williams » n’est pas si étonnant et d’une moindre coïncidence que s’ils s’étaient tous appelés, par exemple, Zaphod Beeblebrox !

Le conte est bon

Alors, légende ou faits divers réels ? Difficile d’écarter la piste de la légende en l’absence de preuves concrètes et devant les faits rapportés !

Il faut dire que tous les ingrédients d’une bonne légende sont là :

Il n’en faut parfois pas plus pour que naisse une légende ;)

Néanmoins, c’est toujours une bonne histoire à raconter autour d’un feu…

Librement inspiré et adapté de cet article anglais.

Extraire un Blu-ray en MKV et faire sauter la protection

samedi 13 juillet 2013 à 14:49
Dans la continuité de cet article expliquant comment extraire (ripper) ses DVD, voici le tutoriel concernant les Blu-ray !

Le problème est qu’il existe peu d’outils gratuits pour extraire les vidéos d’un Blu-ray sous Windows. La difficulté est renforcée par le fait qu’ils sont protégés (par AACS), qu’il est nécessaire de faire « sauter » pour pouvoir le lire sur le support de notre choix (téléphone, tablette, console, etc). Heureusement, après de nombreuses recherches, j’ai trouvé mon bonheur et je vous partage la marche à suivre ;)

Logo du Blu-ray Disc

Cela s’écrit officiellement « Blu-ray Disc », casse comprise !

Avant-propos

L’objectif de ce tutoriel est d’extraire un Blu-ray protégé (film du commerce) et d’en faire un MKV brut, c’est-à-dire sans protection et dans la qualité d’origine (pas de réencodage), dans le but de pouvoir en faire une copie de sauvegarde ou le réencoder dans la résolution et le codec souhaités (cette étape ne sera pas expliquée) !

Comme les flux extraits (vidéos et audios) ne sont pas réencodés, vous avez la garantie d’avoir une qualité identique à celle présente sur le Blu-ray.

Par contre, ce ne sera pas une copie « parfaite », dans le sens où il manquera des titres et des langues dans le cadre de ce tutoriel. On embarquera juste le strict nécessaire. Mais dans le cas d’une sauvegarde, vous pouvez très bien tout extraire au sein du MKV (langues, sous-titres et vidéos) !

Il est inutile de préciser qu’un ordinateur performant est de rigueur. Dans cette situation, un processeur à plusieurs cœurs n’est pas de trop !

Un seul programme (gratuit) est utilisé : MakeMKV. Celui-ci peut donc « casser » la protection AACS (opération légale dans le cadre d’une copie privée) et extraire les flux sous forme d’un unique MKV (évidemment très lourd).

Marche à suivre

1. En premier lieu, téléchargez et installez le programme MakeMKV. Veuillez noter que le programme MakeMKV est gratuit pendant sa phase bêta (qui dure déjà depuis un bon moment), mais il requiert tout de même une clé de licence pour fonctionner ! Celle-ci change à peu près tous les (deux ?) mois. Vous pouvez la retrouver à cette adresse et, ainsi, réactivez la licence de mois en mois…

2. Insérez le Blu-ray dans votre lecteur (ici, le film « Bienvenue à Zombieland »).

3. Lancez MakeMKV (entrez la clé de licence si nécessaire) puis suivez les indications données dans les images ci-dessous :

Capture d'écran de MakeMKV, étape 1

On commence en douceur…

Capture d'écran de MakeMKV, étape 2

Attention à sélectionner le bon titre, sous peine de recommencer l’opération !

4. Laissez faire l’extraction ! Cela peut prendre un moment (environ 30 minutes chez moi)… Prévoyez suffisamment d’espace disque libre pour ne pas avoir de surprises !

5. C’est terminé ! N’oubliez pas que le MKV obtenu est très lourd, car c’est le flux brut du Blu-ray (non-recompressé) ! Vous pouvez à présent le convertir dans n’importe quel autre format à l’aide de votre encodeur préféré ;)