tag:linuxfr.org,2005:/tags/ruby/publicLinuxFr.org : les contenus étiquetés avec « ruby »2024-01-16T15:07:15+01:00/favicon.pngtag:linuxfr.org,2005:Bookmark/77922024-01-15T22:50:26+01:002024-01-15T22:50:26+01:00WAT de Gary Bernhardt- Des bizarreries de langages de programmation [2012]<a href="https://www.destroyallsoftware.com/talks/wat">https://www.destroyallsoftware.com/talks/wat</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/134511/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/cg/liens/wat-de-gary-bernhardt-des-bizarreries-de-langages-de-programmation-2012#comments">ouvrir dans le navigateur</a>
</p>
cghttps://linuxfr.org/nodes/134511/comments.atomtag:linuxfr.org,2005:Diary/406632023-04-17T14:49:01+02:002023-04-17T14:49:01+02:00rordleLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Bonjour,</p>
<p>Pour nous former à hotwire un nouveau framework front lié à Ruby on Rails, une partie de l'équipe de Squadracer a développé le lundi midi une petite application sur la base de wordle. La particularité est de faire deviner une méthode du framework RoR ou du language ruby.</p>
<p>Le premier mot de chaque jour est le même pour tout le monde, les autres sont aléatoires.</p>
<p>Le développement s'est fait en code ouvert via twitch (<a href="https://www.twitch.tv/squadracer">https://www.twitch.tv/squadracer</a>) où tout(e) les participant(e)s pouvaient contribuer mais aussi maintenant via sa licence MIT.</p>
<p>Le projet est disponible via les URLs <a href="https://rordle.app/">rordle.app</a> et <a href="https://github.com/squadracer/rordle">github.com/squadracer/rordle</a></p>
<p>Le code n'est pas parfait car il a été fait en temps très contraint donc n'hésitez pas à participer.</p>
<p>Bonne journée !</p>
<div><a href="https://linuxfr.org/users/simkim/journaux/rordle.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/130950/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/simkim/journaux/rordle#comments">ouvrir dans le navigateur</a>
</p>
Gauthier Monserandhttps://linuxfr.org/nodes/130950/comments.atomtag:linuxfr.org,2005:Diary/402062022-03-24T11:02:35+01:002022-03-24T11:02:35+01:00CPU Ex0187 RubyLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p><strong>Dans cette <em>release</em> dans la <a href="https://cpu.dascritch.net/serie/Langages%20machine">série <em>Langages machines</em></a></strong> : une pierre précieuse, orientée objet, le bonheur des devs et des rails.<br>
Notre invité est <a href="https://atnos.com/"><strong>Bruno Perles</strong>, CEO de Atnos, agence spécialisée Ruby</a></p>
<p><strong>Écoute, liens, textes, commentaires</strong> et inscription pour un atelier sur Toulouse : <a href="https://cpu.pm/0187">https://cpu.pm/0187</a></p>
<p><strong>Chapitres :</strong></p>
<ul>
<li><a href="https://cpu.dascritch.net/post/2022/03/24/Bonjour-%C3%A0-toi%2C-Enfant-du-Futur-Imm%C3%A9diat-%3A-Ruby-et-les-enfants-du-rail">Bonjour à toi, Enfant du Futur Immédiat : Ruby et les enfants du rail</a></li>
<li><a href="https://cpu.dascritch.net/post/2022/03/24/Standard-%3A-MVC-%28Mod%C3%A8le-Vue-Contr%C3%B4leur%29">Standard : MVC (Modèle Vue Contrôleur)</a></li>
<li><a href="https://cpu.dascritch.net/post/2022/03/24/Bruno-Perles%2C-CEO-de-Atnos%2C-agence-sp%C3%A9cialis%C3%A9e-Ruby">Interview</a></li>
</ul>
<p>Vous l'avez compris, M. Perles est d'accord pour animer un atelier de découverte du langage Ruby, ça sera sur Toulouse en soirée et sur inscription, <a href="https://cpu.dascritch.net/post/2022/03/24/Ex0187-Ruby#commentaires">laissez un commentaire avec votre e-mail sur la page web de l'émission</a>, on vous tiendra au courant.</p>
<p>Prochaine émission dans 15 jours, surement en mode <em>lost+found</em>, et en attendant, rediffusion <a href="https://cpu.pm/2">Ex0002 Du cellulo aux pixels</a></p>
<div><a href="https://linuxfr.org/users/dascritch/journaux/cpu-ex0187-ruby.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/127273/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/dascritch/journaux/cpu-ex0187-ruby#comments">ouvrir dans le navigateur</a>
</p>
Da Scritchhttps://linuxfr.org/nodes/127273/comments.atomtag:linuxfr.org,2005:Bookmark/42532022-02-06T22:14:25+01:002022-02-06T22:14:25+01:00Une étude révèle les langages les plus voraces en énergie<a href="https://programmation.developpez.com/actu/253829/Programmation-une-etude-revele-les-langages-les-plus-voraces-en-energie-Perl-Python-et-Ruby-en-tete-C-Rust-et-Cplusplus-les-langages-les-plus-verts/">https://programmation.developpez.com/actu/253829/Programmation-une-etude-revele-les-langages-les-plus-voraces-en-energie-Perl-Python-et-Ruby-en-tete-C-Rust-et-Cplusplus-les-langages-les-plus-verts/</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/126829/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/papey/liens/une-etude-revele-les-langages-les-plus-voraces-en-energie#comments">ouvrir dans le navigateur</a>
</p>
Papeyhttps://linuxfr.org/nodes/126829/comments.atomtag:linuxfr.org,2005:News/408132021-12-25T10:43:09+01:002021-12-25T10:44:03+01:00Sortie de Ruby on Rails 7.0Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<div><p>La version 7.0 du cadriciel Ruby on Rails a fait son apparition le 15 décembre 2021.</p>
<p>Pour rappel, Rails est un framework web complet développé en Ruby qui encourage la lisibilité du code, tout en privilégiant les conventions à la configuration.<br>
Il fait la part belle à l'architecture <a href="https://fr.wikipedia.org/wiki/Mod%C3%A8le-vue-contr%C3%B4leur">Modèle-Vue-Contrôleur (MVC)</a> et s’appuie sur un certain nombre de sous-ensembles :</p>
<ul>
<li>
<strong>Active Model</strong> qui permet de créer des objets Ruby suivant un <a href="https://fr.wikipedia.org/wiki/Mapping_objet-relationnel">mapping objet-relationnel (ORM)</a>
</li>
<li>
<strong>Action View</strong> qui est responsable de la génération des pages HTML</li>
<li>
<strong>Action Controller</strong> qui gère le cycle de vie des requêtes de l'application (cela inclut les sessions, les filtres, les cookies, le streaming de données et le traitement des exceptions)</li>
<li>
<strong>Action Pack</strong> qui traite les requêtes web tout en fournissant la couche de contrôle MVC</li>
<li>
<strong>Active Record</strong> qui permet aux modèles d'interagir avec la base de données de l'application</li>
<li>
<strong>Action Cable</strong> qui permet d'écrire des fonctionnalités temps réel grâce au protocole WebSocket</li>
<li>
<strong>Action Mailbox</strong> qui permet de recevoir des mails dans une application</li>
<li>
<strong>Action Mailer</strong> qui permet d'envoyer des mails depuis une application</li>
<li>
<strong>Action Text</strong> qui fournit tout qu'il faut pour gérer du contenu incluant du texte enrichi</li>
<li>
<strong>Active Job</strong> qui permet d'exécuter des travaux en arrière-plan selon différentes approches de mise en file d'attente</li>
<li>
<strong>Active Storage</strong> qui facilite le téléversement de fichiers vers un service de stockage dans les nuages, la transformation et l'extraction de métadonnées</li>
<li>
<strong>Active Support</strong> qui fournit un certain nombre d'extensions au langage Ruby</li>
</ul>
<p>Vous avez forcement croisé un site utilisant ce cadriciel : GitHub, Twitch, Airbnb, Kickstarter ou encore LinuxFr.org !</p>
</div><ul><li>lien nᵒ 1 : <a title="https://rubyonrails.org/" hreflang="en" href="https://linuxfr.org/redirect/109686">Site web</a></li><li>lien nᵒ 2 : <a title="https://guides.rubyonrails.org/" hreflang="en" href="https://linuxfr.org/redirect/109687">Guide</a></li><li>lien nᵒ 3 : <a title="https://d1snj8sshb5u7m.cloudfront.net/Rails7.mp4" hreflang="en" href="https://linuxfr.org/redirect/109688">Construire et déployer un blog en 34 minutes</a></li><li>lien nᵒ 4 : <a title="https://github.com/tjustino/rails7_demo" hreflang="en" href="https://linuxfr.org/redirect/109689">Code source de ce blog</a></li></ul><div><h2 id="toc-une-toute-nouvelle-approche-du-javascript">Une toute nouvelle approche du JavaScript</h2>
<p>Allant à l'encontre de la mode des <a href="https://fr.wikipedia.org/wiki/Application_web_monopage">applications web monopage</a> et du <em>tout <a href="https://fr.wikipedia.org/wiki/Node.js">Node.js</a></em>, cette version de Rails offre plusieurs possibilités :</p>
<ul>
<li>construire des applications dynamiques en minimisant l'utilisation du JavaScript et en favorisant le HTML au lieu du JSON. Cette approche est possible grâce à la nouvelle bibliothèque <a href="https://hotwired.dev/">Hotwire</a>
</li>
<li>l'import de modules JavaScript au travers des fichiers versionnés, directement à partir du navigateur grâce à <a href="https://github.com/WICG/import-maps">Import maps</a>
</li>
<li>il est maintenant possible d'utiliser n'importe quel bundler JavaScript, comme <a href="https://esbuild.github.io/">esbuild</a>, <a href="https://www.rollupjs.org">rollup.js</a> ou le plus classique <a href="https://webpack.js.org/">Webpack</a>, grâce à la nouvelle gem <a href="https://github.com/rails/jsbundling-rails">jsbundling-rails</a>
</li>
<li>suivant la même approche pour le CSS, la gem <a href="https://github.com/rails/cssbundling-rails">cssbundling-rails</a> permet dorénavant de compiler facilement sa feuille de style en intégrant <a href="https://tailwindcss.com/">Tailwind CSS</a>, <a href="https://sass-lang.com/dart-sass">Sass</a> ou encore <a href="https://postcss.org/">PostCSS</a>
</li>
</ul>
<h2 id="toc-attributs-chiffrés-avec-active-record">Attributs chiffrés avec Active Record</h2>
<p>Il est maintenant possible de déclarer des attributs pour chiffrer certaines données au niveau du modèle :</p>
<pre><code class="ruby"><span class="c1"># app/models/article.rb</span>
<span class="k">class</span> <span class="nc">Article</span> <span class="o"><</span> <span class="no">ApplicationRecord</span>
<span class="n">encrypts</span> <span class="ss">:title</span>
<span class="k">end</span>
<span class="c1"># Article.create! title: "Sortie de Ruby on Rails 7.0"</span>
<span class="c1"># INSERT INTO `articles` (`title`) VALUES ('{\"p\":\"n7J0/ol+a7DeaE[...]1/YjMHbHD4talgF9dt61A==\"}}')</span></code></pre>
<p>Le chiffrement se fait de manière transparente avant l'enregistrement en base de données.</p>
<h2 id="toc-chargement-asynchrone-des-requêtes">Chargement asynchrone des requêtes</h2>
<p>Lorsqu'une action du contrôleur doit exécuter plusieurs requêtes, il est maintenant possible de le faire simultanément grâce à <em>Relation#load_async</em>.<br>
Jusqu'à présent, exécuter trois requêtes durant 100 ms chacune nécessitait 300 ms. Maintenant, il est possible de le faire en parallèle.</p>
<h2 id="toc-zeitwerk-par-défaut">Zeitwerk par défaut</h2>
<p>Le chargement automatique dans Rails a toujours été synonyme d'élégance.<br>
L'ancienne approche, qui s'accompagnait d'une série de bizarreries et de fonctionnalités manquantes, a finalement été remplacée exclusivement par le <a href="https://github.com/fxn/zeitwerk#introduction">chargeur de code Zeitwerk</a>.</p>
<h2 id="toc-et-la-dette-technique-de-linuxfrorg-dans-tout-ça">Et la dette technique de LinuxFr.org dans tout ça ?</h2>
<p>On ne va pas se mentir : les montées de version majeure de Rails ne sont pas facile à appliquer si l'on souhaite utiliser les dernières fonctionnalités.<br>
Au moment où j'écris, <a href="https://github.com/linuxfrorg/linuxfr.org/blob/377636a1369226b77aec48bfea81179223f6dd77/Gemfile#L8">la version propulsant ces quelques lignes</a> recevra des <a href="https://guides.rubyonrails.org/maintenance_policy.html#severe-security-issues">correctifs de sécurité majeurs jusqu'au 1er juin 2022</a>.<br>
Vous l'aurez compris : il nous reste encore 6 mois pour procrastiner tranquillement !</p>
</div><div><a href="https://linuxfr.org/news/sortie-de-ruby-on-rails-7-0.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/126355/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/sortie-de-ruby-on-rails-7-0#comments">ouvrir dans le navigateur</a>
</p>
Thomas J.Benoît Sibaudpalm123https://linuxfr.org/nodes/126355/comments.atomtag:linuxfr.org,2005:News/406222021-08-30T10:12:43+02:002021-09-01T14:24:22+02:00Sortie de Ruby 3.0Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<div><p>Le 25 décembre 2020 le langage Ruby est passé en version 3.0 ! </p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f692e6962622e636f2f4e3964594b6d792f332e6a7067/3.jpg" alt="three" title="Source : https://i.ibb.co/N9dYKmy/3.jpg"></p>
<p><em>Image de <a href="https://unsplash.com/@jacktthunter">Jack Hunter</a>.</em></p>
<p>Cette version est le fruit de cinq ans de travail, le travail sur la branche 3.0 ayant commencé en 2015.</p>
<p>La suite de cette dépêche retrace les changements contenus dans cette nouvelle version.</p>
</div><ul><li>lien nᵒ 1 : <a title="https://www.ruby-lang.org/en/" hreflang="en" href="https://linuxfr.org/redirect/109024">Site officiel de Ruby</a></li><li>lien nᵒ 2 : <a title="https://www.ruby-lang.org/en/news/2020/12/25/ruby-3-0-0-released/" hreflang="en" href="https://linuxfr.org/redirect/109026">Annonce officielle de la sortie de Ruby 3</a></li><li>lien nᵒ 3 : <a title="https://www.ruby-lang.org/fr/downloads/" hreflang="fr" href="https://linuxfr.org/redirect/109027">Installer Ruby</a></li></ul><div><h2 class="sommaire">Sommaire</h2>
<ul class="toc">
<li><a href="#toc-versions">Versions</a></li>
<li><a href="#toc-liens-vers-danciennes-d%C3%A9p%C3%AAches-linuxfrorg">Liens vers d’anciennes dépêches LinuxFr.org</a></li>
<li><a href="#toc-performances">Performances</a></li>
<li><a href="#toc-d%C3%A9tails-de-fonctionnement-du-mjit">Détails de fonctionnement du MJIT</a></li>
<li><a href="#toc-ractor">Ractor</a></li>
<li><a href="#toc-fiberscoroutines">Fibers/coroutines</a></li>
<li>
<a href="#toc-notre-%C3%A9poque-sera-statique-ou-ne-sera-pas">Notre époque sera statique ou ne sera pas</a><ul>
<li><a href="#toc-rbs">RBS</a></li>
<li><a href="#toc-typeprof">TypeProf</a></li>
</ul>
</li>
<li><a href="#toc-autres-nouveaut%C3%A9s-de-ruby-300">Autres nouveautés de Ruby 3.0.0</a></li>
<li><a href="#toc-conclusion">Conclusion</a></li>
</ul>
<h2 id="toc-versions">Versions</h2>
<p>La date du 25 décembre n’est pas un hasard puisque cela fait plusieurs années que les versions mineures sortent le 25 décembre.</p>
<p>Petit rappel des sorties de Ruby :</p>
<ul>
<li>Ruby 1.0 est sorti le 25 décembre 1996</li>
<li>Ruby 2.0 le 24 février 2013</li>
<li>Ruby 2.1 le 25 décembre 2013</li>
<li>Ruby 2.2 le 25 décembre 2014</li>
<li>Ruby 2.5 le 25 décembre 2015</li>
<li>Ruby 2.4 le 25 décembre 2016</li>
<li>Ruby 2.5 le 25 décembre 2017</li>
<li>Ruby 2.6 le 25 décembre 2018</li>
<li>Ruby 2.7 le 25 décembre 2019</li>
</ul>
<p>La liste quasi complète des versions de Ruby peut se trouver <a href="https://www.ruby-lang.org/en/downloads/releases/">ici</a>.</p>
<h2 id="toc-liens-vers-danciennes-dépêches-linuxfrorg">Liens vers d’anciennes dépêches LinuxFr.org</h2>
<p>Quelques liens vers des dépêches LinuxFr.org autour de Ruby et son écosystème :</p>
<ul>
<li>
<a href="//linuxfr.org/news/ruby-2-0-est-sorti">Ruby 2.0 est sorti</a> (2013)</li>
<li>
<a href="//linuxfr.org/news/jruby-1-7-0">JRuby 1.7.0</a> (2012)</li>
<li>
<a href="//linuxfr.org/news/rubinius-10-est-sorti">Rubinius</a> (2010)</li>
</ul>
<h2 id="toc-performances">Performances</h2>
<p>Une des principales améliorations de Ruby 3.0.0 concerne les performances. En effet, Ruby peut parfois exécuter votre code jusqu’à trois fois plus vite.</p>
<p>Ci-dessous les résultats d’un benchmark tiré de l'<a href="https://www.ruby-lang.org/en/news/2020/12/25/ruby-3-0-0-released/">annonce officielle</a> :<br>
<img src="//img.linuxfr.org/img/68747470733a2f2f692e6962622e636f2f43355934536d502f727562793378332e706e67/ruby3x3.png" alt="Résultats benchmark performances" title="Source : https://i.ibb.co/C5Y4SmP/ruby3x3.png"></p>
<p>L’accélération provient principalement de l’utilisation du <a href="https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e">JIT</a> soit « Just-In-Time » compilation. </p>
<p>Rappel, pour celles et ceux qui ne connaissent pas ce procédé : un interpréteur produit généralement du « byte code » (sorte de code simplifié de plus haut niveau que l’assembleur mais en restant bas niveau, parfois au format binaire). Ce byte code est ensuite exécuté par une « machine virtuelle ». Dans certains cas la frontière entre interpréteur et machine virtuelle est très mince (Perl, Python avec CPython, Ruby avec CRuby < 1.9) ou plus marquée (Raku = Rakudo + MoarVM/JVM/JS, Ruby = Ruby + YARV, Erlang = Erlang + BEAM) même si cela ne change pas grand-chose d’un point de vue utilisateur (le code source semble exécuté par une seule et même entité).</p>
<p>Le processus de génération de bytecode peut se faire parfois ligne par ligne (interpréteur de Basic) mais peut également être précédé d’une étape de génération de format intermédiaire avec des optimisations (par exemple via un arbre de syntaxe abstraite). On nomme parfois cette étape une étape de « compilation » mais il ne s’agit pas de compilation dans le même sens du terme que pour JIT.</p>
<p>Le JIT consiste à « compiler » certaines portions de code en code natif. Ici pour Ruby on parle de MJIT pour « Method Based JIT » c’est-à-dire que les boucles « chaudes » ne seront pas candidates à la compilation mais que seules les fonctions sont concernées.</p>
<p>Les mesures de performances sont présentées avec « <a href="https://github.com/mame/optcarrot">optcarrot</a> » qui est un émulateur de console. C’est une bonne chose puisque c’est un cas d’usage réel (les calculs mathématiques répétitifs sont parfois utilisés pour les benchmarks de JIT, mais ils sont peu représentatifs car ils leur sont très favorables). D’un autre côté, les exécutions transactionnelles (typiquement des appels web à un site web en <a href="https://rubyonrails.org/">Ruby On Rails</a>) seront beaucoup moins sensibles aux améliorations du JIT.</p>
<p>Le JIT n’est pas une nouveauté de Ruby 3.0.0, il a en fait été <a href="https://www.bigbinary.com/blog/mjit-support-in-ruby-2-6">introduit dans Ruby 2.6</a>.</p>
<p>Autre bonne nouvelle, en Ruby 3.0, la taille du JIT généré a fortement été réduite !</p>
<h2 id="toc-détails-de-fonctionnement-du-mjit">Détails de fonctionnement du MJIT</h2>
<p>MJIT signifie que ce sont les fonctions qui sont candidates à la compilation. Il s’agit donc de remplacer des fonctions interprétées par des fonctions compilées sur la pile d’appel de fonctions.</p>
<p>Le MJIT de Ruby a une approche d’observation. Les méthodes ne sont pas compilées de manière trop optimiste (ce qui semble avoir été un reproche à la JVM par le passé, qui se traduisait par un ralentissement au démarrage) mais les appels de méthodes sont notés et après plusieurs appels, une fonction est mise en attente « pour compilation ». Les approches pessimistes gâchent des gains possibles, les approches optimistes pénalisent le démarrage quant aux approches « spéculatives », elles nécessitent un mécanisme de « dé-optimisation ». </p>
<p>Dans la pile d’attente on retrouve les fonctions à optimiser, attendant leur tour pour être compilées. L’exécution continue donc en parallèle et lorsque la fonction est compilée par ce processus externe, il peut remplacer la version interprétée sur la pile d’appel.</p>
<p>La compilation se fait en utilisant un compilateur disponible sur la plateforme. Tout simplement en générant un code source en C, puis en utilisant GCC pour compiler:<br>
<img src="//img.linuxfr.org/img/68747470733a2f2f692e6962622e636f2f58746b356e39432f6d6a697471756575652e706e67/mjitqueue.png" alt="MJIT queue compilation" title="Source : https://i.ibb.co/Xtk5n9C/mjitqueue.png"></p>
<p><em>Image tirée de <a href="https://k0kubun.medium.com/the-method-jit-compiler-for-ruby-2-6-388ee0989c13">The method JIT compiler for Ruby 2.6</a> par <a href="https://k0kubun.medium.com/">k0kubun</a>.</em></p>
<p>L’avantage de ce processus est sa simplicité et de pouvoir « s’acheter » facilement de la portabilité (JIT partout ou GCC est disponible) et également de bénéficier de l’optimisation de code des compilateurs.</p>
<p>Mais cela pose tout de même certains problèmes :</p>
<ul>
<li>accès en écriture nécessaire pour Ruby sur une portion du système hôte ;</li>
<li>nécessité de disposer des outils de développement sur la machine hôte (vous avez GCC sur vos machines de production ? Pas moi !)</li>
</ul>
<h2 id="toc-ractor">Ractor</h2>
<p>Ruby 3.0.0 introduit également les <a href="https://docs.ruby-lang.org/en/3.0.0/doc/ractor_md.html">Ractor</a>. Il s’agit d’un modèle de concurrence basé sur les messages.</p>
<p>Les ractors permettent de gérer plus facilement les exécutions concurrentes tout en aidant à l’isolation des données. Les ractors sont une <em>abstraction</em> de concurrence et ils se veulent thread safe (partagent moins que des threads) sans pour autant le garantir. Chaque ractor possède un ou plusieurs fils d’exécution.</p>
<p>Les Ractor sont expérimentaux et n’acceptent pas toute la syntaxe Ruby.</p>
<h2 id="toc-fiberscoroutines">Fibers/coroutines</h2>
<p>Ruby 3.0 introduit également de nouvelles méthodes pour la concurrence légère avec des nouvelles routines de contrôle.</p>
<h2 id="toc-notre-époque-sera-statique-ou-ne-sera-pas">Notre époque sera statique ou ne sera pas</h2>
<p>Depuis de nombreuses années, les langages interprétés à typage dynamique proposent des annotations pour donner les types de manière « statique ».</p>
<h3 id="toc-rbs">RBS</h3>
<p>Ruby 3.0 étend sa syntaxe grâce à RBS qui est une <em>gem</em> qui apporte une grammaire de définitions.<br>
RBS permet d’ajouter la syntaxe pour des types avancés comme les unions, la surcharge de méthodes, les génériques ou le <em>duck typing</em> avec interfaces.</p>
<p>Une définition RBS pourra ressembler à ceci :</p>
<pre><code class="ruby"><span class="c1"># Classes</span>
<span class="k">class</span> <span class="nc">User</span>
<span class="kp">attr_reader</span> <span class="nb">name</span> <span class="p">:</span> <span class="nb">String</span>
<span class="kp">attr_reader</span> <span class="n">age</span> <span class="p">:</span> <span class="nb">Integer</span>
<span class="k">def</span> <span class="nf">initialize</span> <span class="p">:</span> <span class="p">(</span><span class="nb">name</span><span class="p">:</span> <span class="nb">String</span><span class="p">,</span> <span class="ss">age</span><span class="p">:</span> <span class="nb">Integer</span><span class="p">)</span> <span class="o">-></span> <span class="o">[</span><span class="nb">String</span><span class="p">,</span> <span class="nb">Integer</span><span class="o">]</span>
<span class="k">end</span></code></pre>
<h3 id="toc-typeprof">TypeProf</h3>
<p>TypeProf est un analyseur de programme qui permet de générer (déduire) les annotations (la grammaire RBS vue précédemment) à partir d’un programme Ruby. <br>
TypeProf n’est pas encore compatible avec toute la syntaxe Ruby.</p>
<p>À terme, on pourra utiliser le source Ruby avec ses annotations pour faire tout ce qu’on fait habituellement avec de l’analyse statique de code.</p>
<h2 id="toc-autres-nouveautés-de-ruby-300">Autres nouveautés de Ruby 3.0.0</h2>
<p>L’assignement avec la flèche <code>=></code> par exemple <code>42 => linuxfr</code>.</p>
<p>Nouveau comportement de <code>in</code>: </p>
<ul>
<li>
<code>in</code> retourne à présent un booléen ;</li>
<li>pour trouver un pattern ;</li>
<li>
<code>case/in</code> perd son statut « expérimental ».</li>
</ul>
<p>Nouvelle syntaxe : des méthodes « sans fin » (sans mot clé <code>end</code>) comme par exemple</p>
<pre><code class="ruby"><span class="k">def</span> <span class="nf">square</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">=</span> <span class="n">x</span> <span class="o">*</span> <span class="n">x</span></code></pre>
<h2 id="toc-conclusion">Conclusion</h2>
<p>Ruby sort donc sa version majeure qui se concentre sur les performances, l’exécution concurrente et le typage statique.</p>
<p>Souhaitons bonne route à la branche 3 de Ruby tout en rappelant que <a href="//linuxfr.org/">le site</a> sur lequel vous lisez cette dépêche est lui-même écrit en… <a href="https://github.com/linuxfrorg/linuxfr.org">Ruby</a> !</p>
</div><div><a href="https://linuxfr.org/news/sortie-de-ruby-3-0.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/125191/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/sortie-de-ruby-3-0#comments">ouvrir dans le navigateur</a>
</p>
contra-shYsabeau 🧶 🧦Quidammikopalm123Benoît SibaudYves BourguignongUIhttps://linuxfr.org/nodes/125191/comments.atomtag:linuxfr.org,2005:Bookmark/28452021-03-24T09:46:45+01:002021-03-24T09:46:45+01:00Publication de la première version stable du langage de programmation Crystal<a href="https://crystal-lang.org/2021/03/22/crystal-1.0-what-to-expect.html">https://crystal-lang.org/2021/03/22/crystal-1.0-what-to-expect.html</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/123679/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/colargol/liens/publication-de-la-premiere-version-stable-du-langage-de-programmation-crystal#comments">ouvrir dans le navigateur</a>
</p>
Colargolhttps://linuxfr.org/nodes/123679/comments.atomtag:linuxfr.org,2005:Bookmark/24452020-12-25T09:09:01+01:002020-12-25T09:09:01+01:00« Ruby3 will be 3 times faster than Ruby2 »<a href="https://www.ruby-lang.org/en/news/2020/12/25/ruby-3-0-0-released/">https://www.ruby-lang.org/en/news/2020/12/25/ruby-3-0-0-released/</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/122728/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/pamputt/liens/ruby3-will-be-3-times-faster-than-ruby2#comments">ouvrir dans le navigateur</a>
</p>
pamputthttps://linuxfr.org/nodes/122728/comments.atomtag:linuxfr.org,2005:Post/410672020-04-27T10:48:59+02:002020-04-27T10:48:59+02:00Rails : Association multiple<p>Bonjour,</p>
<p>Dans le cadre de mon premier projet en rails, je dois gérer une relation multiple :</p>
<p>Les Products, Categories et Vendors peuvent avoir une ou plusieurs References.</p>
<pre><code> +---------+
| Product |
+---------+
| name |
| ... |
+---------+
|
|
+-------------+
| Reference |
+-------------+
| name |
| ... |_____+----------+
| product_id | | Category |
| category_id | +----------+
| vendor_id | | name |
+-------------+ | ... |
| +----------+
|
+--------+
| Vendor |
+--------+
| name |
| ... |
+--------+
</code></pre>
<p>Maintenant que les associations sont crées, je ne peux pas créer un objet reference sans qu'il ait obligatoirement un product_id ET un category_id ET un vendor_id</p>
<p>J'ai dû oublier quelque chose mais quoi ?</p>
<div><a href="https://linuxfr.org/forums/programmation-ruby/posts/rails-association-multiple.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/120201/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/programmation-ruby/posts/rails-association-multiple#comments">ouvrir dans le navigateur</a>
</p>
Adminrezohttps://linuxfr.org/nodes/120201/comments.atomtag:linuxfr.org,2005:Post/399712019-03-14T13:01:47+01:002019-03-14T13:01:47+01:00ADULLACT recrute...<p>L'ADULLACT, association nationale au service des collectivités et administrations, cherche un·e développeur·euse <strong>full stack Ruby</strong> pour travailler sur un logiciel libre développé par les services de l'État.</p>
<h3 id="toc-ladullact">L'Adullact</h3>
<p>L’<em>Association des Développeurs et Utilisateurs de Logiciels Libres pour les Administrations et les Collectivités Territoriales</em> (<strong>ADULLACT</strong>) a été fondée en 2002. L'association, unique en Europe, a pour objectif d’organiser le développement de logiciels libres sur fonds publics. Elle accompagne les collectivités dans la création de nouveaux logiciels libres, et la structuration de leur communauté. Les services de l'Adullact sont utilisés par plus de 5000 collectivités, soit 59 millions de citoyens.</p>
<h3 id="toc-votre-mission">Votre mission</h3>
<p>Afin de développer un nouveau service, nous cherchons un·e développeur·euse pour devenir la compétence et l'interlocuteur privilégié·e avec les services de l'État auteurs de ce logiciel. Il s'agira de contribuer à son développement et l'enrichir de nouvelles fonctionnalités.</p>
<p>En relation avec l'architecte logiciel libre, vous aurez la responsabilité des nouveaux développements, des tests, et du déploiement sur la plateforme de production.</p>
<p>Entourés de passionnés, d'auteurs et contributeurs de logiciels libres, vous serez au coeur du monde du libre. Le projet vous permettra d'avoir une réelle influence sur l'utilisation des logiciels libres en France.</p>
<h3 id="toc-votre-environnement-technique">Votre environnement technique</h3>
<ul>
<li> Ruby, RoR</li>
<li> Gitlab, déploiement continu, IntelliJ</li>
<li> OVH Public Cloud, outils "dégooglisons" de Framasoft, noGAFAM</li>
<li> Ubuntu, multi-écrans</li>
</ul>
<h3 id="toc-vos-compétences">Vos compétences</h3>
<ul>
<li> BAC+5 informatique</li>
<li> Expérience dans le développement d'application Ruby (2 ans minimum)</li>
<li> La connaissance de Puppet et Vagrant (IaC) constitue un sérieux plus</li>
<li> Savoir-être : transparence, travail collaboratif</li>
</ul>
<h3 id="toc-les-modalités">Les modalités</h3>
<ul>
<li> CDI 35h / semaine</li>
<li> Le poste est à pourvoir à Montpellier (centre ville)</li>
<li> Le télétravail est possible 1 jour par semaine</li>
<li> Salaire : 30-34 k€ brut annuel selon profil</li>
<li> Avantages : prime variable trimestrielle, prime d'intéressement, congés ancienneté, ticket restau, mutuelle, prévoyance</li>
</ul>
<h3 id="toc-nous-contacter">Nous contacter</h3>
<p>Merci d'envoyer vos CV et lettre de motivation au format PDF à <a href="mailto:job2019@adullact.org">job2019@adullact.org</a>. <br>
N'hésitez pas à ajouter les liens vers vos codes sources en ligne, vos profils Gitlab, Github, StackOverflow, Mastodon…</p>
<ul>
<li>L'annonce sur le site de l'ADULLACT - <a href="https://adullact.org/breves/68-actualite/vie-associative/848-adullact-recrute-developpeur-euse-full-stack-ruby-logiciel-libre">https://adullact.org/breves/68-actualite/vie-associative/848-adullact-recrute-developpeur-euse-full-stack-ruby-logiciel-libre</a>
</li>
</ul>
<div><a href="https://linuxfr.org/forums/general-petites-annonces/posts/adullact-recrute.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/116679/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/general-petites-annonces/posts/adullact-recrute#comments">ouvrir dans le navigateur</a>
</p>
Pascal Kuczynskihttps://linuxfr.org/nodes/116679/comments.atomtag:linuxfr.org,2005:Bookmark/3082018-10-27T07:35:57+02:002018-10-27T07:35:57+02:00écrire un remote plugin pour neovim en ruby<a href="http://yazgoo.github.io/blag/2018/10/27/writing-a-remote-plugin-for-neovim-in-ruby.html">http://yazgoo.github.io/blag/2018/10/27/writing-a-remote-plugin-for-neovim-in-ruby.html</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/115566/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/yazgoo/liens/ecrire-un-remote-plugin-pour-neovim-en-ruby#comments">ouvrir dans le navigateur</a>
</p>
yazgoohttps://linuxfr.org/nodes/115566/comments.atomtag:linuxfr.org,2005:News/387952018-09-14T10:22:41+02:002018-09-14T16:56:36+02:00ConFoo 2019 : la conférence pour les développeurs est à la recherche de conférenciersLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<div><p>ConFoo 2019 se déroulera du 13 au 15 mars à Montréal, à l’Hôtel Bonaventure.<br>
ConFoo est à la recherche de professionnels ayant une connaissance approfondie du développement avec PHP, Ruby, Java, DotNet, JavaScript, les bases de données, l’intelligence artificielle et plus, souhaitant partager leurs connaissances et expériences lors du prochain ConFoo. <a href="https://confoo.ca/fr/yul2019/call-for-papers">Soumettez vos propositions</a> avant le 24 septembre.</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f636f6e666f6f2e63612f696d616765732f64657369676e2f6c6f676f2e676966/logo.gif" alt="Logo ConFoo 2019" title="Source : https://confoo.ca/images/design/logo.gif"></p>
</div><ul><li>lien nᵒ 1 : <a title="https://confoo.ca/fr" hreflang="fr" href="https://linuxfr.org/redirect/102674">ConFoo : La conférence pour les développeurs</a></li><li>lien nᵒ 2 : <a title="https://confoo.ca/fr/yul2019/call-for-papers" hreflang="fr" href="https://linuxfr.org/redirect/102675">ConFoo : L’appel aux conférenciers</a></li></ul><div><p>Nous prenons grand soin de nos conférenciers en couvrant la majorité des dépenses incluant le déplacement, l’hébergement, le déjeuner, le billet complet de la conférence, etc.<br>
Les présentations sont d’une durée de 35 min + 10 min de questions et peuvent être tant en français qu’en anglais. ConFoo est un environnement ouvert où tout le monde est invité à soumettre. Vous êtes qualifié et amical ? Joignez‐vous à nous !</p>
<p>Si vous voulez simplement assister à la conférence, nous avons un <a href="https://confoo.ca/fr/yul2019/register">rabais de 320 US$</a> en vigueur jusqu’au 21 octobre.</p>
</div><div><a href="https://linuxfr.org/news/confoo-2019-la-conference-pour-les-developpeurs-est-a-la-recherche-de-conferenciers.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/115263/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/confoo-2019-la-conference-pour-les-developpeurs-est-a-la-recherche-de-conferenciers#comments">ouvrir dans le navigateur</a>
</p>
Yann LarriveePierre JarillonDavy Defaudpalm123https://linuxfr.org/nodes/115263/comments.atomtag:linuxfr.org,2005:Bookmark/2042018-07-19T14:01:25+02:002018-07-19T14:01:25+02:00RubyMonk - Interactive Ruby tutorials<a href="https://rubymonk.com/">https://rubymonk.com/</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/114941/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/amessihel/liens/rubymonk-interactive-ruby-tutorials#comments">ouvrir dans le navigateur</a>
</p>
HLhttps://linuxfr.org/nodes/114941/comments.atomtag:linuxfr.org,2005:Diary/374492017-08-18T19:19:46+02:002017-08-18T19:19:46+02:00kyrbeis: un outil basique de gestion de dotfilesLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Mon bien cher Nal,</p>
<p>Voulant synchroniser simplement des fichiers de configuration utilisateur, j'ai tout d'abord testé quelques-uns des outils énumérés <a href="https://wiki.archlinux.org/index.php/Dotfiles#Other_tools">ici</a>.</p>
<p>Je voulais un outil:</p>
<ul>
<li>simple d'utilisation</li>
<li>fondé sur les liens symboliques, comme <a href="https://github.com/jbernard/dotfiles">dotfiles</a>
</li>
</ul><p>Je voulais aussi utiliser git (et <a href="https://www.agwa.name/projects/git-crypt/">git-crypt</a> pour chiffrer les fichiers sensibles).<br>
Trouvant les outils testés trop compliqués (<a href="https://github.com/jbernard/dotfiles/issues/62">voir risqués</a>), j'ai décidé d'écrire une gem ruby de quelques lignes, <a href="https://github.com/yazgoo/kyrbeis/">kyrbeis</a> pour faire cela.</p>
<p>Je me suis dit que cela pourrait aussi éventuellement vous intéresser, voilà donc comment vous pourrez l'utiliser.</p>
<h2 id="installation">installation</h2>
<pre><code>$ gem install kyrbeis
</code></pre>
<h2 id="utilisation">utilisation</h2>
<p>Créez un répertoire <code>~/dotfiles</code>, dans lequel vos configurations seront stockées.<br>
Pour ajouter un nouveau fichier de configuration, par exemple <code>~/.vimrc</code>,<br>
créez <code>~/dotfiles/__vimrc</code> dans lequel vous écrirez votre configuration vim comme d'habitude.<br>
Puis, en prenant soin que <code>~/.vimrc</code> n'existe pas déjà (auquel cas kyrbeis ne fera rien) faites un:</p>
<pre><code>$ kyrbeis apply
</code></pre>
<p>ce qui est équivalent à faire un <code>ln -s ~/dotfiles/__vimrc ~/.vimrc</code>.</p>
<p>Kyrbeis supporte aussi les sous répertoires, comme <code>~/.config/</code>.<br>
Par exemple, pour ajouter un fichier <code>~/.config/git/ignore</code>, vous créerez <code>~/dotfiles/__config/git/ignore</code>.</p>
<h2 id="conclusion">Conclusion</h2>
<p>Évidemment, cet outil prend son sens combiné a git, (ainsi que git-crypt, et à un gestionnaire de mot de passe).</p>
<p>Et vous, cher Nal, quelle méthode utilisez-vous pour résoudre ce problème ?</p><div><a href="https://linuxfr.org/users/yazgoo/journaux/kyrbeis-un-outil-basique-de-gestion-de-dotfiles.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/112496/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/yazgoo/journaux/kyrbeis-un-outil-basique-de-gestion-de-dotfiles#comments">ouvrir dans le navigateur</a>
</p>
yazgoohttps://linuxfr.org/nodes/112496/comments.atomtag:linuxfr.org,2005:News/378712017-03-14T09:34:39+01:002017-03-15T09:07:26+01:00Appel à conférences PolyConf 17 à Paris (7 au 9 juillet) : « The Universe of Programming Languages »Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<div><p><a href="https://polyconf.com/"><em>PolyConf</em></a> est une conférence pour échanger sur les meilleures pratiques de la programmation. Les programmeurs sont trop souvent réduits à un langage de programmation alors qu’il est plus sage, dans un contexte d’innovation constante, d’apprendre à apprendre et de combiner le meilleur de chaque langage dans des solutions <em>ad hoc</em>. Autrement dit, le fait de ne pas se spécialiser en tant que développeur sur un langage spécifique, pour préférer une approche polyvalente. Concrètement, cela s’est reflété dans le programme de l’événement qui a traité de nombreux sujets : Ruby, Python, Haskell, Rust, Erlang, Go, Java, F#, JavaScript…</p>
<p><strong>NdM. :</strong> cette édition est intitulée « L’univers des langages de programmation. Ne voyez pas les frontières / limites, voyez les horizons » (<em>The Universe of Programming Languages. Never see boundaries, but only horizons</em>). Les trois précédentes éditions ont eu lieu à Poznan en Pologne. Les huit éditions précédentes (à l’époque l’événement se nommait « RuPy », <em>a priori</em> plus centré sur Ruby et Python) ont eu lieu à Budapest, Brno, au Brésil et en Pologne.</p>
<p><a href="https://eventil.com/events/polyconf-17/submissions/new">L’appel à conférences se termine le 19 mars</a>.</p></div><ul><li>lien nᵒ 1 : <a title="https://polyconf.com/" hreflang="en" href="https://linuxfr.org/redirect/99428">PolyConf</a></li></ul><div></div><div><a href="https://linuxfr.org/news/appel-a-conferences-polyconf-17-a-paris-7-au-9-juillet-the-universe-of-programming-languages.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/111436/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/appel-a-conferences-polyconf-17-a-paris-7-au-9-juillet-the-universe-of-programming-languages#comments">ouvrir dans le navigateur</a>
</p>
zaisteBenoît SibaudDavy DefaudNils Ratusznikhttps://linuxfr.org/nodes/111436/comments.atom