Bounga's Home

Trucs et astuces

C'est dans cette catégiorie que vous trouverez des petites astuces pour administrer votre système Unix ou encore pour programmer en C, C++, Shell Script, Ruby ou PHP

Fil des billets - Fil des commentaires

lundi, 21 décembre 2009

Valider un modèle qui ne descend pas de ActiveRecord::Base sans plugin

Après bien longtemps sans le moindre signe de vie, voici un petit billet rapide pour vous faire savoir que je suis toujours présent et que je continu à développer en Ruby !

Vous est-il déjà arrivé d'avoir besoin, en Rails, d'une classe qui se comporte comme un modèle ActiveRecord mais qui n'en ai pas un ? Typiquement, un modèle auquel aucune table n'est associée en base.

Le cas le plus simple où l'on peut avoir besoin de ce genre de classe serait par exemple un modèle qui gère les prises de contact (formulaire de contact) depuis le site.

Votre formulaire de contact doit valider les infos qui lui sont passées (est-ce que les champs obligatoires sont remplis, est-ce que l'email semble valide, …) avant d'envoyer par mail cette prise de contact à l'admin mais vous n'avez absolument pas besoin d'enregister cette prise de contact en base et donc aucune envie de créer une table dédiée pour simplement satisfaire ActiveRecord !

Il existe des plugins qui font ça me direz-vous. Certes oui, c'est vrai. Mais j'aime comprendre comment fonctionne les choses et j'aime autant me passer d'un plugin pour une chose qui me paraît aussi simple.

Lire la suite...

jeudi, 12 mars 2009

MAC OS X : Synchroniser son carnet d'adresses avec GMail

Un petit post rapide qui pourra en aider plus d'un je pense.

J'ai voulu utiliser la fonctionnalité de synchronisation des contacts avec GMail. Cette fonctionnalité est incluse dans l'application "Carnet d'adresses" de Mac OS X (10.5) si vous posséder un iPod ou un iPhone (ou que vous ayez bidouiller pour l'activer en modifiant les fichiers de configuration .plist).

Malheureusement pour de nombreuses personnes, même si la configuration se passe sans souci, aucune synchronisation ne se fait.

Une solution radicale existe en passant par le terminal :

/System/Library/PrivateFrameworks/GoogleContactSync.framework/Versions/A/Resources/gconsync --sync com.google.ContactSync --syncmode fast

Et voilà, après quelques secondes, tous vos contacts sont synchronisés.

Si vous voulez forcer Gmail à avoir raison en cas de conflit, vous pouvez utiliser le mode de synchronisation "pullthetruth"

/System/Library/PrivateFrameworks/GoogleContactSync.framework/Versions/A/Resources/gconsync --sync com.google.ContactSync --syncmode pullthetruth

Pour forcer le rafraîchissement de vos contact, vous pouvez utiliser le mode de synchronisation "refresh"

/System/Library/PrivateFrameworks/GoogleContactSync.framework/Versions/A/Resources/gconsync --sync com.google.ContactSync --syncmode refresh

lundi, 25 décembre 2006

Ruby : utiliser la notion d'infini dans votre code

Il peut arriver dans certains cas que vous ayez besoin d'utiliser la notion d'infini dans votre code.

En Ruby c'est possible ! Il suffit de connaître l'astuce.

Lire la suite...

lundi, 11 décembre 2006

Rails : Gérer des pages 404 et 500 dynamiques

Par défaut, dans Rails, les pages 404 (page inexistante) et 500 (erreur de l'application) sont des pages statiques. Vous ne pouvez donc pas y utiliser vos layouts ou même y insérer du contenu de façon dynamique en fonction de l'erreur qui s'est produite.

Une solution existe, vous permettant de générer une page aussi dynamique que vous le souhaitez. Cette solution passe par l'utilisation de rescue_action_in_public. Voyons comment la mettre en place.

Lire la suite...

jeudi, 31 août 2006

Vous avez un Mac récent et iWeb ne veut pas fonctionner, une solution existe !

En voulant tester les diverses applications livrées avec mon Mac j'ai été confronté à un problème. J'ai lancé iWeb et j'ai constaté que l'ensemble des fonctionnalités disponibles dans les menus étaient grisées. Impossible de faire quoi que ce soit, même pas d'ajouter une page. Pas idéal pour créer des pages web :-)

Lire la suite...

dimanche, 27 août 2006

RoR : De l'utilisation de has_and_belongs_to_many (un formulaire pour plusieurs tables)

Il est fréquent de devoir associer des enregistrements d'une table à un ou plusieurs enregistrements d'une autre table. En modélisation SQL, c'est ce qu'on appel une relation N <=> N. En Ruby on Rails, on décrit cela dans les modèles à l'aide de has_and_belongs_to_many. Je vais ici tenter de vous expliquer comment mettre en oeuvre une telle relation dans un seul et unique formulaire qui sera capable de gérer tous les aspects liés à un enregistrement en une seule opération.

Lire la suite...

samedi, 26 août 2006

Tester efficacement les redirections en Ruby on Rails

Ruby on Rails permet de mettre facilement en place des tests fonctionnels qui nous permetttent de savoir si nos controlleurs se comportent comme on le souhaite.

Un test fréquent est de voir si, dans certaines conditions, notre controlleur nous redirige bien vers une page donnée. Malheureusement la méthode assert_redirected_to qui nous permet de faire cela ne fonctionne pas comme on pourrait s'y attendre.

Lire la suite...

samedi, 5 août 2006

Des snippets Ruby qui facilitent la vie

Certains sites ne cessent de nous apporter des petites merveilles au fil des jours, c'est le cas de http://www.bigbold.com, le blog d'une société de développement Ruby on Rails anglaise. Deux morceaux de code très intéressants y ont été publiés récemment.

Le premier est un helper pour Rails qui permet de traiter plus falicement les affichages des flashs pour les niveaux notice, warning et error. Cet helper supporte également la gestion des erreurs ActiveRecord::Errors.

Le deuxième permet de mettre facilement en place un démon pour n'importe laquelle de vos application écrite en Ruby. Vous pourrez donc grâce au module proposé, créer votre service, le démarrer et le stopper facilement et proprement.

samedi, 10 juin 2006

Créer de belles URL à partir d'un texte en Ruby

Suite à une discussion sur #rubyonrails.fr@freenode.net, j'ai découvert un morceau de code sympa et bien pratique pour qui veut construire une URL qui tient la route à partir d'un titre ou d'un texte.

Lire la suite...

lundi, 20 mars 2006

Ajouter facilement les modes verbeux / silencieux à votre application Ruby

Il est parfois intéressant d'ajouter à son application les modes verbeux / silencieux. Les utilisateurs peuvent ainsi contrôler facilement la quantité d'informations qu'ils souhaitent avoir à propos du fonctionnement de l'application. Ces modes sont tout particulièrement utiles lorsque vous utilisez des applications en mode texte. Si vous développez votre application en Ruby, vous pouvez tirer partie des fonctionnalités disponibles dans le langage pour mettre facilement en place ces modes.

Lire la suite...

mardi, 20 décembre 2005

Screen : les bons tuyaux

Cela fait maintenant plusieurs années que j'utilise Screen dans mes consoles et je m'étonne encore de ses possibilités. Grâce à Screen, j'ai plusieurs fenêtres dans la même console, tous les raccourcis clavier qui vont bien et en plus je peux récupérer mes consoles à distance.

Mais pour optimiser l'utilisation de Screen, il faut encore le configurer correctement ce qui peut être plus difficile qu'il n'y parait tant ce logiciel regorge d'options. Je vais donc vous donner quelques pistes qui pourront vous servir ...

Lire la suite...

mardi, 10 mai 2005

Vim : Insérer facilement un délimiteur ERuby

Petite astuce pour ceux qui utilisent Vim et qui programment en ERuby comme les fans de RoR par exemple.

Lorsqu'on utilise ERuby, il faut très souvent insérer des délimiteurs du type <%= expression %>. Après quelques lignes de code, cela devient vite ennuyeux. Je vous propose donc une macro pour Vim qui permettra de vous faciliter la tâche.

Lire la suite...

dimanche, 8 mai 2005

Désactiver la mise en veille

Il arrive parfois que la mise en veille de votre écran soit plus énervante qu'utile. Si vous souhaitez désactiver cette fonctionnalité, rien de plus simple :

  • Sous X, vous devez utiliser :
    • xset s off : pour couper l'économiseur d'écran
    • xset -dpms : pour couper le mode Energy Star
  • En mode console, vous devez utiliser :
    • setterm -powersave off

Vous pouvez évidemment paramétrer de nombreux autres aspects pour la gestion de X ou de vos consoles, si vous voulez en savoir plus reportez-vous à man xset et man setterm.

jeudi, 28 avril 2005

Alléger vos exécutables écrits en C

Au hasard d'une de mes lectures j'ai découvert qu'il est possible d'alléger les exécutables produits lorsque ceux-ci ont été écrits en C.

En effet, lorsque vous écrivez un programme en C, vous vous servez de librairies externes incluses par le biais de la commande pré-processeur #include. Lorsque vous incluez une librairie, toutes les fonctions qu'elle contient sont ajoutées à votre exécutable final, même celles que vous n'utilisez pas.

Il est possible d'enlever de votre exécutable toutes les définitions de fonctions que vous n'utilisez pas, pour cela il suffit d'appeler la commande strip [1] avec comme paramètre le ou les exécutables que vous voulez alléger. Suite à cela, vos exécutables ne contiendront plus aucune référence aux fonctions que vous n'utilisez pas dans votre code.

Vous venez donc d'économiser de l'espace disque mais surtout vous avez amélioré le temps de chargement de votre application.

Notes

[1] cet utilitaire est disponible en standard sur tout Unix

lundi, 18 avril 2005

Pare-feu au niveau applicatif

Si vous désirez pouvoir filtrer le traffic réseau en fonction du logiciel qui fait la demande alors lisez cette petite documentation: Debian Administration :: Application level firewalling.

Une fois de plus, on voit que iptables a réponse à toutes les questions quand il s'agit de contrôler les données qui circulent sur votre réseau.

lundi, 31 janvier 2005

Ne plus afficher les spams dans Pan

Pan est un lecteur de groupes de nouvelles. C'est un logiciel très bien fait mais un peu léger quant aux possibilités de filtrage des messages. J'ai pris l'habitude de suivre beaucoup de listes de diffusion et plutôt que de recevoir tous les jours des centaines de mails, j'ai décidé de m'inscrire aux groupes de nouvelles de Gmane [1]. Mais un problème frappe les listes de diffusion, elles sont particulièrement exposées au spam. Il a donc fallut trouver un moyen de filtrer les mails indésirables.

Notes

[1] une passerelle listes de diffusion -> groupes de nouvelles et inversement

Lire la suite...