jeudi 29 juillet 2010

News ResEl

Mise à jour du ResEl

Samedi 31 juillet dans l’après-midi, nous allons mettre à jour notre serveur principal hébergeant les disques durs de nos machines virtuelles. Cette opération devrait durer plusieurs heures. Pendant la durée de l’opération, les services du ResEl (en particulier les courriels et les listes de diffusion) seront indisponibles. L’accès à Internet sera cependant maintenu avec une coupure de 15 à 30 min, le temps de faire une réplication de notre serveur DNS/DHCP vers 15 heures. Merci de votre compréhension.

29/07/2010 à 22:00.

mardi 20 juillet 2010

Peck - Benoît Peccatte

Le NAT sans NAT

Niveau : Star Star Star Star Empty
Résumé : slirp

Si vous n'êtes pas admin de la machine sur laquelle vous êtes (université ?), mais que vous voudriez partager votre connexion, par exemple pour une machine virtuelle ou pour des amis qui voudraient emprunter votre IP ... Il vous faut du NAT (a moins que vous vous contentiez d'un simple tunnel).

Problème : vous ne pouvez pas le mettre en place puisque vous n'êtes pas admin sur la machine qui partage la connexion.
Solution : slirp.

Hé oui c'est tout simple, slirp décapsule du PPP pour l'injecter dans de une socket normale et donc fait l'équivalent du NAT. Mais avec quelques limitations, on ne peut pas faire passer n'importe quel paquet (genre ping) depuis l'espace utilisateur, malgré tout c'est largement suffisant.

Le serveur de NAT (enfin le routeur quoi)

Bon c'est pas si simple mais presque.

Slirp est une commande qui utilise le l'entrée et sortie standard pour communiquer ce qui fait que si on veut l'utiliser à distance il faut le connecter à un "listener", ici nous allons utiliser socat, mais si vous voulez un tunnel chiffré, utilisez stunnel.

Donc vous avez besoin de socat et slirp sur la machine où vous êtes simple utilisateur. Si vous ne les avez pas recompilez les vous avez le droit. Si vous n'avez pas de compilateur copiez-lez depuis une autre machine, si cela ne fonctionne pas, recompilez les chez-vous en statique ... enfin vous êtes grands que diable, ne me posez pas cette question !

Il vous faut un fichier de configuration minimaliste pour slirp (à mettre dans ~/.sliprc) :

ppp
asyncmap 0

Puis lancez le service genre sur le port 2000 (fullbolt = pas de limitation de vitesse) :

$ socat -s tcp4-listen:2000,fork system:/usr/bin/slirp-fullbolt


Le client de NAT (enfin le terminux quoi)

Ici c'est légèrement plus compliqué. Tout d'abord il faut être root puisque nous allons faire un vpn, donc un réseau, donc une interface et du routage. Pour cela il nous faut l'autre bout du tunnel (toujours socat dans l'exemple, mais vous pouvez utiliser stunnel pour faire du ssl) et pppd qui est en quelque sorte le client naturel de slirp.

Petite configuration optimisée de pppd pour correspondre à celle de slirp (à mettre dans /etc/ppp/peers/slirp) :

notty 115200
noauth
lcp-echo-interval 0
asyncmap 0
nodefaultroute
nodetach

Et c'est parti on se connecte :

 
$ socat tcp-connect:host3.enstb.com:2000 system:"pppd call slirp"

Maintenant nous avons une connexion mais un peu spéciale car slirp a des exigences :

  • IP : 10.0.2.15
  • Réseau : 10.0.2.0/24 (ou autre, il s'en fout)
  • Gateway(machine distante) : 10.0.2.2
  • IP de commande de slirp : 10.0.2.0 (! une adresse en 0, beware of the netmask !)
  • IP spéciale : 10.0.2.1
  • + route directe vers l'ip du host

Et ppd configure le tout pas proprement donc il faut supprimer l'ip qu'il a ajouté. Malheureusement slirp non plus n'est pas très doué en configuration réseau et utilise l'adresse 10.0.2.0 ce qui fait que soit vous utilisez un /16 soit vous vous débrouillez pour que 10.0.2.0 soit correctement routée soit vous n'accédez jamais à l'interface de slirp à distance.

Choisissons le premier cas, donc pour activer le routage coté client configurez comme indiqué, en live cela donne :

$ ip addr del 10.0.2.15 dev ppp0
$ ip addr add 10.0.0.0/16 dev ppp0
$ ip route add default via 10.0.2.2 dev ppp0 # tout ce que vous voulez tout router par là

Et oualà !

Forwarding

Slirp est configurable dynamiquement, ce qui veut dire qu'un telnet 10.0.2.0 permet d'accéder à une interface d'admin de slirp.

Les commandes disponibles sont les mêmes que celle qu'on peut mettre dans le fichier de configuration. L'une de ces commandes est redir qui permet de faire des redirections qu'on appellerait port forwarding sur un routeur NAT.

redir [once|time] [udp|tcp] PORT [to] [ADDRESS:]LPORT

Exemple pour permettre l'accès au port ssh local depuis l'extérieur sur le port 2222 :

$ telnet 10.0.2.0
redir 2222 22
quit


Mais encore

Slirp a bien d'autres usages. Au départ slirp a été inventé pour faire du réseau sur un modem.

Mais il est aussi intégré à certains autre outils comme :

  • uml : il est possible de définir une interface réseau uml comme étant une interface slirp ce qui vous permet d'avoir une machine virtuelle uml disponible directement sur le réseau local à travers un NAT
  • vde : il est possible de définir un lien slirp pour vde ce qui permet tout comme pour uml de mettre en place une certaine forme de NAT derrière un switch virtuel (en général pour un ensemble de vm) sans avoir besoin d'être root
  • colinux : colinux intègre aussi slirp pour la même raison
Tags:, ,

Par peck, le 20/07/2010 à 19:54.

Hébergement

Niveau : Star Empty Empty Empty Empty
Résumé : housing, server hosting, vps, web hosting

Petite fiche technique pour ne pas se perdre dans le monde de l'hébergement :

Housing

C'est le même terme en français, on dit aussi colocation, il désigne en général la fourniture de l'espace dans une armoire, du réseau et de l'électricité et c'est tout.

Pourtant c'est en général l'offre la plus chère car la plus lourde à gérer pour l'hébergeur. C'est plutôt destiné aux entreprises qui ont leur propre matériel et/ou dont l'activité sera de revendre l'accès à leur propre matériel.

Server hosting

Ou serveur dédié en français. Pratique pour une PME, ce concept permet à un sysadmin ou une petite boite d'avoir un ou des serveurs qu'elle gère entièrement, sans contraintes mais aussi sans avoir à gérer la redondance électrique ou la redondance du réseau.

On a en général une bien meilleure disponibilité et un bien meilleur débit qu'un serveur hébergé chez soi. Donc valable dès qu'on offre des services à l'extérieur. De plus on ne s'embête plus avec les matériel et ses pannes ou presque.

VPS

Ou serveur virtuel en français. C'est une machine virtuelle sur laquelle vous avez tout pouvoir (root) mais située sur une machine physique partagée avec d'autres clients.

Cela permet de faire des machines très peu chères en contrepartie d'une absence de garantie de performances.

A noter qu'OVH a sorti un produit intermédiaire entre le vps et le dédié nommé RPS. Il s'agit d'un dédié léger mais dont le disque est partagé sur le réseau.

Web hosting

Hébergement mutualisé en français. Ce genre d'offre en général est la moins cher et la plus facile à gérer. Disponible immédiatement ou presque, vous avez plus ou moins d'espace disque, une base de données plus ou moins grosse et un virtualhost php avec parfois un nom de domaine.

A choisir lorsqu'on fait un "simple" site web.

Cloud

Petit nouveau, le cloud désigne en fait un groupe de machines dont on vous vend la puissance de calcul. Il existe autant de formes de cloud que de vendeurs de cloud, tous ont cette particularité de vendre des quantités variables.. Il y a ceux qui vous vendent des vm en grande quantité, il y a ceux qui vous vendent des serveurs d'application, il y a ceux qui vous vendent de la base de données ou du simple dépôt de fichier.

A choisir lorsqu'on a des applications scalable et qu'on prévoit un grand nombre de clients potentiels.

Autres

Les hébergeur offrent aussi sous forme de pack des noms de domaine, des services dns, des services de boite mail, d'envoi en masse de mail, en général pour pas trop cher, cherchez, vous trouverez.

Il existe aussi d'autres offres plus rares d'hébergement d'application ruby, python, java mais il faudra chercher pour trouver quelque chose d'intéressant.

Dans le genre exotique vous verrez aussi des offres de type shell où vous avez un shell sur une machine partagée entre plusieurs utilisateurs. Ce genre d'activité nécessite en général une certaine confiance et a plutôt tendance à fonctionner à travers des réseaux sociaux.

Tags:,

Par peck, le 20/07/2010 à 8:00.

dimanche 18 juillet 2010

KiBi - Cyril Brulebois

Mraw?

That’s a recurring question I get asked: What does “mraw” mean?

Over 2 years ago, I changed my mail signature from the traditional:

--
$FULLNAME

to:

Mraw,
KiBi.

I became a DD back then, so I put my now-become-my-login-as-well nickname there. About the “mraw” part, I kind of like felines in general, and felis catus in particular. Onomatopœias like “maw” or “meow” are nice, but that’s even cuter when there’s some purring happening at the same time, hence the ‘r’ addition in there.

18/07/2010 à 18:17.

lundi 05 juillet 2010

News ResEl

Service TNT opérationnel sur le campus de Rennes

La nouvelle machine de diffusion de la TNT est installée. Elle est correctement configurée et diffuse les flux vidéos et annonces SAP. Veuillez nous excuser pour l'interruption du service. Vous aurez d'ici peu quelques chaines du satellite. Dark, pour l'équipe ResEl.

05/07/2010 à 22:00.

dimanche 04 juillet 2010

KiBi - Cyril Brulebois

We need *you*! (redux)

We need you! (redux)

The X Strike Force needs you! (redux)

This time, the focus is on the xserver-xorg-video-intel driver. KMS and UMS are going to be used heavily below, one may want to check the mode-setting wikipedia article and the modesetting page on X.org.

Intel follows a 3-month cycle for its video driver releases. Some comments on the last ones:

  • 2.9: What we’ve had in Debian for some time already. Works mostly fine, supports both KMS and UMS. What we’ve planned to release with for some time already.

  • 2.10: First version with ripped-off UMS support. Not a significant improvement.

  • 2.11: Apparently (still) having a bunch of regressions from 2.9, which is why we didn’t switch to it.

  • 2.12: Many regressions are supposed to be fixed, meaning it could compete with 2.9, which is why we need you.

It’d be nice to have users install 2.12 from experimental and see how it goes from here. If regressions are found, we should be able to try hard(er) to get them fixed, so that we can move 2.12 to unstable and release with it. If there are too many of them, and if they’re not going to be fixed on time, we might stick with 2.9.

Pulling the driver from experimental should be quite easy: libdrm* packages are going to be upgraded, but that’s mostly it (meaning the server itself will stay the same, and rolling back should be as easy as downgrading the driver and the libdrm* packages).

A note on KMS and UMS: a benefit of sticking with 2.9 was being able to switch back to UMS in case KMS wasn’t usable for some cards. Unfortunately, popular/well-spread cards like i8xx aren’t well supported yet, that’s why Chris Wilson (upstream) is considering introducing UMS support again for that kind of blacklisted cards. This way, it should be possible to move to 2.12 (including Chris’ work) without leaving some users behind.

Feedback appreciated as follows:

  • If 2.9 used to work and if 2.12 doesn’t: please file a bug upstream.

  • If 2.12 works while 2.9 didn’t, reportbug -k or debian-x@.

Thanks already!

04/07/2010 à 17:10.

mardi 22 juin 2010

guiling - Bertrand Grelot

Migration Thunderbird 2 -> Thunderbird 3

Pour ceux qui comme moi, se font avoir par aptitude et qui n'ont eu d'autre choix que de migrer vers Thunderbird 3, voilà une manip qui permet de bypasser la demande de mot de passe général :

  1. outils -> console d'erreur
  2. openDialog("chrome://pippki/content/resetpassword.xul")
  3. valider

Ensuite dans les préférences > sécurité > mot de passe, vous pouvez décocher "utiliser un mot de passe principal".

Par contre, il semble que si un user veut quand même un mot de passe, un bug fait que la popup s'ouvre plus d'une fois pour le demander...

Par guiling, le 22/06/2010 à 20:26.

Jeb - Jean Edouard Babin

Des nouvelles fonctions oui, et un nouveau bouton ?

Vous n’avez surement pas raté l’annonce de l’iPhone 4 et d’iOS 4 qui apporte bon nombre de fonctionnalités.

Il va donc falloir encore plus tapoter sur l’écran et les rare boutons de l’iPhone pour en profiter pleinement.

Et sinon pour l’iPhone 5 on aura le droit à une bouton en plus pour éviter d’avoir tapoter, double cliquer, triple tapoter et encore cliquer pour pouvoir faire quelque chose ? :)

Par Jeb, le 22/06/2010 à 19:31.

vendredi 04 juin 2010

flo - Florent Fourcot

De la météo...

Juste un chiffre : 99,4 heures. Le temps d'ensoleillement à Dresde au mois de mai de cette année. C'est moins de la moitié de la moyenne (224,7h en 2009 et 263,7h en 2008 par exemple). Il y eu 9 jours sans aucun soleil sur ce mois. C'est le record minimal du nombre d'heures depuis au moins 1976 (j'ai pas les données pour plus tôt...). Et une pluie six fois supérieure à ce que j'avais connu en mai 2008 en arrivant...

En résumé : un bon temps pourri, espérons que le mois de juin soit plus clément !

Par flo, le 04/06/2010 à 15:34.

samedi 15 mai 2010

guiling - Bertrand Grelot

"Change end-of-line format for dos-mac-unix"

Aujourd'hui, je suis tombé sur un tweet d'Amandine :

:%s/\ r//g to remove all those nasty ^M from a file, or :%s/\ r$//g for only at the end of a line.

La source est ici : http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix, j'espère que ça vous servira autant qu'à moi !

Par guiling, le 15/05/2010 à 13:10.

jeudi 06 mai 2010

Olaf' - Thomas Péteul

Blogilo – éditeur de blog offline

Ce post a pour but de tester blogilo, un outil de la suite KDE qui permet d’éditer ses billets de blog. Apparemment ça marche bien et c’est plus confortable que de travailler uniquement en ligne. Par contre, l’insertion d’image n’est pas encore bien au point apparemment : ça n’offre pas encore toutes les possibilités de l’interface [...]

Par Olaf', le 06/05/2010 à 16:31.

lundi 26 avril 2010

catwell - Pierre Chapuis

Away

Alors qu'un graphe moins ouvert que son nom l'indique laisse planer une ombre inquiétante sur la Toile et que l'air est électrique entre deux géants naguère alliés, cela fait bien longtemps que vous n'avez pas eu de nouvelles de votre serviteur. Se terrerait-il apeuré en attendant que l'orage passe ?

Non, il se trouve simplement que je suis un peu dans les nuages en ce moment et que j'ai fait le choix de dédier le temps libre qu'il me reste à des choses plus drôles que relater les tristes nouvelles du Réseau et du monde Libre.

En clair, ne vous attendez pas à une déferlante d'articles dans les mois à venir. En plus de ça, Arch Lua, qui n'a jamais vraiment été lancé, est enterré jusqu'à nouvel ordre, à moins que quelqu'un ne propose spontanément d'en prendre les rennes.

Moins drôle : j'ai appris le décès de funkyou, avec qui j'avais eu l'occasion de discuter par email et IRC comme nombre d'Archers. RIP et bravo pour le travail accompli.

26/04/2010 à 21:30.

samedi 24 avril 2010

flo - Florent Fourcot

De retour à Dresde

C'est de l'information pas très fraîche, un peu comme du poisson de Bretagne qui arriverait en Saxe pendant qu'un nuage de cendre se promène sur l'Europe. Mais voilà, je suis de retour à Dresde depuis la toute fin mars. Après six mois de vie en collocation à Rennes pour suivre ma dernière année de formation d'ingénieur, je fais donc désormais mon stage de fin d'étude à la faculté technologique de Dresde.

Le sujet de mon stage est l'amélioration de JAP, j'en avais déjà parlé un peu dans un précédent billet. Actuellement ce logiciel fonctionne très bien et garanti une navigation anonyme sur internet. Mais il est malheureusement trop facile à censurer. L'installation de serveurs de Mix est très coûteuse, et n'est donc pas envisageable à grande échelle. Un censeur peut bloquer les IP de ces serveurs, et c'est la fin du système. C'est là qu'intervient mon stage, permettre un système anti-censure efficace (par utilisation de relais en P2P, en faisant de l'IP over Skype, et toutes les autres solutions étranges que l'on pourrait imaginer...). L'objectif est d'avoir suffisamment de solutions pour forcer la censure à bloquer l'ensemble de l'internet, ou à ne rien bloquer pour quelqu'un qui utilise le logiciel.

Au niveau des conditions de travails, c'est plutôt cool. Je fais ce que je veux sur mon ordinateur, j'ai deux grands écrans, deux adresses IP publiques rien que pour moi et aucun filtrage en flux sortants. Et plus important, au niveau humain, ça se passe très bien avec mon chef. Donc je suis très content d'avoir choisi ce stage :)

Sans parler du logement qui sera le sujet d'un prochain billet, je suis content d'en avoir terminé la semaine dernière avec tous les points administratifs. L'inscription à la faculté a été un peu laborieuse (mais bon, c'est ça d'être un étudiant en dehors d'un accord, il y a plus de papiers à fournir que pour un erasmus...). En revanche, l'inscription à la ville à été des plus simples, J'avais de toute façon oublié de me désinscrire en sortant donc ils ont juste effectué un changement d'adresse. Et maintenant que tout ça est fait, je sais que je vais être tranquille pour les six mois à venir.

Par flo, le 24/04/2010 à 11:58.

mercredi 31 mars 2010

catwell - Pierre Chapuis

Dehors l'intelligence

Juste un petit post pour signaler que Peck, un vieux du ResEl, a posté un excellent article de vulgarisation sur la nature d'Internet. Les barbus n'y apprendront rien, mais ceux qui cherchent à comprendre sans forcément avoir de notions techniques devraient y jeter un œil.

Dans le même ordre d'idées, le Standblog donne un lien vers une interview d'Eben Moglen qui explique comment on pourra tuer la bête Facebook. N'oubliez pas : le film est long mais la liberté triomphe à la fin.

31/03/2010 à 13:20.

lundi 01 mars 2010

Jeb - Jean Edouard Babin

Retour aux sources

Il y a longtemps que je pense que l’ordinateur tel que nous le connaissons n’a pas d’avenir chez la plupart des particuliers.

Si je pensai que Google était le mieux placer pour entrer dans ce concept avec une Google Box, on en a toujours pas vu le jour, et même si ils ont annoncé Chrome OS, il tarde à pointer le bout de son nez.

Au final c’est peut-être Apple, avec l’iPad qui va rafler la mise. Un navigateur pour surfer, un client email pour ceux qui n’utiliserait pas un webmail, et la possibilité de lancer des applications locales avec la possibilité de synchroniser les données avec la même application version “poche” (téléphone portable).

On se retrouve avec ni plus ni moins avec un écran “intelligent” qui ne sert qu’a afficher des données qui sont “quelque part”. Ca doit surement rappeler les années 70 à certain…

Par Jeb, le 01/03/2010 à 22:51.

mercredi 27 janvier 2010

Norgz - Elie Roux

Le retour des bains d'Hercule

Le week-end dernier petit (re)tour à Baile Herculane... Quelques photos ici, avec la neige ça change pas mal de la dernière fois !

Cette fois-ci on a été courageux et on a pris un bain dans la forêt : se changer les pieds sur la glace, -8 dehors, 36 à l'intérieur, c'est vivifiant ! Au final ça[...]

Par Elie Roux, le 27/01/2010 à 11:06.

mardi 19 janvier 2010

neoXL - Alexandre Lung

Soundtracks

Quand j'écoute Sound of Silver de LCD Soundsystem, je me revois marcher au crépuscule, dans le parc devant la gare de Zagreb. Parce qu'en déambulant là, en attendant de reprendre le train pour la destination suivante, c'était l'album qui tournait dans (feu) iPied.

Ton invitation, de Louise Attaque, c'est avant tout Joseph, dans ce car à Taipeh en 1998, alors qu'on demande à sa cousine Florence, si dans ses écouteurs, c'était pas un peu fort. « mais c'est seulement à 8 !».

Alone again or, je l'ai dans mes oreilles, alors que je descends à vélo, à fond, de la colline près de Håga, derrière Flogsta (je sais que c'est mal de faire du vélo avec les écouteurs).

Is This It, les Strokes, ce n'est pas pour moi la pub pour EDF. Mais c'est scruter mon radio réveil, en 2001, pour écouter leur concert organisé par Oui FM, où j'ai failli aller, mais finalement non. J'aurais aimé.

Skeletal Lamping de Of Montreal, c'est plein de souvenirs, en concerts, ce sont des écoutes en boucle 24 fois de suite. Mais j'ai commencé dans le train entre Uppsala et Stockholm, en septembre 2008, quand je me demandais si c'était bien raisonnable de l'écouter alors que l'album n'était pas officiellement sorti, et que oh, finalement si.

Jean-Jacques Goldman, je suis allongé sur l'herbe, devant l'immeuble d'en face, alors que Flogsta s'est un peu vidé, ces derniers jours. Et qu'à ce moment, ça me rappelle quand on le chantait à l'école primaire. À nos actes manqués.

Et Kings of Convenience. Je n'arrive plus à les écouter. J'aimerais bien que ça revienne, j'aime bien leur musique.

Par Alexandre, le 19/01/2010 à 0:40.

lundi 11 janvier 2010

Norgz - Elie Roux

La ville blanche

Ce week-end, petit tour chez nos amis slaves, à Belgrade (beo = blanc, grad = ville)... Première surprise : ça roule vraiment mieux qu'en Roumanie, et les gens sont étonamment disciplinés : 60 km/h dans les villages et 80 partout ailleurs (même sur les autoroutes), des limitations très bizarres[...]

Par Elie Roux, le 11/01/2010 à 15:23.

mercredi 06 janvier 2010

Atz - Thomas Villaren

Happy New Year !**

Voilà 3 ans, j'ouvrais ce blog pour raconter mes aventures en deuxième année à Telecom Bretagne. Voilà 2 ans, je vous souhaitais la bonne année depuis la Californie (enfin, j'étais dans l'avion pour la grande partie du 1er janvier 2008 mais c'est le geste qui compte). Voilà 1 an, dans une tentative de raviver ce blog (avec un échec cuisant si vous... Lire Happy New Year !**

Par Thomas Villaren, le 06/01/2010 à 23:30.

samedi 02 janvier 2010

neoXL - Alexandre Lung

Compétition

photo floue, rue Bleury Rue Bleury, Montreal

L'autre jour, je suis allé au supermarché du coin acheter des carottes avec des fanes. C'était le 31, en fin d'après-midi, et forcément blindé de monde à la caisse. La caisse à ma droite est une caisse pour laquelle priorité est donnée aux «femmes enceintes, jeunes mamans, handicapés et invalides». Il faut donc les laisser passer. En vrai, ça n'arrive quasiment jamais. Mais là si.

La file fait la dizaine de personnes. Une maman arrive, un nourrisson dans les bras, un gosse de 3 ans lui tenant la main. Regards désolés, excuses, elle passe devant 5 ou 6 personnes. Normal, ils étaient conscients du panneau de priorité à droite.

3 minutes plus tard. Un vieille femme accompagne un homme en fauteuil roulant, à la motricité et l'élocution réduites. Le femme, très fort, «pardon, j'ai priorité, laissez le passer ». De manière très élégante. Elle arrive à hauteur de la maman avec le nourrisson et le gosse de 3 ans lui tenant la main. «laissez le passer madame». Regard désolé, coup d'œil vers le bébé, regard désolé. She wins.

Par Alexandre, le 02/01/2010 à 15:27.

vendredi 04 décembre 2009

Jeb - Jean Edouard Babin

Trend / Prediction with RRDtool

I’ve not used RRDtool for a while and put back my attention on it few weeks ago. I found out that lots of new cool stuff are avalaible, like LSLSLOPE, LSLINT. These function return the parameters of the Least Squares Line (y = ax +b) approximating a dataset (LSLSLOPE return a, LSLINT return b).
This is interesting because with the function approximating your data you can graph a prediction of future data. Of course a Least Squares Line function will work best to approximate a dataset that tend to grow or shrink (like filesystem usage, memory usage, …) but not for data like temperature. I would say that if your data can be expressed in a percentage, an Least Squares Line can be fine. For data not tending to grow or shrink rrdtool provide some other function like TREND and PREDICT.

I will show how to use LSLSLOPE and LSLINT taking memory usage of a device as an example. My exemple will produce a graph like the following :
MemoryTrend

As you see, the graph show trend using two Least Squares Line function, one generated from the full dataset (dataset is starting 24 Oct 2009) and one generated only from last week data. Projection on time axis is done from 90% to 100% of memory usage and the date resulting of calculation for 90% and 100% of usage is displayed. I’ve seen lots of question asking how to do this but did not found any answer, so I hope that my example will provide an answer.

Here is the perl code I’m using to generate this graph. There is no Perl specific code, so it can be converted to a normal rrdtool command.

#! /usr/bin/perl
use RRDs;

$rrd_file = 'MEMORY.rrd';

RRDs::graph "MEMORY_Trend.png",
'--start', "10/24/2009",
'--end', "12/31/2009 00:00am",
'--title', "Memory Usage",
'--interlace', '--width=620', '--height=200',
"--color","ARROW#009900",
'--vertical-label', "Memory used (%)",
'--lower-limit', '0',
'--upper-limit', '100',
'--border','0',
'--rigid',

"DEF:used1=$rrd_file:used:AVERAGE",
"DEF:used2=$rrd_file:used:AVERAGE:start=10/24/2009",
"DEF:used3=$rrd_file:used:AVERAGE:start=-1w",
"DEF:used4=$rrd_file:used:AVERAGE:start=-2w",
"DEF:used5=$rrd_file:used:AVERAGE:start=-4w",
"DEF:free1=$rrd_file:free:AVERAGE",
"DEF:free2=$rrd_file:free:AVERAGE:start=10/24/2009",
"DEF:free3=$rrd_file:free:AVERAGE:start=-1w",
"DEF:free4=$rrd_file:free:AVERAGE:start=-2w",
"DEF:free5=$rrd_file:free:AVERAGE:start=-4w",

"CDEF:pused1=used1,100,*,used1,free1,+,/",
"CDEF:pused2=used2,100,*,used2,free2,+,/",
"CDEF:pused3=used3,100,*,used3,free3,+,/",
"CDEF:pused4=used4,100,*,used4,free4,+,/",
"CDEF:pused5=used5,100,*,used5,free5,+,/",

"HRULE:100#FF000044",
"HRULE:99.5#FF000044",
"HRULE:99#FF000044",
"HRULE:98.5#FF000044",
"HRULE:98#FF000044",
"HRULE:97.5#FF000044",
"HRULE:97#FF000044",
"HRULE:96.5#FF000044",
"HRULE:96#FF000044",
"HRULE:95.5#FF000044",
"HRULE:95#FF000044",
"HRULE:94.5#FF000022",
"HRULE:94#FF000022",
"HRULE:93.5#FF000022",
"HRULE:93#FF000022",
"HRULE:92.5#FF000022",
"HRULE:92#FF000022",
"HRULE:91.5#FF000022",
"HRULE:91#FF000022",
"HRULE:90.5#FF000022",
"HRULE:90#FF000022",

"COMMENT:                         Now          Min             Avg             Max\\n",
"AREA:pused1#00880077:Memory Used",
'GPRINT:pused1:LAST:%12.0lf%s',
'GPRINT:pused1:MIN:%10.0lf%s',
'GPRINT:pused1:AVERAGE:%13.0lf%s',
'GPRINT:pused1:MAX:%13.0lf%s' . "\\n",
"COMMENT: \\n",

'VDEF:D2=pused2,LSLSLOPE',
'VDEF:H2=pused2,LSLINT',
'CDEF:avg2=pused2,POP,D2,COUNT,*,H2,+',
'CDEF:abc2=avg2,90,100,LIMIT',
'VDEF:minabc2=abc2,FIRST',
'VDEF:maxabc2=abc2,LAST',

'VDEF:D3=pused3,LSLSLOPE',
'VDEF:H3=pused3,LSLINT',
'CDEF:avg3=pused3,POP,D3,COUNT,*,H3,+',
'CDEF:abc3=avg3,90,100,LIMIT',
'VDEF:minabc3=abc3,FIRST',
'VDEF:maxabc3=abc3,LAST',

"AREA:abc2#FFBB0077",
"AREA:abc3#0077FF77",
"LINE2:abc2#FFBB00",
"LINE2:abc3#0077FF",

"LINE1:avg2#FFBB00:Trend since 24 Oct 2009                      :dashes=10",
"LINE1:avg3#0077FF:Trend since 1 week\\n:dashes=10",
"GPRINT:minabc2:  Reach  90% @ %c :strftime",
"GPRINT:minabc3:  Reach  90% @ %c \\n:strftime",
"GPRINT:maxabc2:  Reach 100% @ %c :strftime",
"GPRINT:maxabc3:  Reach 100% @ %c \\n:strftime",

;

my $ERR=RRDs::error;
die "ERROR : $ERR" if $ERR;

Par Jeb, le 04/12/2009 à 20:33.

dimanche 22 novembre 2009

Toadstool - Jeremie Corbier

New Addiction

With work taking most of our time lately, my girlfriend and I needed to find as many ways as possible to change our minds once we were back home. This is how we found a real enjoyable online RPG called Nodiatis.

The game has reached quite a high level of maturity. There is a large community of players and the game allows a great deal of different characters' builds ranging from the basic but very efficient warrior to the more difficult to play but, in my opinion, more interesting to play spell caster.

With as many as 26 classes and a whole load of different skills, this is one of the richest web-based online RPG we have ever played.

22/11/2009 à 14:28.

mardi 17 novembre 2009

Toadstool - Jeremie Corbier

GPG Key Transition

Ok... Even though I am extremely busy and have had very little time to do anything Debian-related lately, I guess I'll have to do this one day or another, so here it is.

I created a new GPG key which I am transitionning to and I have prepared a transition document signed by both keys.

17/11/2009 à 16:34.

mercredi 04 novembre 2009

Atz - Thomas Villaren

Pas de nouvelle, bonne nouvelle ?

Presque 3 semaines sans nouvelles sur ce blog, une petite baisse de motivation et pourtant, ce n'est pas les choses qui manquent à raconter. En effet, nous avons terminé notre voyage avec Matt (et mes parents pour une partie), les photos et le compte rendu de notre tentative d'ascension du Mont Whitney, le sommet des États-Unis contiguës, sont... Lire Pas de nouvelle, bonne nouvelle ?

Par Thomas Villaren, le 04/11/2009 à 22:07.

dimanche 04 octobre 2009

Geekou - Adrien Guinet

L'île des pins

Samedi dernier (il y a donc une semaine), Nico, Alexis & moi même sommes allés sur l'île des pins, une île se trouvant au sud de la Nouvelle Calédonie.Après un voyage sans problème de tangage intensif ni de perte de lunettes (...), nous sortons du bateau pour découvrir un magnifique ciel bleu et une plage de sable blanc qui brûle les yeux. L'eau y... Lire L'île des pins

Par Adrien, le 04/10/2009 à 12:23.

vendredi 25 septembre 2009

SiD - Hugo Geissmann

Comment supprimer les mots de passe enregistrés par SVN + Eclipse

Tous ceux qui travaillent avec Eclipse et qui ont un plugin svn (subclipse la plupart du temps) ont du un jour rencontrer ce problème. On ajoute un repository svn dans la perspective « SVN Repositories » et entre son login/mdp de connexion au serveur. Pour une raison x ou y, on doit changer d’identifiant quelques temps après …et là aucun moyen de retrouver ce fichu prompt qui demande de s’identifier.

Dans ce post je vais passer rapidement en revue les méthodes pour supprimer les mots de passe enregistrés par svn en fonction de votre OS.

Sous Mac Os X

  • Supprimer le fichier ~/.eclipse_keyring

Sous Linux

Cela va dépendre de l’interface choisie pour SVN dans vos préférences Eclipse : Preferences > Team > SVN > SVN interface

  • JavaHL : Supprimer le fichier ~/.subversion/auth/svn.simple
  • SVNKit : Supprimer le fichier $ECLIPSE_HOME/configuration/org.eclipse.core.runtime/.keyring

Sous Windows

La encore cela dépend de l’interface SVN choisie :

  • JavaHL : Supprimer c:\Documents and Settings\[username]\Application Data\subversion\auth\svn.simple
  • SVNKit : Supprimer le fichier $ECLIPSE_HOME/configuration/org.eclipse.core.runtime/.keyring

A bientôt.

Par Hugo Geissmann, le 25/09/2009 à 11:38.

jeudi 24 septembre 2009

Geekou - Adrien Guinet

Et c'est reparti...

...pour un voyage à l'autre bout du monde. Ça va commencer à devenir une tradition, mais après une soirée assez (trop ?) bien arrosé, me voici après 4h30 de sommeil "frais et dispo" pour aller prendre mon train qui m'emmena directement à l'aéroport de Paris Charles de Gaulle. "Vous êtes bien arrivé à Paris..." La journée commence bien, avec le TGV... Lire Et c'est reparti...

Par Adrien, le 24/09/2009 à 8:52.

samedi 29 août 2009

Quotes - Jeb's quotes

fortune 33

< seto1>
c'est quand même un peu magique le wifi.. je pense que tout utilisateur d'une connexion wifi en arrive là un jour.. parler sur irc en étant aux toilettes.

Par guiling, le 29/08/2009 à 23:13.

dimanche 23 août 2009

Quotes - Jeb's quotes

fortune 32

<%tux>
c'est drôle, la polarisation de mes lunettes de soleil et de l'écran de mon mac sont perpendiculaires donc je vois rien à l'écran si je mets mes lunettes de soleil, contrairement à l'écran de mon pc :)

Par Ploufplouf, le 23/08/2009 à 10:46.

dimanche 09 août 2009

SiD - Hugo Geissmann

JPA : A t’on vraiment besoin de DAO ?

Cet article est une proposition de traduction de l’article de Vicent Patington : Do we really need DAO ?

Commençons par la chose que vous allez probablement écrire en premier dans une application JPA : le data access object , aka DAO. Un premier point qu’il faut soulever avant même de commencer cet article est de savoir si oui ou non on a réellement besoin d’un DAO lorsqu’on utilise JPA. Il y a un peu plus d’un an, la conclusion de ce débat a été : « Ça dépend ! ». Et même s’il est assez difficile de discuter une telle conclusion :) , pour moi, un DAO a bel et bien sa place dans une application JPA. On peut soutenir que ce n’est qu’une fine couche au dessus de JPA, mais avoir un DAO par entité persistante donne ce type d’avantages :

  • Au lieu de devoir récupérer un EntityManager à chaque fois que l’on veut obtenir ou persister des données, on décide une fois pour toute lequel utiliser et toute l’équipe de développement s’y tient.
  • On peut interdire certaines opérations pour certaines entités. Par exemple, on peut ne pas vouloir laisser la possibilité de supprimer des entrées de log. En utilisant un DAO, on peut ne pas ajouter de méthode ‘remove’ au LogEntry DAO.
  • Théoriquement, en utilisant les DAO on peut changer de méthode de persistance (comme JDBC seul ou iBATIS). Mais comme JPA est une abstraction très complète je pense que ce n’est pas réellement envisageable pour une application un tant soit peu complexe.
  • On peut centraliser toutes les requêtes relatives à un certain type d’entités au lieu de les disperser dans tout le code. On pourrait utiliser des « named queries«   pour garder les requêtes avec les entités, mais on a toujours besoin d’un endroit où centraliser les paramètres. Ainsi, mettre les requêtes, le code qui instancie les paramètres et le cast dans le bon type (celui de l’entité) dans un DAO est une chose très simple à faire. Par exemple :
public List findExecutingChangePlans() {
      Query query = entityManager.createQuery(
            "SELECT plan FROM ChangePlan plan where plan.state = 'EXECUTING'");
      return (List) query.getResultList();
}

Bon, maintenant que l’on est convaincu que les DAO c’est bien :-) : comment les écrit on ?

Dans la javadoc de la classe JpaTemplate (Spring) il est écrit en gras qu’il n’y a pas grand interêt à utiliser cette classe , ce qui rend la classe JpaDaoSupport également superflue. A la place, on peut écrire nos DAO JPA comme des POJO (Plain Old Java Object) en ajoutant l’annotation @PersistenceContext, ce qui permet de récupérer une référence vers un EntityManager. Cela va marcher avec les EJB 3.0 et avec Spring 2.0. (Pour Spring il faut ajouter au contexte le bean PersistenceAnnotationBeanPostProcessor).

Comme chaque DAO partage un grand nombre de fonctionnalités avec les autres DAO, il semble logique d’avoir une classe de base avec toutes ces fonctionnalités partagées  et d’en faire héritier chaque DAO. Il y a un grand nombre de blogs qui traitent des type-safe generic DAO et on peut même télécharger du code depuis Google Code. Quand on combine des éléments provenant de toutes ces sources, on obtient l’implémentation de JPA qui suit.

L’entité

Disons que l’on veut persister la classe Order:

@Entity
@Table(name = "ORDERS")
public class Order {
    @Id
    @GeneratedValue
    private int id;
    private String customerName;
    private Date date;
 
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
 
    public String getCustomerName() { return customerName; }
    public void setCustomerName(String customerName) { this.customerName = customerName; }
 
    public Date getDate() { return date; }
    public void setDate(Date date) { this.date = date;}

Ne vous inquiétez pas trop en lisant le contenu de cette classe. Nous allons en voir les détails dans d’autres articles sur les design
pattern implémentant JPA. Ici, on utilise l’annotation @Table parce que ORDER est un mot réservé en SQL.

L’interface DAO

Tout d’abord on définit une interface DAO générique avec toutes les méthodes qui seront partagées par les DAOs :

public interface Dao {
      void persist(E entity);
      void remove(E entity);
      E findById(K id);
}

Le premier paramètre, K, et le type de l’objet que l’on va utiliser comme clé et le deuxième, E, est le type de l’Entité. En plus des méthodes classiques persist,remove et findById, on peut aussi ajouter listFindAll(). De toute façon, nous allons être amenés à modifier ce DAO (ansi que l’entité) en explorant d’autres design pattern de JPA.

Puis on définit une sous-interface pour chaque entité que l’on veut persister, en ajoutant toutes les méthodes spécifiques à cette entité. Par exemple, si on veut récupérer toutes les commandes passées après une certaine date, on peut ajouter cette méthode :

public interface OrderDao extends Dao {
	List findOrdersSubmittedSince(Date date);
}


L’implémentation de base du DAO

La troisième étape est de créeer une implémentation de base d’un DAO JPA. Elle aura une implémentation basique de toutes les méthodes créer dans le DAO standard que nous avons créé à l’étape 1 :

public abstract class JpaDao implements Dao {
	protected Class entityClass;
 
	@PersistenceContext
	protected EntityManager entityManager;
 
	public JpaDao() {
		ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass();
		this.entityClass = (Class) genericSuperclass.getActualTypeArguments()[1];
	}
 
	public void persist(E entity) { entityManager.persist(entity); }
 
	public void remove(E entity) { entityManager.remove(entity); }
 
	public E findById(K id) { return entityManager.find(entityClass, id); }
}

Le code précédent est assez simple à comprendre. Cependant, certains points méritent d’être étudiés plus en détail :

  • Le constructeur du JpaDao reprend la méthode proposée par Arjan Blokzijl qui utilise la réflexion pour récupérer l’entité.
  • L’annotation @PersistenceContext permet au container EJB 3.0 ou à Spring d’injecter l’EntityManager.
  • Les champs EntityManager et entityClass sont protected, ainsi les sous-classes peuvent y accéder.

L’implémentation spécifique du DAO

Enfin, nous créons une implémentation de DAO spécifique . Elle étend le DAO JPA de base et implémente l’interface spécifique du DAO.

public class JpaOrderDao extends JpaDao implements OrderDao {
	public List findOrdersSubmittedSince(Date date) {
		Query q = entityManager.createQuery(
			"SELECT e FROM " + entityClass.getName() + " e WHERE date &gt;= :date_since");
		q.setParameter("date_since", date);
		return (List) q.getResultList();
	}
}

Utilisation du DAO

le moyen d’obtenir une référence à notre instance du OrderDao va dépendre de si on utiliser les EJB ou Spring.

Avec les EJB 3.0 :

@EJB(name="orderDao")
private OrderDao orderDao;

Alors qu’avec Spring on peut utiliserle fichier de contexte où sont déclarés les beans ou tout simplement utiliser l’annotation @Autowired

@Autowired
public OrderDao orderDao;

Dans tous les cas, une fois que l’on a la référence vers notre DAO, on l’utilise de cette manière :

Order o = new Order();
o.setCustomerName("Peter Johnson");
o.setDate(new Date());
orderDao.persist(o);

Mais on peut aussi utiliser la requête que nous avons ajouté dans notre interface OrderDao :

List orders = orderDao.findOrdersSubmittedSince(date);
for (Order each : orders) {
	System.out.println("order id = " + each.getId());
}

Avec ce DAO indépendant du type de l’entité nous avons les avantages suivants :

  • Pas de dépendance directe en l’api JPA et le code client
  • Indépendance vis-à-vis du type de l’entité grace aux generics. Tous les casts qui doivent quand même être fait, le sont dans l’implémentation.
  • Un seul endroit pour regrouper le code JPA spécifique à une sorte d’entité
  • Un seul endroit pour ajouter les marqueurs de transaction, de debug etc …D’ailleurs, nous allons le voir plus tard, il va falloir ajouter les marqueurs de transaction à d’autres endroits dans notre application.
  • Une seule classe à tester quand on test l’accès aux données. Nous reparlerons de ces tests dans un autre article sur les design pattern JPA.

J’espère que maintenant vous êtes convaincu de l’on a besoin du design pattern DAO avec JPA !!

Par Hugo Geissmann, le 09/08/2009 à 17:00.