PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

La vache libre : Gnome Commander 1.4 publié

mercredi 19 mars 2014 à 19:09

gnome-commander

Gnome-Commander est un logiciel libre que je vous ai déjà présenté dans ce billet, dont le but est de fournir aux utilisateurs un gestionnaire de fichiers à doubles panneaux (horizontal ou vertical) pour Gnome, disposant de nombreuses fonctions avancées. Il permet entre autres d’utiliser différentes options réseau (FTP, Samba), d’utiliser la navigation par onglets, d’accéder à de nombreuses fonctions depuis le menu contextuel du clic droit, d’effectuer des opérations courantes et avancées sur les fichiers et les répertoires,  de mémoriser des chemins d’accès à l’aide de bookmarks, d’utiliser des thèmes et des plugins tiers, d’utiliser la ligne de commande et encore beaucoup d’autres choses encore. C’est vraiment une solution très complète et pour résumer, il n’a vraiment rien à envier à d’autres ténors du genre. Après une longue période de ralentissement dans son développement, une nouvelle version stable 1.4 de Gnome Commander a été publiée récemment, embarquant sont lot d’améliorations et de nouvelles fonctionnalités.

On notera par exemple l’arrivée d’un nouveau thème « Green Tiger », dont les couleurs sont assez agréables :

gnome-commander-tigre-theme

On notera également l’introduction du support de la tabulation et l’apparition d’un mode « One instance mode », qui permet de ne pas démarrer de nouvelle instance et de reprendre dans les répertoires ou vous étiez à l’arrêt de l’application.

Vous pourrez également profiter d’une nouvelle option « LS_COLORS », grâce à laquelle vous pourrez choisir les couleurs que vous souhaitez utiliser via une palette dédiée.

Vous pouvez voir la palette en question sur la capture ci-dessous :

Capture du 2014-03-19 17:28:27

Et un exemple de ce que ça donne quand vous changez les couleurs :

Capture du 2014-03-19 17:29:01

On notera enfin qu’une demande de confirmation a été intégrée lors des glisser/déposer, que de nouveaux raccourcis clavier ont été ajoutés et que la vitesse d’exécution du programme a été optimisée grâce à un nettoyage du code et à une amélioration des partie C++.

Si vous voulez en savoir plus sur cette nouvelle version de Gnome-Commander, vous pouvez consulter l’annonce de sortie officielle ou consulter le changelog complet.

Cette nouvelle version n’est pas encore disponible dans les dépôts officiels de toutes les distributions GNU/Linux, mais cela ne saurait pas tarder. Si vous êtes trop impatients vous pouvez déjà vous rabattre sur les sources disponibles depuis la page de téléchargement, où vous trouverez également les binaires des versions plus anciennes.

Vous pouvez aussi tester la version 1.5.0 de Gnome-Commander, disponible depuis les dépôts Github (Gardez à l’esprit qu’il ne s’agit pas là d’une version stable).

gnme-commander-about

Quoi qu’il en soit si vous ne connaissez pas encore cette application je vous conseille vivement de l’essayer, car elle vaut son pesant d’or.

Amusez-vous bien.

source

Gravatar de La vache libre
Original post of La vache libre.Votez pour ce billet sur Planet Libre.

Emmanuel Kasper : Le bug numero un d'Ubuntu vu par les statistiques de Wikipedia

mercredi 19 mars 2014 à 17:31
Il y a un an, Mark Shuttleworth d'Ubuntu / Canonical annonçait avec un certain triomphalisme que Microsoft n'avait plus une part de part de marché dominante dans l'informatique personnelle, fermant ainsi le bug n°1 à l'origine d'Ubuntu. Effectivement le boom d'Android et d'IOS ont rejeté les parts de marché de Windows bien en arrière.
Est ce une victoire pour le consommateur ? Dans un certain sens, oui, car un choix de plateformes permet d'éviter un monopole de l' accès à l'information.
Y a-t-il derrière un succès pour le logiciel libre ? Faiblement, il s'agit toujours globalement de plateformes fermées, le cœur libre de IOS (Darwin) et celui d'Android (ASOP) se réduisant à une part de plus en plus congrue.
On peut observer cette évolution des parts de marché de façon très intéressante en consultant les statistiques de fréquentations de Wikipedia triées par système d'exploitation.

On se rend alors compte que Windows est en dessous de 50% de la barre des visites, Android tournant à 11% et les distributions Linux autour de 1% (FreeBSD et OpenBSD faisant une performance honorable en apparaissant même dans ces statistiques ... )
N'en doutant pas, une grande part des utilisateurs d'IOS vus dans ces statistiques on peut sans doute un PC quelque part,  mais alors ces statistiques indiquent que le PC est beaucoup moins utilisé, et recouvre alors bien moins d'importance.
Il y a quatre ans, Windows caracolait encore en tête avec 87 % des visites ...

Gravatar de Emmanuel Kasper
Original post of Emmanuel Kasper.Votez pour ce billet sur Planet Libre.

Monnaie libre : Ukraine, Masse Monétaire et TRM

mercredi 19 mars 2014 à 12:14

Cette semaine j’ai voulu m’intéresser à l’Ukraine. Tout d’abord un petit plan qui nous donne la répartition des voix aux élections de 2004 (2010 n’y a rien changé, l’Ukraine est politiquement comme « coupée en deux ») :

Ukraine élections 2004

Ukraine élections 2004

Ce qui nous intéresse ici est bien entendu le nerf du stress ambiant, la masse monétaire Ukrainienne; dont nous pouvons retrouver les agrégats M1, M2 et M3 dans le bulletin mensuel de la banque centrale d’Ukraine.

La monnaie de l’Ukraine est le hryvnia dont le sigle est UAH.

Billets Ukrainiens

Billets Ukrainiens

Je n’ai pris que les données de 12 mois en 12 mois, de Novembre à Novembre, vu les données du dernier bulletin disponible, et en remontant jusqu’à 2005.

M1,M2 et M3, 2005 - 2010

M1,M2 et M3, 2005 – 2010

Premier point, un peu comme au Vénézuela que nous avions vu récemment, la croissance monétaire est forte, on se promène allègrement sur une moyenne de 20% par an de création monétaire M3 entre 2005 et 2014.

Une création monétaire dont on se doute bien qu’elle n’est pas du tout effectuée avec un soucis de symétrie spatiale envers les citoyens Ukrainiens, d’où le soucis inflationniste pour ceux qui ne participent pas de cette création monétaire, alors qu’au sein d’une monnaie libre, la compréhension directe du quantitatif et du relatif démontre qu’il n’y a pas de nuisance, ni inflationniste, ni déflationniste.

Maintenant passons à l’analyse relativiste.

Pyramide des âges de l'Ukraine

Pyramide des âges de l’Ukraine en 2005

L’espérance de vie en Ukraine en 2014 est de 70 ans, ce qui, pour une double masse monétaire M3 de 1760 milliards UAH et une population de 45 millions d’habitants nous donne :

Les Ukrainiens devraient donc tous participer de leur monnaie commune à un niveau proche de 332 UAH / mois assurant ainsi la symétrie temporelle.

TRM, symétrie temporelle, cf Béthune 2014

TRM, symétrie temporelle cf Béthune 2014

La TRM annonce comme résultat prédictif que la violation sur longue période de la symétrie spatio-temporelle conduit à des résultats qui sont de l’ordre des insurrections, révolutions, ou guerres, du fait de la non-cohérence cumulée de l’outil monétaire avec les quatre libertés économiques, une somme de nuisances cumulées sur une longue période réalisant irrévocablement une nuisance résultante d’ordre supérieur.

Pour finir une petite récréation, l’Ukraine fait partie des plus grandes nations échiquéennes, avec notamment un champion exceptionnel, Vassily Ivantchuk, qui aurait pu briguer le titre mondial s’il n’avait été sportivement irrégulier. Au niveau du jeu les amateurs tout comme les Grands Maîtres lui reconnaissent un génie sans pareil.

Vassili Ivantchouk en 2007

Vassili Ivantchouk en 2007

Une de ses victoires face au Champion du Monde (1985 – 2000) Garry Kasparov :

(Visited 109 times, 4 visits today)

Gravatar de Monnaie libre
Original post of Monnaie libre.Votez pour ce billet sur Planet Libre.

Wooster by CheckmyWebsite : Les règles YSlow en français

mercredi 19 mars 2014 à 11:30

YSlow est un projet se basant sur les «règles pour avoir des sites web hautement performants» de Yahoo!. Il permet d’analyser les pages web et de comprendre pourquoi elles peuvent être lentes.

Parmi ces fonctionnalités, il est possible de noter:

Nous allons bientôt utiliser les règles YSlow dans la console Check my Website afin de fournir à chacun les indicateurs permettant de faire progresser la performance de ses sites web. Nous devions donc trouver pour nos utilisateurs francophones une traduction des règles en français,

Comme nous n’avons pas trouvé, nous nous y sommes attelés! Du coup, au moment d’entamer la traduction pour nos besoins internes, nous nous somme dits que cette traduction pourrait certainement intéresser du monde et avons donc décidé de publier un petit projet Open Source autour de cette traduction.

L’initiative étant complètement ouverte, nous espérons que des contributeurs viendront enrichir le nombre de traductions disponibles et améliorer celles existantes.

La chaîne de publication

Le projet est hébergé sur Github bien sûr. Chaque traduction a un dossier dans lequel se trouvent les 35 règles. Ainsi le français se trouve dans le dossier content/fr.

Les fichiers sont nommés depuis le nom de «code» de chaque règle. Exemple: ycdn.md pour la règle concernant les CDN. Chaque fichier est écrit au format Markdown avec un en-tête au format YAML.

Le site du projet est généré à l’aide de Hugo, le générateur de sites statiques et publié sur Github Pages.

Participer au projet

Comme à l’accoutumée, il y a beaucoup de façon de participer à un projet Open Source, même modeste comme celui-ci.

Vous pouvez aider à améliorer le code HTML, CSS et Javascript du projet. Des règles de référence comme celles-ci peuvent êtrer traduites de façon plus riches sémantiquement dans le code HTML par exemple. Il est possible d’apporter un soin particulier à la typographie et au fait que ces règles soit lisibles sur tous types de support.

Vous pouvez participer au projet en signalant toute erreur, ou pire, contre-sens de traduction que je pourrais avoir fait. Il suffit de forker les règles, apporter des améliorations et nous faire une pull-request… La routine Github quoi!

Vous pouvez aider à améliorer l’ergonomie et le design du site qui ont été fait pour l’occasion. Même si vous ne souhaitez pas faire l’intégration dans Hugo, un thème en HTML, CSS et Javascript peut suffire.

Vous pouvez démarrer une nouvelle traduction si vous maîtrisez une langue étrangère. Il suffit pour cela de copier le dossier content/en du projet de le renommer en content/es pour l’espagnol par exemple. Il reste juste à changer la locale dans chaque règle et c’est tout!

Vous pouvez faire connaître le projet de façon à ce que de nouvelles traductions puissent voir le jour.

Installation locale

Rien de compliqué si vous souhaitez faire tourner le site du projet en local pour travailler soit sur le contenu, soit sur la forme.

Téléchargez Hugo pour Windows, OSX, Linux mais aussi FreeBSD ou NetBSD et clonez le dépôt du projet. Déplacez-vous dans le répertoire ainsi obtenu et tapez hugo server -w -b "". Admirez le résultat sur http://localhost:1313!

Notre attachement au Libre

Nous n’hésiterons pas à chaque fois que l’occasion se présente à reverser sous forme de contributions Open Source les contenus ou code que nous produisons et qui pourrait être d’utilité commune. C’est pour nous, comme avec le «Free Forever For Foss - notre service offert à tous les projets Open Source», une façon de continuer à marquer notre attachement au mouvement du Libre en général.

Gravatar de Wooster by CheckmyWebsite
Original post of Wooster by CheckmyWebsite.Votez pour ce billet sur Planet Libre.

®om : Compiler un exécutable pour Android

mercredi 19 mars 2014 à 00:39

android

Je vais présenter dans ce billet comment compiler un exécutable ARM pour Android, l’intégrer à un APK et l’utiliser dans une application.

À titre d’exemple, nous allons intégrer un programme natif, udpxy, dans une application minimale de lecture vidéo.

Contexte

Le framework multimédia d’Android ne supporte pas nativement la lecture de flux UDP multicast (1, 2).

Il est possible, pour y parvenir, d’utiliser des lecteurs alternatifs, par exemple basés sur ffmpeg/libav (l’un est un fork de l’autre), tel que libvlc.

Il existe par ailleurs un outil natif, sous licence GPLv3, relayant du trafic UDP multicast vers du HTTP : udpxy. N’importe quel client supportant HTTP (comme le lecteur natif d’Android) peut alors s’y connecter. C’est cet outil que nous allons utiliser ici.

udpxy

Compilation classique

Avant de l’intégrer, comprenons son utilisation en le faisant tourner sur un ordinateur classique (Debian Wheezy 64 bits pour moi).

Il faut d’abord le télécharger les sources, les extraire et compiler :

wget http://www.udpxy.com/download/1_23/udpxy.1.0.23-9-prod.tar.gz
tar xf udpxy.1.0.23-9-prod.tar.gz
cd udpxy-1.0.23-9/
make

Si tout se passe bien, nous obtenons (entre autres) un binaire udpxy.

Test de diffusion

Pour tester, nous avons besoin d’une source UDP multicast. Ça tombe bien, VLC peut la fournir. Pour obtenir le résultat attendu par udpxy, nous devons diffuser vers une adresse multicast (ici 239.0.0.1). Par exemple, à partir d’un fichier MKV :

cvlc video.mkv ':sout=#udp{dst=239.0.0.1:1234}'

En parallèle, démarrons une instance d’udpxy, que nous venons de compiler :

./udpxy -p 8379

Cette commande va démarrer un proxy relayant de l’UDP multicast vers de l’HTTP, écoutant sur le port 8379.

Dans un autre terminal, nous pouvons faire pointer VLC sur le flux ainsi proxifié :

vlc http://localhost:8379/udp/239.0.0.1:1234/

Normalement, le flux doit être lu correctement.

Remarquez qu’udpxy pourrait très bien être démarré sur une autre machine (il suffirait alors de remplacer localhost par son IP). Mais pour la suite, nous souhaiterons justement exécuter udpxy localement sur Android.

Bien sûr, avec VLC, nous n’aurions pas besoin d’udpxy. Le flux est lisible directement avec la commande :

vlc udp://@239.0.0.1:1234/

Android

Notez que certains devices Android ne supportent pas le multicast, la réception de flux multicast ne fonctionnera donc pas.

Maintenant que nous avons vu comment fonctionne udpxy, portons-le sur Android.

Notre but est de le contrôler à partir d’une application et le faire utiliser par le lecteur vidéo natif.

Pour cela, plusieurs étapes sont nécessaires :

  1. obtenir un binaire ARM exécutable pour Android ;
  2. le packager avec une application ;
  3. l’extraire ;
  4. l’exécuter.

Exécutable ARM

Pré-compilé

Pour obtenir un binaire ARM exécutable, le plus simple, c’est évidemment de le récupérer déjà compilé, s’il est disponible (c’est le cas pour udpxy). Dans ce cas, il n’y a rien à faire.

Pour le tester, transférons-le sur le téléphone et exécutons-le :

adb push udpxy /data/local/tmp
adb shell /data/local/tmp/udpxy -p 8379

Si tout se passe bien, cette commande ne produit en apparence rien : elle attend qu’un client se connecte. Pour valider le fonctionnement, si le téléphone est sur le même réseau que votre ordinateur, vous pouvez utiliser cette instance (ARM) d’udpxy comme proxy entre la source multicast et un lecteur VLC local :

vlc http://>:8379/udp/239.0.0.1:1234/

Pour obtenir l’ip du téléphone :

adb shell netcfg | grep UP
Compilation ponctuelle

S’il n’est pas disponible, il va falloir le compiler soi-même à partir des sources, ce qui nécessite le NDK Android, fournissant des chaînes de compilation pré-compilées.

Il suffit alors d’initialiser la variable d’environnement CC pour pointer sur la bonne chaîne de compilation (adaptez les chemins et l’architecture selon votre configuration) :

export NDK=~/android/ndk
export SYSROOT="$NDK/platforms/android-19/arch-arm"
export CC="$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=$SYSROOT"
make

Bravo, vous venez de générer un binaire udpxy pour l’architecture ARM.

Compilation intégrée

La compilation telle que réalisée ci-dessus est bien adaptée à la génération d’un exécutable une fois de temps en temps, mais s’intègre mal dans un système de build automatisé. En particulier, un utilisateur avec une architecture différente devra adapter les commandes à exécuter.

Heureusement, le NDK permet une compilation plus générique.

Pour cela, il faut créer un répertoire jni dans un projet Android (ou n’importe où d’ailleurs, mais en pratique c’est là qu’il est censé être), y mettre les sources et écrire des Makefiles.

Créons donc un répertoire jni contenant les sources. Vu que nous les avons déjà extraites, copions-les à la racine de jni/ :

cp -rp udpxy-1.0.23-9/ jni/
cd jni/

Créons un Makefile nommé Android.mk :

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := udpxy
LOCAL_SRC_FILES := udpxy.c sloop.c rparse.c util.c prbuf.c ifaddr.c ctx.c mkpg.c \\
                   rtp.c uopt.c dpkt.c netop.c extrn.c main.c

include $(BUILD_EXECUTABLE)

Puis compilons :

ndk-build

ndk-build se trouve à la racine du NDK.

Le binaire sera généré dans libs/armeabi/udpxy.

Afin d’organiser les projets plus proprement, il vaut mieux mettre les sources d’udpxy et son Android.mk dans un sous-répertoire spécifique au projet (dans jni/udpxy/). Dans ce cas, il faut rajouter un fichier jni/Android.mk contenant :

include $(call all-subdir-makefiles)

Packager avec l’application

Je suppose ici que vous savez déjà créer une application Android.

Nous devons maintenant intégrer le binaire dans l’APK. Pour cela, il y a principalement deux solutions :

  • l’intégrer aux ressources (dans res/raw/) ;
  • l’intégrer aux assets (dans assets/).

Vu que les projets library ne gèrent pas les assets, nous allons utiliser une ressource raw.

Il faut donc copier le binaire dans res/raw/, à chaque fois qu’il est généré (à automatiser donc).

Extraire l’exécutable

L’exécutable est bien packagé avec l’application, et comme toutes les ressources, nous pouvons facilement obtenir un InputStream (le fonctionnement est similaire pour les assets).

Mais pour l’exécuter en natif, le binaire doit être présent sur le système de fichiers. Il faut donc le copier et lui donner les droits d’exécution. Sans la gestion des exceptions, cela donne :

// "/data/data//files/udpxy"
File target = new File(getFilesDir(), "udpxy")
InputStream in = getResources().openRawResource(R.raw.udpxy);
OutputStream out = new FileOutputStream(target);
// copy from R.raw.udpxy to /data/data//files/udpxy
FileUtils.copy(in, out);
// make the file executable
FileUtils.chmod(target, 0755);

Et les parties intéressantes de FileUtils :

public static void copy(InputStream in, OutputStream os) throws IOException {
    byte[] buf = new byte[4096];
    int read;
    while ((read = (in.read(buf))) != -1) {
        os.write(buf, 0, read);
    }
}

public static boolean chmod(File file, int mode) throws IOException {
    String sMode = String.format("%03o", mode); // to string octal value
    String path = file.getAbsolutePath();
    String[] argv = { "chmod", sMode, path };
    try {
        return Runtime.getRuntime().exec(argv).waitFor() == 0;
    } catch (InterruptedException e) {
        throw new IOException(e);
    }
}

Exécuter le programme natif

Maintenant que le binaire est disponible sur le système de fichiers, il suffit de l’exécuter :

String[] command = { udpxyBin.getAbsolutePath(), "-p", "8379" };
udpxyProcess = Runtime.getRuntime().exec(command);

Le lecteur vidéo pourra alors utiliser l’URI proxifié comme source de données :

String src = UdpxyService.proxify("239.0.0.1:1234");

Projets

andudpxy

Je mets à disposition sous licence GPLv3 le projet library andudpxy, qui met en œuvre ce que j’ai expliqué ici :

git clone http://git.rom1v.com/andudpxy.git

(ou sur github)

Pour l’utiliser dans votre application, n’oubliez pas de référencer la library et de déclarer le service UdpxyService dans votre AndroidManifest.xml :

 android:name="com.rom1v.andudpxy.UdpxyService" />

Pour démarrer le démon :

UdpxyService.startUdpxy(context);

et pour l’arrêter :

UdpxyService.stopUdpxy(context);

andudpxy-sample

J’ai également écrit une application minimale de lecture vidéo qui utilise cette library :

git clone http://git.rom1v.com/andudpxy-sample.git

(ou sur github)

C’est toujours utile d’avoir une application d’exemple censée fonctionner ;-)

L’adresse du flux UDP multicast à lire est écrite en dur dans MainActivity (et le flux doit fonctionner lors du démarrage de l’activité) :

private static final String ADDR = "239.0.0.1:1234";

Compilation

Après avoir cloné les 2 projets dans un même répertoire parent, renommez les local.properties.sample en local.properties, éditez-les pour indiquer le chemin du SDK et du NDK.

Ensuite, allez dans le répertoire andudpxy-sample, puis exécutez :

ant clean debug

Vous devriez obtenir bin/andudpxy-sample-debug.apk.

Bien sûr, vous pouvez aussi les importer dans Eclipse (ou un autre IDE) et les compiler selon vos habitudes.

Conclusion

Nous avons réussi à compiler et exécuter un binaire ARM sur Android, packagé dans une application.

Ceci peut être utile pour exécuter du code déjà implémenté nativement pour d’autres plates-formes, pour faire tourner un démon natif… Par exemple, le projet Serval (sur lequel j’ai un peu travaillé) utilise un démon servald, qui tourne également sur d’autres architectures.

Ce n’est cependant pas la seule manière d’exécuter du code natif dans une application : la plus courante est d’appeler des fonctions natives (et non un exécutable) directement à partir de Java, en utilisant JNI. L’une et l’autre répondent à des besoins différents.

Gravatar de ®om
Original post of ®om.Votez pour ce billet sur Planet Libre.