PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

Framablog : MyPads : le développement est lancé

jeudi 11 décembre 2014 à 11:54
(english version below)

Notre éditeur de texte libre et collaboratif Framapad est une implémentation du logiciel libre Etherpad. Ce  service est mis à la disposition de tous et cela démontre en même temps que ce service peut être proposé de manière décentralisée (même si nous sommes peu nombreux à proposer une instance publique d’Etherpad, des milliers d’instances privées existent).

Au mois de juin dernier, Framasoft a lancé une campagne de financement participatif visant à contribuer activement à l’amélioration d’Etherpad pour y ajouter la gestion des comptes utilisateurs, des groupes et des pads privés. Il n’aura fallu que trois semaines pour que l’objectif soit atteint. Nous vous en remercions une fois encore.

Le but de ce projet  est de permettre aux utilisateurs d’Etherpad, et donc de Framapad, de créer un compte en leur nom, d’y associer des groupes et, pour chaque groupe, des pads. Ces pads pourront être publics, privés sur invitation ou encore d’accès restreints par l’usage d’un mot de passe. Le tout doit prendre la forme d’un plugin pour Etherpad, publié sous licence libre et s’installant de la même manière que tous les autres plugins du logiciel.

Il était prévu que la réalisation débute à la rentrée et que le plugin soit livré en fin d’année. La feuille de route a quelque peu glissé du fait de la surcharge temporaire du prestataire sélectionné. Le coup d’envoi est néanmoins lancé cette semaine et l’ensemble du développement se déroulera sur notre Gitlab via le projet ep_mypads https://git.framasoft.org/framasoft/ep_mypads .

Le plugin est attendu pour la fin du mois de février 2015. Il devrait comporter de petits bonus par rapport au cahier des charges initial.
Les premières semaines seront consacrées à l’écriture du code serveur, à sa documentation et à ses tests. Il faudra attendre début 2015 avec la création de l’interface graphique afin que MyPads puisse commencer à être testé.

Pour rappel, le cahier des charges originel est disponible sur ce pad : http://lite4.framapad.org/p/LEpEOUoQb3/timeslider#24.

Un point sur l’avancement du développement sera réalisé environ toutes les deux semaines.

Campagne Framapad


——-

MyPads : development launched

Our free/open source and collaborative editor named Framapad, is an application of the free software Etherpad. This GoogleDoc-like service is opened for everybody and demonstrate simultaneously that it can be proposed in a decentralized way (even if only few organizations can propose such an open service, thousands private instances are running).

In last June, Framasoft has launched a crowdfunding campaign aiming to to contribute actively to Etherpad’s improvement, by adding the management of users, groups and private pads. Only three weeks have been necessary to reach the goal. We want to thank you again.

The purpose of this funding is to let Etherpad and so Framapad’s users create an account, link some groups and for each group some pads. These ones may be public, privates with invitation or protected by a password. All of this must be an Etherpad plugin, pubished under open source license. This have to be installed like any other Etherpad plugin.

The beginning of the plugin’s cofing was planned at the fall this year. The roadmap has moved forward because of the contractor’s overloading. However the project is launched this week and the development will be made on our Gitlab instance with the ep_mypads project  https://git.framasoft.org/framasoft/ep_mypads

The plugin is expected on the end of February, 2015. It might include several little extra comparing to the original specifications.
First weeks will be dedicated to server side programming, its documentation and tests. You’ll have to wait for 2015 with the creation of the user interface if you want to test MyPads.

As a reminder, you will find the initial specifications on this pad http://lite4.framapad.org/p/LEpEOUoQb3/timeslider#24

A stage news will be made around every two weeks.


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

elementary OS : UEFI : bug fixé

jeudi 11 décembre 2014 à 11:11

Une petite news qui va faire plaisir à certains (dont moi !). Le bug UEFI a été marqué comme fixé !

UEFI : bug fixé

Cody Garver a réalisé ce petit miracle sur l'ajout du support de l'UEFI !

Pour ceux qui nous suivent, il faut savoir que c'est un sujet bien chaud au sein de la communauté : bon nombre d'utilisateurs d'elementary OS sont confrontés à ce problème sur leurs nouveaux portables. Seule solution : passer l'UEFI en mode LEGACY et désactiver le Secure Boot.

Ce fix a été validé par Daniel Foré himself il y a maintenant plus de 5 heures (soit une validation aux alentours de 4h50 heure française).

Autre point important, si vous regardez la liste des bugs, celle-ci ne contient plus de bug à corriger. Les différents fix ont été commité; Il y a donc une chance que la beta 2 sorte prochainement (il n'y a aucune position officielle de la part de l'équipe de développement, c'est une remarque personnelle.)

Freya Beta 2 - Bug List

Le billet UEFI : bug fixé a été publié sur elementary OS Fr - Communauté francophone d'elementaryOS

Gravatar de elementary OS
Original post of elementary OS.Votez pour ce billet sur Planet Libre.

Articles similaires

Artisan Numérique : Accélérer le démarrage du compilateur Closure avec NailGun

jeudi 11 décembre 2014 à 09:28

Contrairement aux idées reçues, une fois lancée, une application Java se comporte aussi bien qu'une autre en python, dotNet ou autre langage managé. Le gros problème n'est donc pas plus la rapidité de la VM que le temps nécessaire à sa mise en route. Sur une bonne machine, un outil comme Google Closure Compiler prend ainsi 3 secondes à chaque instance, et ce n'est clairement pas le temps qu'il faut pour compiler 100 lignes de JS ;-)

Heureusement il existe une solution rapide à mettre en oeuvre et très efficace : NailGun.

Les lenteurs du démarrage

Java est lent au lancement, c'est un fait tenace que les versions successives de la JVM ne font qu'atténuer. Et je suis bien en peine de le reconnaître mais la CLR (.net), sur ce point, a toujours été diablement plus efficace.

Les raisons de cette lenteur serait un peu longues à énumérer. Disons pour simplifier que coller des classes signées dans des fichiers zip implique, au démarrage de la VM, un ouverture, décompression, passage en revue de toutes les classes de tous les jars qui sont dans le CLASSPATH. Au regard de la taille du JDK, ce n'est finalement pas si lent que cela ;-)

D'un autre côté ce problème n'en est pas réellement un dans le cadre d'usage standard de Java : pour des services lancés sur du long terme. En revanche, s'agissant d'une commande simple, c'est une tout autre histoire.

Une bonne manière serait donc de ne pas avoir à effectuer ce travail à chaque lancement d'une commande. Et c'est exactement ce que réalise NailGun (littéralement "pistolet à clou") depuis prés de... pfff... Huit ans :)

Un serveur JVM

NailGun se compose d'une partie "serveur", écrite en Java, et un client en C. Le principe est finalement simple, le serveur étant écrit en Java induit à son lancement le chargement d'une instance de la JVM et bootstraping du JDK.

Le client n'a plus qu'à lui expédier, via TCP/IP, des noms de classes à exécuter. Le serveur lui renverra en retour les écritures faites par la classe dans sa sortie standard. Et le tour est joué.

Installation

Sur Debian c'est assez simple à installer. Un sudo apt-get install nailgun suffit . En revanche cela ne marchera pas car les mainteneurs ont eu la mauvaise idée de renommer le client ng-nailgun au lieu de ng. Et croyez moi, il n'aime pas cela du tout. Fort heureusement, la correction est assez simple :

gastonsudo ln -s /usr/bin/ng-nailgun /usr/bin/ng

Lancement du serveur

Pas de chichi ni de script d'init pour NailGun (même si c'est assez simple à réaliser). Un simple lancement à la mano en tâche de fond ferra l'affaire. La seule chose à bien faire avant est de définir un CLASSPATH comprenant le JAR de NailGun et celui des applications qui souhaitent en bénéficier. Ici il s'agit du compilateur Closure qui se trouve dans le dossier $PWD/libs

gastonexport CLASSPATH=$PWD/libs/compiler.jar:/usr/share/java/nailgun.jar
gastonjava com.martiansoftware.nailgun.NGServer &
NGServer started on all interfaces, port 2113

Voilà, ça roule, le serveur est en activité sur le port 2113.

Test du client

Pour voir un peu ce que cela donne, voyons une compilation Closure sans NailGun

gastontime java -jar libs/compiler.jar --js sources/server/server.js --js_output_file bin/server/server.js
5,00s user 0,08s system 216% cpu 2,341 total

Ok, donc 2.3 secondes pour 100 lignes de code. Voyons maintenant avec NailGun

gastontime ng com.google.javascript.jscomp.CommandLineRunner --js sources/server/server.js  --js_output_file bin/server/server.js
0,00s user 0,00s system 0% cpu 0,185 total

Et hop, on tombe à 185ms, ce qui change un peu tout vous en conviendrez.

Conclusion

Lorsque j'avais écris la première version de cet article, il y a tout juste 7 ans (!!!) je concluais par "Nailgun est une rustine pratique mais je l'espère bientôt obsolète. Le temps de chargement de Java doit pouvoir être encore à améliorer, ne serait-ce qu'en débridant le vérifieur de classes qui consomme beaucoup de ressources au démarrage."

En bien 7 ans plus tard j'en suis pour mes frais et NailGun, lui, est toujours d'actualité...

Gravatar de Artisan Numérique
Original post of Artisan Numérique.Votez pour ce billet sur Planet Libre.

Articles similaires

Artisan Numérique : Logger les octets transmits par expressjs

mercredi 10 décembre 2014 à 13:59

Vouloir logger les temps de rendu ou encore le volume de données transmis par requête pour une application nodejs/expressjs peut se révéler compliqué si l'on ne sait pas par quel bout prendre la chaîne des middlewares. L'idée ici est de vous proposer une méthode simple pour tout type de calcul dépendant d'un état pré-requête et post-requête.

Le besoin

Apache dispose de logs bien utiles qui permettent, entre autre, de connaître le status de réponse d'une requête ou encore le volume des données envoyées vers le client, voir, plus récemment, le temps en millisecondes du rendu d'une page.

Avec nodejs/expressjs cette fonctionnalité n'existe pas en standard. Il faut pour l'implémenter utiliser une petite astuce. Ce n'est pas bien sorcier, je vous rassure.

Middleware de base

Dans la mesure où cet article parle d'expressjs, et que vous êtes en train de le lire, je présume que vous êtes habitué au principe de middleware. Normalement un middleware fait partie d'une chaîne de middlewares. La requête entrante est passée au premier qui la traite ou la passe à son suivant, jusqu'à l'épuisement de la chaîne.

L'idée ici est donc de créer un middleware très simple qui va littéralement encadrer la chaine de traitement de sorte à permettre de déterminer un état avant l'émission des données et calculer ainsi les différences en sortie de chaîne (temps, octets envoyés, etc).

Pour cela partons d'un exemple bien stupide que nous initialisons ainsi:

mkdir test; cd test
npm install express

Puis dans le dossier, créez un fichier index.js que nous remplissons comme suit :

var express = require('express')
var app = express()

app.get('/', function (request, response) {
  console.log("j'envoie...");
  response.send('coucou')
})

var server = app.listen(3000, function () {
  var host = server.address().address;
  var port = server.address().port;
  console.log('ça écoute sur %s:%s', host, port)
})

Là, de base, notre exemple une fois lancé va afficher son coucou dés que l'on ira sur http://localhost:3000. Ajoutons maintenant notre middleware de log.

var express = require('express')
var app = express()

app.use(function(request, response, next) {
  console.log('Je log');
  if (typeof next === 'function') next();
});

app.get('/', function (request, response) {
  console.log("j'envoie...");
  response.send('coucou')
})

var server = app.listen(3000, function () {
  var host = server.address().address;
  var port = server.address().port;
  console.log('ça écoute sur %s:%s', host, port)
})

Encadrement de la chaîne de middlewares

À l'exécution de l'exemple précédent, le message Je log va arriver avant que le message J'envoie... ne vous parvienne. Aucun intérêt dans notre cas car à ce stade, rien n'a été envoyé et nous ne pourrons donc avoir ni le nombre d'octets émis, ni le code de statut de la page. Pas de souci, une petite modification va inverser la situation.

var express = require('express')
var app = express()

app.use(function(request, response, next) {
  var end = response.end;
  response.end = function() {
    end.apply(this, arguments);
    console.log('Je log');
  }
  if (typeof next === 'function') next();
});


app.get('/', function (request, response) {
  console.log("j'envoie...");
  response.send('coucou')
})

var server = app.listen(3000, function () {
  var host = server.address().address;
  var port = server.address().port;
  console.log('ça écoute sur %s:%s', host, port)
})

L'astuce est simple, nous allons écraser au début du traitement (car notre middleware est le premier de la chaîne) la fonction response::end qui est invoquée par expressjs au moment de libérer le socket. Bien évidement avant de l'écraser, nous la sauvegardons dans une variable locale au middleware. Nous l'invoquerons ensuite dynamiquement via end.apply(this, arguments) lorsque notre end sera appelé pour qu'expressjs n'y voit que du feu.

La trace en console est collée juste après cet appel de sorte à ce que si nous lançons maintenant l'exemple, le message Je log arrive bien après j'envoie.

middleware final

C'est presque gagné, il ne nous reste plus qu'à coder les statistiques.

Notez que vous devez en plus installer le paquet microtime pour que ce qui suit fonctionne.

var express = require('express')
var microtime = require('microtime');
var app = express()

app.use(function(request, response, next) {
  var end = response.end;
  request.stats = {
    temps: microtime.now(),
    octets: request.socket.bytesWritten
  }
  response.end = function() {
    end.apply(this, arguments);
    var octets = request.socket.bytesWritten-request.stats.octets;
    var temps = microtime.now()-request.stats.temps;
    console.log('Octets envoyés : %d', octets);
    console.log('Temps pris     : %d', temps);
    console.log('Code de retour : %d', response.statusCode);
  }
  if (typeof next === 'function') next();
});

app.get('/', function (request, response) {
  console.log("j'envoie...");
  response.send('coucou')
})

var server = app.listen(3000, function () {
  var host = server.address().address;
  var port = server.address().port;
  console.log('ça écoute sur %s:%s', host, port)
})

Et voilà, nous avons à chaque exécution de requête, le nombre d'octets envoyés, le temps pris en microsecondes, et le code de retour. Le principe a été d'ajouter en plus de l'écrasement de la fonction request::end un bloc de données stats que l'on colle directement à l'objet request. Son objectif est de permettre la différence d'état avant/après (surtout pour le temps, car logiquement, le nombre d'octets est toujours 0).

Ensuite dans notre fonction end, et après avoir exécuté la fonction end d'expressjs on effectue nos petits calculs et on affiche les résultats.

Conclusion

Il est possible d'aller bien plus loin dans les données collectées. L'objet Socket dispose notamment des données lues (champ bytesRead). Perso, j'ai simulé ainsi les logs apache (access.log) de sorte à permettre à mes applications d'être analysés par des outils comme awstats. C'est ce qui m'a donné l'idée de partager cette astuce.

Gravatar de Artisan Numérique
Original post of Artisan Numérique.Votez pour ce billet sur Planet Libre.

Articles similaires

elementary OS : Support de l'UEFI préliminaire

mercredi 10 décembre 2014 à 10:00

Le support de l'UEFI pour notre OS favori montre un gain d'activité important depuis quelques heures sur le LaunchPad dédié. L'équipe de développement a posté, il y a peu, une ISO de test intégrant le support préliminaire de l'UEFI.

Pour les personnes ne sachant pas ce qu'est l'UEFI voici une courte définition issue de Wikipédia :

Le standard Unified Extensible Firmware Interface (UEFI, « Interface micrologicielle extensible unifiée ») définit un logiciel intermédiaire entre le micrologiciel (firmware) et le système d'exploitation (OS) d'un ordinateur. Cette interface succède sur certaines cartes-mères au BIOS. Elle fait suite à EFI (Extensible Firmware Interface), conçue par Intel pour les processeurs Itanium.

AMD, American Megatrends, Apple, Dell, HP, Intel, IBM, Insyde, Microsoft et Phoenix Technologies sont les promoteurs de l’UEFI Forum qui définit cette technologie1. L’UEFI Forum travaille depuis 2005 sur les spécifications de l'UEFI et a publié les premières spécifications officielles de l'UEFI 2.0 au début de 2006. UEFI n'est donc pas une norme, mais est le fruit du consensus d'un groupe d'industriels (ce qui est la définition d'un standard).

Le standard UEFI est donc amené à évoluer, mais ne fait pas à ce jour l'unanimité des fabricants de cartes mères : à ce jour UEFI ne s'impose donc pas comme une norme et de nombreuses cartes mères ne proposent pas UEFI. Par ailleurs, les cartes mères possèdent une option de paramétrage afin de désactiver UEFI (à manipuler avec beaucoup de précautions et après avoir réalisé une sauvegarde complète de l'ordinateur).

L'UEFI offre plusieurs avantages par rapport au BIOS, comme des fonctionnalités réseau intégrées en standard, une interface graphique haute résolution, une gestion intégrée des installations multiples de systèmes d’exploitation et l'affranchissement de la limite des disques à 2,2 To.

Fonctionnement de l'EFI

Fonctionnement de l'EFI

Ce nouveau logiciel commence à remplacer donc notre bon vieux BIOS que nous connaissions sur nos anciennes machines. A retenir donc : ça avance lentement, mais ça avance dans le bon sens.

Vous pouvez suivre l'avancement de ce bug ici : https://bugs.launchpad.net/elementaryos/+bug/1355698

Le billet Support de l'UEFI préliminaire a été publié sur elementary OS Fr - Communauté francophone d'elementaryOS

Gravatar de elementary OS
Original post of elementary OS.Votez pour ce billet sur Planet Libre.

Articles similaires