Midilibre.fr
Tous les blogs | Alerter le modérateur| Envoyer à un ami | Créer un Blog

28/11/2009

Second jeudi libre de Nîmes – Edition de Noël


La Linuxerie se réunit à la brasserie : Au bureau, le 10 Décembre 2009 à 20h pour les jeudis du libre, au menu : Logiciels libre, GNU/Linux, actualités du libre…

La communauté et les acteurs du logiciel libre de Nîmes et sa région se réunissent chaque second jeudi du mois pour une soirée conviviale, pour répondre à vos questions, à votre curiosité autour du thème des logiciels libres. L’occasion également de partager ses idées, ses expériences, une table. L’ambiance est sympathique et facilite les conversations. La soirée commencera à 20h00 et prendra fin aux alentours de 23h00. Cette soirée s’inscrit dans le cadre des jeudis du libre en partenariat avec Montpel’libre qui organise les Last Jeudis sur Montpellier.

Renseignements et confirmation de présence sur linuxerie@gmail.com ou sur http://lalinuxerie.free.fr

Le Lieu : Au bureau

Adresse : 24, Boulevard amiral courbet

Plan : http://www.openstreetmap.org/?lat=43.838544&lon=4.363...

Les horaires : 20h – 23h

Possibilité de manger sur place, à partir de 19h.
Laissez un commentaire si vous pensez venir.

22/11/2009

[gimp] - Effet de reflet en perspective

Puisqu'on parle de gimp en ce moment, et comme je n'avais pas fait de tutoriel sur gimp depuis longtemps, j'ai décidé de combler ce manque. Un effet sympa à faire est de faire un reflet avec un dégradé pour simuler un effet de miroir, comme ci dessous :

wirelizard_Lion_Ornament.png

Sur un objet plat cela fonctionne trés bien, mais lorsque l'image est en perspective c'est plus délicat, comme sur un carton par exemple :

cart1.jpg

Prenons ce carton, (en l'enregistrant sous...) il fait 228 de large et 240 de haut. En premier lieu il nous faut doubler la hauteur de la zone de travail, avec Image -> Taille du Canevas. Et mettons les tailles de 228 en largeur et 480 de hauteur. Pensez à décovher la petite chaîne qui lie la largeur et la hauteur de manière a ne plus avoir de relation entre les deux. Placer votre carton tout en haut de l'image et dupliquer le (MAJ+CTRL+D) ou Calque -> Dupliquer le calque.

Appliquer sur le nouveau calque une symétrie axiale(shift + f) , le plus simple est d'utiliser l'outil de retournement (MAJ+F) et de choisir l'option Vertical :

1.jpg

Déplacer en suite le deuxième carton de manière a ce que les pointes se touchent :

2.jpg

Maintenant la partie astuce qui va nous permettre de faire un effet de reflet avec notre carton : Découpez la partie gauche du carton jusqu'a la pliure avec l'outil R comme ceci :

3.jpg

Une fois la sélection faites, utiliser l'outil de cisaillement (MAJ+S) et appliquer une ampleur de cisaillement Y de 93 devrait être suffisant. Faites la même chose avec la partie droite du carton (l'ampleur sera plus grande car l'angle est plus élevé, j'ai mis 350). Vous devriez obtenir ceci :

4.jpg

Réglez l'opacité du calque sur 30, et ajoutez lui un masque de calque (en faisant un clic droit sur le calque). Prenez l'outil de dégradé, et choisissez le dégradé (PP vers transparent en noir). Faites un dégradé sur le calque en question, et voila notre reflet en perspective :

5.jpg

Pour plus de réalisme il est conseillé de couper les volets inférieur(voir sélection ci dessous) de manière a ne laisser apparaitre que les volets ouvert vers nous, et donc se reflettant vraiment sur une surface plane.

6.jpg

09/11/2009

[mplayer] - Encoder un flux avec mplayer

Une petite ligne pour indiquer comment encoder un flux audio en ligne de commande et avec mplayer :

mplayer le_flux.extension -dumpstream -dumpfile fichier_destination.ogg

Voila, tout simple mais terriblement éfficace.

[Earcandy] - Le gestionnaire de volume sonore qui adouci les moeurs

qubodup_Public_Domain_Audio_Symbol.pngIl y a parfois des programmes tout simple dans l'idée, mais qui s'avére génial à l'utilisation (specto en est une illustration). Earcandy fait parti de ces programmes tout simple, une idée, mais qui gérent bien ce qu'ils font. Ici earcandy va vous réconsciller avec les évennements audio que peut générer votre pc. Imaginez  : Vous écouter votre cd préféré en surfant, tout a coup vous arrivez sur une page avec une splendide site qui vous offre la 9eme symphonie en fond sonore, pendant que thunderbird vous envoie une alerte d'arrivé de nouveau message.... la situation vire a la cacophonie.... Heureusement Earcandy vient sauver vos petites oreilles du brouhaha de la vie binaire qui s'offre au moindre détour de clic.... Ce petit bout de soft prend le contrôler de pulse audio et régle les niveaux sonores des différentes applications en fonction de régle que vous aurez définit. Ainsi si vous pourrez définir que la musique qui a la priorité est la fenêtre avec le focus, envoyer le son sur son casque...

Télécharger le programme ici : https://launchpad.net/earcandy

Les ppa : https://launchpad.net/~earcandy-devel/+archive/ppa

01/11/2009

[ripit-rubyripper] - Encoder un CD en CLI : le retour

141517677.pngIl y a quelques temps je vous avait parlé de mon outil pour ripper un cd : abcde. Ce dernier est parfait en tout point pour mon utilisation (Cd vers ogg) mais j'ai voulu jeter  un coup d'oeil vers d'autre horizons(toujours en cli). Aprés moultes test, et retest, je n'ai rien trouvé de mieux que mon Abcde. Pourtant un soft à attiré mon attention : ripit. Il ne remplace pour l'instant pas mon abcde, mais restera comme une alternative de choix ... au cas où.

L'extraction du cd se fait avec  lame, oggvorbis, flac, faac, musepack ou mp4als. Les requêtes de font sur musicbrainz ou freeCDDB. Le soft est écrit en perl, et permet l'encodage en mp3, ogg, mpc, m4a ou als. Les tags sont bien sur de la partie, et on peut également créer sa playlist. Un bon soft en CLI.

Il y a également RubyRipper,(je parle toujours d'une version CLI il existe une version en ruby-gtk2 que je n'ai pas testé) mais impossible d'extraire quoi que ce soit, il récupére bien les infos de cddb mais s'arrête net dés l'extraction commencé :

STATUS
Ripping progress (0 %)
Ripping track 1
Expected filesize for track 1 is 66502844 bytes.

Et je reviens au prompt.Le dossier Vorbis est bien crée avec le début d'extraction en wav et le début d'encodage en ogg.

Si quelqu'un à déja eu le cas je suis preneur, car le soft a l'air intéressant. Je posterais sur le forum des développeurs à l'occasion. Cela sera l'occasion d'une troisiéme note sur l'encodage en cli : Encoder un CD en CLI : la vengeance.

28/10/2009

[preload] - Accélérer le lancement de vos applications

Startright_True_Airspeed_Indicator.pngAvoir ses applications rapidement lancés est le rêve de tout en chacun. Qui n'a jamais pesté contre le temps de chargement de firefox ou de openoffice ? L'avantage est que une fois lancé, ces applications sont beaucoup plus rapide au deuxiéme lancement. L'idée de preload est justement de préchargéer les applications que vous utilisez le plus souvent pour rendre le lancement plus rapide en évitant le premier chargement à froid.

L'application s'installe simplement et se trouve dans la majorité des dépôts. Le seul fait de l'installation vous équipe du logiciel. Ce qui suffit dans la majorité des cas. Mais si vous aimez mettre les mains dans les fichiers de configurations vous pouvez jeter un coup d'oeil a /etc/preload.conf Tout un tas d'options vous permettrons de régler le comportement de preload. Ainsi vous pourrez définir le cycle de secondes où preload analysera les programmes que vous utilisez et ainsi définir vos préférences. Mais également vous pourrez définir le pourcentage de mémoire que peut d'octroyer preload.

Les gains de performance vont de 10% à 50% pour firefox, entre un lancement à froid et un lancement avec preload.

27/10/2009

[rails] - Comprendre le fonctionnement de Rails avec le scaffold

504508655.jpegEn Ruby on Rails il existe une fonctionnalité bien pratique :  Scaffold. C'est un outil d'apprentissage trés intéressant pour générer automatiquement une 'application'. En effet avec un minimum de paramétres on peut voir tourner ce que l'on souhaite et surtout en analyser le code source pour comprendre le fonctionnement de Rails.

Nous allons voir comment créer une application qui génére une liste de course (mais vous pouvez tout aussi bien tester avec une liste de CD, de recette, ...). Comme à chaque fois il est préférable de définir ce que nous allons faire  :

Nom de l'application : liste de course
Table : courses
Champs nécéssaires : article et quantite

rails  liste_de_course -d mysql
cd liste_de_course


Configurez config/database.yaml pour coller aux paramétres de votre base de donnée (username, password et host, attention pour ce dernier il peut être nécéssaire d'indiquer 127.0.0.1 au lieu de localhost)

Enfin créons la base de donnée associé avec :
rake db:create

Nous voila prêt à créer une table et les champs que nous avons défini. En respectant la convention notre modèle étant Course les noms des tables seront en minuscule et au pluriel, ce qui nous donne comme nom de table courses. Les noms des champs seront : article en tant que string et quantite en tant que nombre (integer).

Voici la commande magique du scaffold :
script/generate scaffold Course article:string quantite:integer

Ce qui génére un certain nombre de fichiers :
exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/courses
exists app/views/layouts/
exists test/functional/
exists  test/unit/
create test/unit/helpers/
exists public/stylesheets/
create app/views/courses/index.html.erb
create app/views/courses/show.html.erb
create app/views/courses/new.html.erb
create app/views/courses/edit.html.erb
create app/views/layouts/courses.html.erb
create public/stylesheets/scaffold.css
create app/controllers/courses_controller.rb
create test/functional/courses_controller_test.rb
create app/helpers/courses_helper.rb
create test/unit/helpers/courses_helper_test.rb
route  map.resources :courses
dependency model
exists app/models/
exists    test/unit/
exists test/fixtures/
create app/models/course.rb
create test/unit/course_test.rb
create test/fixtures/courses.yml
create db/migrate
create db/migrate/20091026231134_create_courses.rb


Ceux qui sont précédés de exists on été crée lors de la première invocation de la commande rails, ceux précédés de create sont crée.

Si vous regardez dans le fichier db/migrate, vous verrez ceci :

class CreateCourses < ActiveRecord::Migration
def self.up
create_table :courses do |t|
t.string :article
t.integer :quantite

t.timestamps
end
end

def self.down
drop_table :courses
end
end


self.up est tout ce qui sera crée lorsque nous lancerons la migration et self.down tout ce qui sera éffectué lorsque nous reviendrons un cran en arriere. Ainsi nous voyons que cette migration crée bien une table courses, et un string article et un integer quantite. Ceci est cohérent avec ce que nous voulons, lançons la migration :

rake db:migrate

Afin de simplifier l'accés à notre petit programme, éditez le fichier config/routes.rb et ajouter cette ligne :

map.root :controller => 'courses', :action => 'index'

nous définissons le répertoire racine de notre application, qui pointera sur le controller courses et l'action index (n'oubliez pas d'éffacer le fichier public/index.html).

Lancez maintenant le serveur avec :
script/server

Dans votre navigateur ouvrez : http://localhost:3000, vous devriez avoir ceci :

liste.jpg

Ainsi vous pouvez ajouter des nouvelles courses, et une fois la base rempli, les éditer, les supprimer ou les afficher. Ce qui corresponds au modèle CRUD : Create, Read, Update et Delete. Vous noterez que l'on retrouve chacun des modèles dans le controller : CoursesController du fichier app/controller/courses_controller.rb (avec show, new, update et destroy) et également dans chacune des vues dans app/views/courses avec les fichiers new.html.erb, edit.html.erb ... ce qui vous permet de voir l'interaction entre le controller et les vues. Quand au modèle crée automatiquement par le scaffold et présent dans app/model/course.rb il est tout simple :

class Course < ActiveRecord::Base
end


Mais vous pouvez par exemple définir que la saisie d'un article est obligatoire et que la partie quantite est forcément numéraire et ce trés simplement :

class Course < ActiveRecord::Base
validates_presence_of :article
validates_numericality_of :quantite
end


la liste des validations possible est disponible ici : http://ar.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html

Essayez à présent de saisir un article vide, ou une quantité non numéraire. Un message vous avertira de l'erreur. Pour l'instant tout ceci est en anglais mais nous verrons prochainement comment franciser une application. Ce qui est important c'est de voir qu'en 4 lignes de codes on peut obtenir une application MVC fonctionelle et prête à tourner, cela permet d'observer et de tester sur une base opérationnelle. Essayer par exemple de faire d'autres exemples avec scaffold sur d'autres sujets. Analyser le code et les interactions entre le controller et la vue. Nous verrons la prochainne fois comment créer une application sans passer par le scaffolding.

23/10/2009

[rails] - Un hello world en ruby on rails

rails.jpeg

Ruby on rails est un framework intéressant mais la documentation pour le débutant est délicate à trouver, et encore plus en français j'ai donc décidé de faire quelques billets sur ce framework. Pour ceux qui se demande se qu'est Ruby on Rails je les renvois a l'excellent wikipedia.

Nous allons voir le plus simple des exemples que l'on puisse creér en RoR : un petit programme qui va nous dire soit bonjour soit aurevoir.

Placer vous en ligne de commande et tapez :

rails bonjour_monde -d mysql
le denier argument est bien entendu à modifier si vous utiliser un autre type de base de donnée (sqlite3...)

Nous allons ensuite rentrer dans le répertoire que vient de nous créer rails, ne tenez pas compte du nombre de fichier. C'est un peu affolant au début mais ce que vous devez retenir pour aujourd'hui c'est qu'il à généré d'un coté les éléments de type code (ce que nous allons voir dans app/controllers) et les répertoires de vue qui seront ce que va nous afficher le navigateur (app/view).

cd bonjour_monde

modifiez ensuite config/database.yml en fonction de sa base de données MySql (attention sur mon poste localhost ne fonctionne pas il m'a fallut mettre 127.0.0.1. Autre point délicat respecter les espaces aprés les :

Créons la base de données :

rake db:create

voyons si tout fonctionne en lançant :

script/server

Avec votre navigateur connectez vous sur localhost:3000, vous devriez avoir ceci :

rails_c.jpg

C'est la page d'accueil qui nous indique que notre serveur fonctionne bien, et qu'il n'y a pour l'instant rien de configurer.
Nous allons créer notre premier controller pour afficher un message.

script/generate controller message

Dans le dossier app/controllers vous avez maintenant un nouveau fichier avec uniquement cette entrée :

class MessageController < ApplicationController
end


Comme nous voulons afficher un bonjour, nous allons définir une action bonjour et aurevoir, et envoyer une variable à la vue, modifier comme suis :

class MessageController < ApplicationController
def bonjour
@contenu = 'Bonjour le monde'

end
def aurevoir
@contenu = 'Au revoir le monde'
end

end


Il faut maintenant modifier la vue en créant app/view/layouts/application.html.erb qui est globalement le template de notre application, tout ce qui va émaner des actions (ici bonjour et aurevoir) passera dans le yield :

Que va tu nous dire ?:<br/>
<%= yield %>


Créons ensuite les fichiers lié aux actions, comme dans RoR tout est convention, il suffit de créer un fichier du nom de notre action : app/view/message/bonjour.html.erb et app/view/message/aurevoir.html.erb

<%= @contenu %>

Lancer votre navigateur sur http://localhost:3000/message/bonjour et sur http://localhost:3000/message/aurevoir, la magie opére. Nous allons rajouter un menu afin de naviguer dans ces actions controller Message :

<%= render :partial => 'menu' %>

on pourrait mettre deux fois la meme chose mais on va faire un systéme d'include : un rendu d'un partiel (un block). Placer le code ci dessous dans bonjour.html.erb et aurevoir.html.erb. Puis créez un fichier app/view/message/_menu.html.erb (tout partiel commence par un _, la convention RoR saura qu'il faut allez chercher le partiel dans ce fichier) et placez y :

<br/>
<%= link_to 'Je dis bonjour', :controller => "salutation/bonjour" %>
<%= link_to 'Je dis au revoir', :controller => "salutation/aurevoir" %>

le link_to nous permet de créer automatiquement des a href (html) avec son contenu et le lien vers un controller.

Dans message controller nous allons rajouter une action par défaut sur l'index
(de manière a appeller uniquement http://localhost:3000/message) :
def index
@contenu = 'Faites votre choix'
end


il nous faut donc maintenant créer une vue dans app/view/message/index.html.erb, procédez comme ci dessus plaçant le code :

<%= @contenu %>

Enfin nous voulons rajouter un retour à l'accueil / dans le _menu.html.erb des vues il suffit d'ajouter ce lien qui appelle l'action index du controller message :
<%= link_to 'Acceuil', :controller => "message/index" %>

Amusez vous à passer des variables, créer des partiel, et à modifier le fichier app/view/layout/application.html.erb pour améliorer cet exemple. Nous verrons la prochainne fois comment interagir avec une base de données.

15/10/2009

[axel] - Un wget vitaminé !

rejon_Network_Node_Cloud_Swarm.pngJe viens de découvrir un petit outil en ligne de commande trés sympathique, Axel :il accélere les transferts HTTP et FTP, en utilisant plusieurs connexion pour un seul fichier. Il est surtout possible de cumuler plusieurs miroirs et ainsi avoir une vitesse de téléchargement d'un ISO constant et au maximum de votre connexion. Autre particularité, le flux est stocké directement dans le fichier sans passer par un fichier temporaire (sortez vos MD5 tout de même).
Le principe de fonctionnement est simple : on passe un seul et unique argument le fichier que vous souhaitez télécharger. Si vous souhaitez utiliser plusieurs miroir vous pouvez lui passer plusieurs URL. Dans le cas ou vous ne connaîtriez pas de miroir pour votre fichier, pour pouvez utiliser l'option --search qui utilisera alors le moteur filesearching.com, vous pouvez même affiner en indiquant le nombre maximum de miroir a utiliser.

Et pour couronner le tout l'outil est léger et n'a pas de dépendance. Attention cependant : l'outil n'a pas de fonction résume.

13/10/2009

[PDF] - Imprimer 4 pages identiques dans un PDF

Anonymous_Scissors_2.pngJ'ai sur un portable la LTS 8.04 d'ubuntu, pour diverses raisons je ne souhaite pas le migrer tant que la prochaine LTS ne sera pas sortie. J'utilise donc certaines versions de logiciels qui sont un peu ancienne. Par contre j'ai voulu utiliser ce portable lorsque j'étais en déplacement pour faire PDF avec une mise en page issu de inkscape et ensuite faire un flyer réparti en 4 par page avec ce même PDF. Récit de mon petit parcours.

Tout d'abord j'ai crée mon document sous inkscape, une fois satisfait j'ai voulu imprimer le fichier en PDF avec l'option Fichier -> Imprimer et en utilisant la fonction PDF. Allez savoir pourquoi Inkscape m'a généré deux pages, une avec le document en question et l'autre une vide. J'ai donc sorti mon pdftk (paquet pdftk) :

pdftk source.pdf cat 1 output original.pdf

J'avais donc maintenant mon document avec uniquement la premiére page, restait donc a imprimer cette page en 4 fois sur une même page. Seul soucis c'est qu'il faut un document de 4 pages pour pouvoir remplir la page. J'ai donc encore une fois utilisé pdftk :

pdftk original.pdf original.pdf original.pdf original.pdf  output resultat_avec_4_pages.pdf

On prends 4 fois le fichier d'origine pour crée un document de 4 pages avec 4 fois le même document. Restait donc mettre le tout sur la même page et ce grace à pdfnup (dispnible dans le paquet pdfjam)

pdfnup resultat_avec_4_pages.pdf --nup 2x2 --outfile document_final.pdf

Note : le soucis d'impression de la page blanche a été résolu sur les versions ultérieur de inkscape.