Sunfox


Arel through examples

9 mars 2021 , , , ,

When a database query cannot be described using Ruby on Rails’ short ActiveRecord syntax, consider building your queries using Arel instead of going for raw SQL strings.

This has the following advantages:

  • Escaping by default: this helps not end up with SQL injections. We don’t like those.
  • Full names: using "users"."email" instead of email in your queries helps you be future-proof by making queries that won’t break when you merge queries together or add columns with conflicting names.
  • Composable: Arel expressions allows you to mix SQL commands as Ruby objects.
  • Uniform queries: it ensures that the generated SQL always looks the same. For example "users"."email" ASC instead of email asc. This makes it easier to search through logs and can help caching mechanisms.
Suite de l’article…

Actor

18 avril 2020

I created a Ruby gem called Actor. It helps you harmonize your application’s service objects.

Service Objects?

Service objects are a way of making your web applications grow in complexity while keeping your controllers and models thin. For that you’d create classes that represent your actions, for example, CreateComment, PlaceOrder, DestroyUser, etc.

At the start, these actions might hold very little code and look a lot like a regular controller. But as your app grows, you’ll realize that something simple like creating a comment can turn into a serie of actions:

  • creating a record in the database,
  • checking the contents for spam or duplicates,
  • updating counters and cache keys,
  • sending email or Slack notifications,
  • logging the action to another system,
  • triggering a job to translate the contents,
  • etc.

These actions deserve a way of being represented as first-class citizens in your application. That’s where actor comes into play!

Suite de l’article…

Comment je travaille

10 mai 2019 1 commentaire, , ,

Photo d'un souvenir du Japon

Voici un mode d’emploi sur mon travail en tant que Lead Développeur à KissKissBankBank.

Même si l’exercice est un peu étrange, l’idée derrière l’écriture de ce « Manager README » est de partager mes valeurs et mes attentes afin d’être plus transparent et de mieux travailler ensemble. Allez, c’est parti.

Suite de l’article…

Traduire ses routes dans Rails

8 juillet 2015 1 commentaire, , , ,

Photo de portes de Fushimi Inari-taisha

Les URLs de votre site sont visibles et méritent autant d’attention que le reste de votre interface. Dans ce cas, pourquoi avoir des chemins en anglais uniquement alors que le reste de votre site est traduit ?

https://monsite.com/en/books/1/edit
https://monsite.com/fr/books/1/edit
https://monsite.com/es/books/1/edit

Je trouve que les adresses suivantes, traduites, sont plus élégantes et compréhensibles par tous :

https://monsite.com/en/books/1/edit
https://monsite.com/fr/livres/1/éditer
https://monsite.com/es/libros/1/editar

Mieux, non ?

Pour avoir des URLs pareilles avec Ruby on Rails sans pour autant tout dupliquer, j’ai développé la gemme route_localize.

Une fois installée, il suffit d’entourer les routes à traduire dans config/routes.rb :

scope localize: %w(en fr es) do
  resources :books
end

Vous pouvez ensuite traduire les chemins que vous voulez dans vos fichiers de localisation :

fr:
  routes:
    books: livres
    edit: éditer

Et voilà ! Magie !

Enfin, si vous souhaitez faire passer vos utilisateurs d’une langue à l’autre sur votre site un petit helper prends la langue voulue et vous retourne le chemin traduit.

Enregistrer la langue d’un compte utilisateur avec Devise

6 juillet 2015 , , , , , ,

Daim photographié

J’ai créé une petite gemme Ruby. Son petit nom c’est devise-track_locale. Si vous utilisez Ruby on Rails et Devise sur un site multilangue, cela vous permets d’enregistrer la dernière langue utilisée par l’utilisateur, automatiquement.

C’est un module Devise, donc son installation est aussi simple que d’ajouter :track_locale dans la liste de modules Devise et un champ locale sur les utilisateurs.

Ce n’est pas grand chose, mais plutôt que de garder cette fonctionnalité sur un site j’en ai fait une petite librairie externe, réutilisable, open-source, testée. Et je compte bien en faire autant pour tous ces petits développements qui sortent des fonctionnalités du cœur de mes sites.

Ember en 2015

17 mars 2015 , ,

Trois choses à retirer de la Keynote d’ouverture d’EmberConf 2015 à propos du framework JavaScript Ember :

EmberJS Logo

V2

Toutes les nouvelles features de la version 2 d’Ember sont déjà dans la version 1. Cette nouvelle version va juste retirer les warnings. Du coup la mise à jour d’Ember peut se faire de façon beaucoup plus graduelle et rétrocompatible. Si on compare ça à Angular, la version 2 ne sera pas du tout compatible et introduit énormément de nouvelles façons de faire d’un coup.

Suite de l’article…

Rails et Emails

4 septembre 2014 2 commentaires, , , , , , ,

parisrb

À la dernière conférence Paris.rb je présentais 6 choses à arrêter de faire si vous envoyez des emails avec votre application Ruby on Rails.

Suite de l’article…

Comment j’ai rendu mon blog responsive

9 août 2014 5 commentaires, , ,

L’HTML et le CSS de ce blog ont été écrits en 2006. En années Internet c’est comme si je l’avais fait il y a 3042 ans.

À cette époque l’iPhone n’existait pas encore et on ne se préoccupait pas de savoir si un site fonctionnait sur son assistant personnel ou pas. La première mention de Responsive Web Design date de 2010 (il y a 520 ans environ). Essentiellement il s’agit de transformer un site pour qu’il puisse s’adapter de façon fluide à toutes tailles d’écrans.

Transformer quelque chose qui n’a pas été pensé mobile first n’est pas chose facile, alors un vieux site au CSS croupissant, cela paraît insurmontable.

Suite de l’article…

En CSS, n’utilisez que des classes

6 août 2014 2 commentaires, ,

Photo de la mer

CSS permets d’utiliser plein de sélecteurs raffinés pour ajouter du style à vos éléments. Je soutiens qu’il faut éviter autant que possible d’utiliser quoi que ce soit d’autre que le sélecteur de classes (.foo).

Pour que vos styles soit réutilisables et ne soit plus aussi liés à votre HTML fini donc d’utiliser des sélecteurs d’identifiants, de balises, d’attributs ou de parenté.

Voici pourquoi.

Suite de l’article…

Ajoutez la couleur dominante derrière vos images

25 juillet 2014 3 commentaires, , ,

Si vous pouvez extraire la couleur dominante d’une photo, vous pouvez améliorer la perception du chargement de votre site en vous servant de celle-ci tant que votre image n’est pas chargée.

Voici un exemple sur cults3d.com :

Chargement progressif d'une page Web où les couleurs de fond des images se chargent avant les images elle-même

HTML

En HTML, le plus simple est d’appliquer la couleur dominante sur son style inline. C’est cette couleur qui apparaîtra durant le chargement

<img style="background: #f3de56" src="…" width="120" height="120" />

Avec Rails

Si vous utilisez la librairie CarrierWave dans votre application Rails, vous pouvez extraire facilement la couleur dominante à chaque upload grâce à ma gemme ruby carrierwave-color.

Avec WordPress

Si vous utilisez WordPress, ajoutez l’extension dominant-color et ça sauvegardera la couleur dominante à chaque upload de medias. Vous pourrez même éditer la couleur choisie, directement dans l’administration.

EasouSpider le robot qui ne sait pas parler l’utf8

23 juillet 2014 , , , , ,

Photo de Mathieu mangeant une araignée

Ces derniers jours je recevait une trentaine d’emails par jour m’indiquant qu’une erreur avait éclatée sur cults3d.com. Ces exceptions provenaient toutes d’un robot chinois, EasouSpider, qui parcoure le Web pour remplir son moteur de recherche.

Ce robot ne sait pas parler l’unicode comme tout le monde et envoie dans les formulaires des valeurs mal encodées, ce qui fâche Ruby on Rails. Le problème est surtout que Rails ne traite l’erreur que bien trop tard, lorsqu’on essaie de lire les paramètres de la requête. Et là l’erreur est une incompréhensible ArgumentError :

invalid %-encoding (Q/B0*ÜHܘ0ÅÅ1 0 U GB1 0 U.…

Suite de l’article…

Retrouver les clefs de localisation facilement avec Rails

17 juillet 2014 3 commentaires, , ,

Photo de Drapeaux Lego

J’utilise Locale avec Ruby on Rails pour permettre à n’importe qui dans l’équipe de modifier les textes d’un site quelle que soit la langue.

Néanmoins, ce n’est pas évident pour celui qui n’a pas le code sous les yeux de retrouver quel texte correspond à quelle clef.

Suite de l’article…

ActionMailer n’aime pas vos URLs (par défaut)

14 juillet 2014 , , ,

Faire un lien dans un email dans une application Ruby on Rails devrait être aussi simple que de faire un lien dans le reste de l’application, non ?

Photo of a miniature train, by Sunny

Suite de l’article…

Liens de partage sans JavaScript vers Facebook, Twitter, Google Plus, Pinterest et email

6 février 2014 8 commentaires

Exemple de boutons de partage de Cults3d.com

Parce que vous voulez inclure des liens de partage sans que ça ne vienne importer 1 Mo de JavaScript sur votre page, voici des liens de partages. Sans balise script. Rien que des liens. Simple.

Ne pas oublier d’URL-encoder chaque paramètre, comme dans les exemples.

Suite de l’article…

Favicon dynamique

16 juin 2013 1 commentaire

Capture d'écran de favicônes toutes identiques
Sites sans favicon : Boo!

Le favicon est un endroit assez délaissé dans une page Web alors que c’est parfois la seule indication visuelle permettant aux utilisateurs de de se retrouver dans ses onglets.

Edith

Sur Edith j’ai choisi de représenter la page en cours directement dans le favicon, en le mettant à jour à chaque caractère tapé.

Capture d'écran montrant la modification en temps réel de la favicon
favicon qui change à la volée sur Edith

JavaScript

Trop facile.

  1. Créer un canvas de 16×16 et colorier ses pixels via JavaScript
  2. Appeler sa méthode toDataURL() pour transformer le canvas en data:image/png;base64,iVBORw0…
  3. Placer dans le DOM dans le <link rel="icon" href="…" /> de la page en cours.

Noter que pour qu’il soit mis à jour instantanément Firefox a besoin qu’on supprime et qu’on recréer la balise link.

Exemple dans le CoffeeScript utilisé sur Edith.

Can I Use?

Fonctionne là où canvas et les datauri fonctionnent, soit IE9+.

Erreurs 404 dynamiques dans Rails 3

14 novembre 2012 , , , ,

Utiliser un fichier statique public/404.html dans Rails est très vite limitant. Si on veut utiliser le layout normal de l’application, des informations dynamiques comme des menus, le nom de l’utilisateur courant ou un formulaire de recherche il faut rendre ces erreurs dynamiques.

Pour ça il faut intercepter deux erreurs qui produisent des 404 : les infos nos trouvées dans la base via ActiveRecord::RecordNotFound et les routes qui n’existent pas avec ActionController::RoutingError.
Suite de l’article…

May the fourth be with you

5 mai 2011 1 commentaire

Pour continuer de célébrer le jour de Star Wars voici de gros boutons de sons en HTML5 grâce à bigbuttons :

Suite de l’article…

Quand ne faut-il pas mettre en ligne un site Web ?

9 décembre 2010 18 commentaires, , , ,

Sur votre calendrier, remplacez mise en ligne les vendredi à 19:00 par sodomie
Il y a mieux à faire
les vendredis…

  • Le vendredi
  • Le soir
  • À un pic de fréquentation

Merci.

Calendriers de l’avent pour artisans du Web

2 décembre 2010 3 commentaires, , , , , , ,

Casier en bois numéro 24
Un mois à 24 jours

Ça y est, décembre est lancé. Et avec les premières neiges on a envie de rester au chaud et de lire des bons articles qui parlent du Web, n’est ce pas ?

4 calendriers avec des perles à découvrir chaque jour de décembre :

  • 24ways remets ça pour la sixième année : des articles de haute qualité qu’on attends toute l’année. Ils contribuent à rendre l’hiver moins dur.
  • HTML5 Advent : des démos HTML5 pour en avoir plein les yeux.
  • Adfont Calendar : mateurs de typographie, sous chaque case se cache une police d’écriture proposée par FontDec.k
  • Performance Calendar : et oui, même les performances Web ont leur calendrier.

Typographie, HTML5 et performances : les sujets chaud du Web de cette année sont là pour se tenir au chaud cet hiver jusqu’à Noël.

Raccourcis clavier pour changer d’onglet dans TextMate

16 novembre 2010 , , ,

Logo TextMate

La mise à jour 1.5.10 de TextMate change les raccourcis pour aller à l’onglet précédent et suivant. À la place de ⌥⌘← et ⌥⌘→. Ils sont maintenant ⌘⇧⌥5 and ⌘⇧⌥° sur un clavier français.

La raison pour ce changement est que c’est la façon de changer d’onglet dans Safari. Je sais pas vous mais je préfère les raccourcis précédents et ceux de Firefox…

Changez les raccourcis en allant dans Préférences Système, Clavier, Raccourcis clavier, Raccourcis d’applications et ajoutez vos raccourcis. Choisissez l’application Textmate et entrez les titres de menu « Next File Tab » et « Previous File Tab ».

Et pour couronner le tout, désindenter un bloc de code avec ⌥⇧↦ ne fonctionne plus pour les claviers français à cause d’un bug. Pour le réparer avant d’attendre la prochaine mise à jour ajouter "~$\t" = "shiftLeft:"; dans /Applications/TextMate.app/Contents/Resources/KeyBindings.dict

Après cette mise à jour les développeurs de Textmate se sont « rendus compte que tout le monde n’utilisait pas un clavier US » et ont donc remis les raccourci précédents ainsi que réparé le second bug d’indentation. Sigh.

👨🏻‍🦰 Sunny Ripert

est un développeur web vivant à ParisContactArchives

Textes et contenus sous licence Creative Commons.