Imparare i fondamenti della gemma Nokogiri

Il mondo gira sempre più velocemente e questa accelerazione è evidente in tutti gli aspetti della nostra vita. Soprattutto quando si tratta di aziende, il premio sta nella velocità. In questa frenetica accelerazione, la volatilità è l’unica costante. Per stare al passo con il ritmo e stare al passo con una concorrenza sempre più agguerrita, le aziende sono alla ricerca di modi per aumentare l’efficienza e avere una maggiore velocità di immissione sul mercato. Questo spiega la frenesia dietro la popolarità di linguaggi di programmazione come Ruby on Rails. Ciò che rende Ruby on Rails ancora più sorprendente è l'enorme numero di gemme di cui è dotato. Immagina uno strumento e molto probabilmente lo hai nel tuo kit Ruby. Uno dei migliori gioielli per Ruby on Rails è Nokogiri che è una libreria per gestire documenti XML e HTML. L'uso più comune di un parser come Nokogiri è estrarre dati da documenti strutturati. Esempi:

  • Un elenco di prezzi da un sito Web di confronto dei prezzi.
  • Collegamenti ai risultati di ricerca da un motore di ricerca.
  • Un elenco di risposte da un sito di domande e risposte.

Installazione:

Sistema operativo X:

Per installare libxml2 da macports:

$ porta sudo installa libxml2 libxslt

Quindi per installare nokogiri:

$ sudo gem installa nokogiri

Linux:

Su Linux dobbiamo ancora installare libxml2. Il comando per installare libxml2 varierà in base al gestore pacchetti e alla distribuzione Linux che stiamo utilizzando.

Su Fedora:

$ sudo yum installa libxml2-devel libxslt-devel

La gemma $ installa nokogiri

Su Ubuntu:

$ sudo apt-get install libxml2 libxml2-dev libxslt libxslt-dev

La gemma $ installa nokogiri

Iniziare con Nokogiri:

Una volta installato Nokogiri possiamo iniziare a utilizzarlo. Nokogiri può utilizzare selettori XPath o CSS3. La capacità di utilizzare selettori CSS lo rende davvero ottimo per estrarre dati da documenti HTML.

richiedono "rubygems"

richiedono 'nokogiri'

richiedono 'open-uri'

Oltre a richiedere la gemma nokogiri avremmo bisogno di open-uri in modo che il contenuto di un URL possa essere facilmente trovato. Creiamo quindi un nuovo documento HTML Nokogiri e gli passiamo il contenuto della pagina dei risultati di ricerca. Con quel documento Nokogiri possiamo poi utilizzare at_css, passando il selettore CSS “title” per recuperare il contenuto del elemento. Il metodo at_css restituirà il primo elemento corrispondente e possiamo chiamare .text su quell'elemento per ottenere il suo contenuto testuale. Infine usiamo puts per stampare il testo.</html></p> <p><strong>Analisi di base:</strong></p> <p>Nokogiri ti consente di analizzare un documento HTML o XML utilizzando alcune strategie diverse:</p> <ul> <li>DOM</li> <li>SAX</li> <li>Lettore</li> <li>Tiro</li> </ul> <p>Ognuna di queste strategie presenta diversi vantaggi e svantaggi. L'interfaccia DOM è la più comune e generalmente considerata la più semplice da usare.</p> <p>Ogni prodotto che è l'ultimo articolo della riga ha una classe diversa:</p> <blockquote> <p><div class="”product" lastcol”><br><a href="/it/”/product/f05f/”/" class="”product_link”"><br><img<br>src="/images/dot_clear.gif"<br>title="Distruggi il sonno con questa potente dose di energia, in una bottiglia riutilizzabile per cartucce di fucile."<br>alt="Confezione da 3 colpi energetici Zombie Blast"<br>larghezza="125"<br>altezza = "125"<br>classe=”pigro”<br>data-original="http://a.tgcdn.net/images/products/thumb/largesquare/f05f_zombie_blast_energy_shots.jpg"<br>/><br><h4>Confezione da 3 colpi energetici Zombie Blast</h4><br></a><br><p>$9.99</p><br></div></p> </blockquote> <p>Ciò significa che per ottenere il nome dei prodotti, diremmo:</p> <p><strong>Inglese: </strong>Partendo dalla radice del documento: cerca in ogni div che ha un nome di classe contenente la parola "prodotto". All'interno troverai un collegamento. In quel collegamento trovi il testo h4.</p> <p><strong>XPath:</strong> //div[contiene(@class,'prodotto')]/a/h4</p> <p>L'operatore di uguaglianza XPath corrisponde solo a valori completi, in questo caso una stringa. XPath corrisponde solo a nomi di intere classi, quindi div[@class='product'] in XPath non funzionerebbe per ottenere l'ultima colonna come ci si potrebbe aspettare.</p> <p><strong>Riferimento:</strong></p> <p><a href="https://github.com/sparklemotion/nokogiri" target="_blank">https://github.com/sparklemotion/nokogiri</a><br></p> <p></p> </div> </div> </div> </div> </div> </section> <section class="elementor-section elementor-top-section elementor-element elementor-element-7fc30299 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="7fc30299" data-element_type="section" data-settings="{"background_background":"classic"}"> <div class="elementor-container elementor-column-gap-default"> <div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-51885040" data-id="51885040" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-6ea8ff86 elementor-widget elementor-widget-heading" data-id="6ea8ff86" data-element_type="widget" data-widget_type="heading.default"> <div class="elementor-widget-container"> <h2 class="elementor-heading-title elementor-size-default">Iscriviti per gli ultimi aggiornamenti</h2> </div> </div> <div class="elementor-element elementor-element-5ba6176f elementor-widget elementor-widget-shortcode" data-id="5ba6176f" data-element_type="widget" data-widget_type="shortcode.default"> <div class="elementor-widget-container"> <div class="elementor-shortcode"> <script type="text/javascript">window.addEventListener('DOMContentLoaded', function() { var gCaptchaSibWidget; var onloadSibCallbackInvisible = function () { var element = document.getElementsByClassName('sib-default-btn'); var countInvisible = 0; var indexArray = []; jQuery('.sib-default-btn').each(function (index, el) { if ((jQuery(el).attr('id') == "invisible")) { indexArray[countInvisible] = index; countInvisible++ } }); jQuery('.invi-recaptcha').each(function (index, el) { grecaptcha.render(element[indexArray[index]], { 'sitekey': jQuery(el).attr('data-sitekey'), 'callback': sibVerifyCallback, }); }); }; });</script> <script src="https://www.google.com/recaptcha/api.js?onload=onloadSibCallbackInvisible&render=explicit" async defer></script> <form id="sib_signup_form_1" method="post" class="sib_signup_form" action=""> <div class="sib_loader" style="display:none;"><img width="20" height="20" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2020%2020'%3E%3C/svg%3E" alt="caricatore" data-lazy-src="https://www.railscarma.com/wp-includes/images/spinner.gif"><noscript><img width="20" height="20" src="https://www.railscarma.com/wp-includes/images/spinner.gif" alt="caricatore"></noscript></div> <input type="hidden" name="sib_form_action" value="subscribe_form_submit"> <input type="hidden" name="sib_form_id" value="1"> <input type="hidden" name="sib_form_alert_notice" value="Please fill out this field"> <input type="hidden" name="sib_form_invalid_email_notice" value="Your email address is invalid"> <input type="hidden" name="sib_security" value="f8bf3e4ca8"> <div class="sib_signup_box_inside_1"> <div style="/*display:none*/" class="sib_msg_disp"> </div> <div id="sib_captcha_invisible" class="invi-recaptcha" data-sitekey="6LdikOAaAAAAAJ6SWrrKVQrtw7TQpQAEnv0HS0G3"></div> <p class="sib-email-area"> <label class="sib-email-area"></label> <input type="email" class="sib-email-area" name="email" required="required" placeholder="Indirizzo e-mail"> </p> <p class="sib-NAME-area"> <label class="sib-NAME-area"></label> <input type="text" class="sib-NAME-area" name="NAME" placeholder="Nome"> </p> <p> <input type="submit" id="invisible" class="sib-default-btn" value="sottoscrivi"> </p> </div> <input type="hidden" name="trp-form-language" value="it"/></form> <style> form#sib_signup_form_1 p.sib-alert-message { padding: 6px 12px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } form#sib_signup_form_1 p.sib-alert-message-error { background-color: #f2dede; border-color: #ebccd1; color: #a94442; } form#sib_signup_form_1 p.sib-alert-message-success { background-color: #dff0d8; border-color: #d6e9c6; color: #3c763d; } form#sib_signup_form_1 p.sib-alert-message-warning { background-color: #fcf8e3; border-color: #faebcc; color: #8a6d3b; } </style> </div> </div> </div> </div> </div> </div> </section> </div> <div class="related-post slider"> <div class="headline">Articoli correlati</div> <div class="post-list owl-carousel"> <div class="item"> <div class="thumb post_thumb"> <a title="Gemma Kaminari" href="https://www.railscarma.com/it/blog/articoli-tecnici/gemma-di-kaminari/?related_post_from=37277"> <picture decoding="async" class="attachment-full size-full wp-post-image"> <source type="image/webp" data-lazy-srcset="https://www.railscarma.com/wp-content/uploads/2023/04/kaminari-gem.jpg.webp 800w, https://www.railscarma.com/wp-content/uploads/2023/04/kaminari-gem-300x113.jpg.webp 300w, https://www.railscarma.com/wp-content/uploads/2023/04/kaminari-gem-768x288.jpg.webp 768w" sizes="(max-width: 800px) 100vw, 800px"/> <img decoding="async" width="800" height="300" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20800%20300'%3E%3C/svg%3E" alt="gemma di Kaminari" data-lazy-srcset="https://www.railscarma.com/wp-content/uploads/2023/04/kaminari-gem.jpg 800w, https://www.railscarma.com/wp-content/uploads/2023/04/kaminari-gem-300x113.jpg 300w, https://www.railscarma.com/wp-content/uploads/2023/04/kaminari-gem-768x288.jpg 768w" data-lazy-sizes="(max-width: 800px) 100vw, 800px" data-lazy-src="https://www.railscarma.com/wp-content/uploads/2023/04/kaminari-gem.jpg"/><noscript><img decoding="async" width="800" height="300" src="https://www.railscarma.com/wp-content/uploads/2023/04/kaminari-gem.jpg" alt="gemma di Kaminari" srcset="https://www.railscarma.com/wp-content/uploads/2023/04/kaminari-gem.jpg 800w, https://www.railscarma.com/wp-content/uploads/2023/04/kaminari-gem-300x113.jpg 300w, https://www.railscarma.com/wp-content/uploads/2023/04/kaminari-gem-768x288.jpg 768w" sizes="(max-width: 800px) 100vw, 800px"/></noscript> </picture> </a> </div> <a class="title post_title" title="Gemma Kaminari" href="https://www.railscarma.com/it/blog/articoli-tecnici/gemma-di-kaminari/?related_post_from=37277"> Gemma Kaminari </a> </div> <div class="item"> <div class="thumb post_thumb"> <a title="Data Scraping in Rails attraverso l'elaborazione di CSV" href="https://www.railscarma.com/it/blog/articoli-tecnici/raschiamento-dei-dati-nei-binari-mediante-lelaborazione-di-csv/?related_post_from=31591"> <picture decoding="async" class="attachment-full size-full wp-post-image"> <source type="image/webp" data-lazy-srcset="https://www.railscarma.com/wp-content/uploads/2020/09/DATA-SCRAPING-IN-RAILS-BY-PROCESSING-CSV.png.webp 800w, https://www.railscarma.com/wp-content/uploads/2020/09/DATA-SCRAPING-IN-RAILS-BY-PROCESSING-CSV-300x113.png.webp 300w, https://www.railscarma.com/wp-content/uploads/2020/09/DATA-SCRAPING-IN-RAILS-BY-PROCESSING-CSV-768x288.png.webp 768w" sizes="(max-width: 800px) 100vw, 800px"/> <img decoding="async" width="800" height="300" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20800%20300'%3E%3C/svg%3E" alt="" data-lazy-srcset="https://www.railscarma.com/wp-content/uploads/2020/09/DATA-SCRAPING-IN-RAILS-BY-PROCESSING-CSV.png 800w, https://www.railscarma.com/wp-content/uploads/2020/09/DATA-SCRAPING-IN-RAILS-BY-PROCESSING-CSV-300x113.png 300w, https://www.railscarma.com/wp-content/uploads/2020/09/DATA-SCRAPING-IN-RAILS-BY-PROCESSING-CSV-768x288.png 768w" data-lazy-sizes="(max-width: 800px) 100vw, 800px" data-lazy-src="https://www.railscarma.com/wp-content/uploads/2020/09/DATA-SCRAPING-IN-RAILS-BY-PROCESSING-CSV.png"/><noscript><img decoding="async" width="800" height="300" src="https://www.railscarma.com/wp-content/uploads/2020/09/DATA-SCRAPING-IN-RAILS-BY-PROCESSING-CSV.png" alt="" srcset="https://www.railscarma.com/wp-content/uploads/2020/09/DATA-SCRAPING-IN-RAILS-BY-PROCESSING-CSV.png 800w, https://www.railscarma.com/wp-content/uploads/2020/09/DATA-SCRAPING-IN-RAILS-BY-PROCESSING-CSV-300x113.png 300w, https://www.railscarma.com/wp-content/uploads/2020/09/DATA-SCRAPING-IN-RAILS-BY-PROCESSING-CSV-768x288.png 768w" sizes="(max-width: 800px) 100vw, 800px"/></noscript> </picture> </a> </div> <a class="title post_title" title="Data Scraping in Rails attraverso l'elaborazione di CSV" href="https://www.railscarma.com/it/blog/articoli-tecnici/raschiamento-dei-dati-nei-binari-mediante-lelaborazione-di-csv/?related_post_from=31591"> Scraping dei dati nelle rotaie mediante elaborazione CSV </a> </div> <div class="item"> <div class="thumb post_thumb"> <a title="Come ripristinare un commit da GitHub" href="https://www.railscarma.com/it/blog/articoli-tecnici/come-ripristinare-il-commit-da-github/?related_post_from=31361"> <picture decoding="async" class="attachment-full size-full wp-post-image"> <source type="image/webp" data-lazy-srcset="https://www.railscarma.com/wp-content/uploads/2020/07/HOW-TO-REVERT-COMMIT-FROM-GITHUB-1.png.webp 800w, https://www.railscarma.com/wp-content/uploads/2020/07/HOW-TO-REVERT-COMMIT-FROM-GITHUB-1-300x113.png.webp 300w, https://www.railscarma.com/wp-content/uploads/2020/07/HOW-TO-REVERT-COMMIT-FROM-GITHUB-1-768x288.png.webp 768w" sizes="(max-width: 800px) 100vw, 800px"/> <img decoding="async" width="800" height="300" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20800%20300'%3E%3C/svg%3E" alt="" data-lazy-srcset="https://www.railscarma.com/wp-content/uploads/2020/07/HOW-TO-REVERT-COMMIT-FROM-GITHUB-1.png 800w, https://www.railscarma.com/wp-content/uploads/2020/07/HOW-TO-REVERT-COMMIT-FROM-GITHUB-1-300x113.png 300w, https://www.railscarma.com/wp-content/uploads/2020/07/HOW-TO-REVERT-COMMIT-FROM-GITHUB-1-768x288.png 768w" data-lazy-sizes="(max-width: 800px) 100vw, 800px" data-lazy-src="https://www.railscarma.com/wp-content/uploads/2020/07/HOW-TO-REVERT-COMMIT-FROM-GITHUB-1.png"/><noscript><img decoding="async" width="800" height="300" src="https://www.railscarma.com/wp-content/uploads/2020/07/HOW-TO-REVERT-COMMIT-FROM-GITHUB-1.png" alt="" srcset="https://www.railscarma.com/wp-content/uploads/2020/07/HOW-TO-REVERT-COMMIT-FROM-GITHUB-1.png 800w, https://www.railscarma.com/wp-content/uploads/2020/07/HOW-TO-REVERT-COMMIT-FROM-GITHUB-1-300x113.png 300w, https://www.railscarma.com/wp-content/uploads/2020/07/HOW-TO-REVERT-COMMIT-FROM-GITHUB-1-768x288.png 768w" sizes="(max-width: 800px) 100vw, 800px"/></noscript> </picture> </a> </div> <a class="title post_title" title="Come ripristinare un commit da GitHub" href="https://www.railscarma.com/it/blog/articoli-tecnici/come-ripristinare-il-commit-da-github/?related_post_from=31361"> Come ripristinare il commit da GitHub </a> </div> <div class="item"> <div class="thumb post_thumb"> <a title="Fare chiamate vocali attraverso applicazioni web Ruby on Rails" href="https://www.railscarma.com/it/blog/articoli-tecnici/effettuare-chiamate-vocali-tramite-le-applicazioni-web-ruby-on-rails/?related_post_from=31309"> <picture decoding="async" class="attachment-full size-full wp-post-image"> <source type="image/webp" data-lazy-srcset="https://www.railscarma.com/wp-content/uploads/2020/07/MAKE-VOICE-CALLS-THROUGH-RUBY-ON-RAILS-WEB-APPLICATIONS.png.webp 800w, https://www.railscarma.com/wp-content/uploads/2020/07/MAKE-VOICE-CALLS-THROUGH-RUBY-ON-RAILS-WEB-APPLICATIONS-300x113.png.webp 300w, https://www.railscarma.com/wp-content/uploads/2020/07/MAKE-VOICE-CALLS-THROUGH-RUBY-ON-RAILS-WEB-APPLICATIONS-768x288.png.webp 768w" sizes="(max-width: 800px) 100vw, 800px"/> <img decoding="async" width="800" height="300" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20800%20300'%3E%3C/svg%3E" alt="" data-lazy-srcset="https://www.railscarma.com/wp-content/uploads/2020/07/MAKE-VOICE-CALLS-THROUGH-RUBY-ON-RAILS-WEB-APPLICATIONS.png 800w, https://www.railscarma.com/wp-content/uploads/2020/07/MAKE-VOICE-CALLS-THROUGH-RUBY-ON-RAILS-WEB-APPLICATIONS-300x113.png 300w, https://www.railscarma.com/wp-content/uploads/2020/07/MAKE-VOICE-CALLS-THROUGH-RUBY-ON-RAILS-WEB-APPLICATIONS-768x288.png 768w" data-lazy-sizes="(max-width: 800px) 100vw, 800px" data-lazy-src="https://www.railscarma.com/wp-content/uploads/2020/07/MAKE-VOICE-CALLS-THROUGH-RUBY-ON-RAILS-WEB-APPLICATIONS.png"/><noscript><img decoding="async" width="800" height="300" src="https://www.railscarma.com/wp-content/uploads/2020/07/MAKE-VOICE-CALLS-THROUGH-RUBY-ON-RAILS-WEB-APPLICATIONS.png" alt="" srcset="https://www.railscarma.com/wp-content/uploads/2020/07/MAKE-VOICE-CALLS-THROUGH-RUBY-ON-RAILS-WEB-APPLICATIONS.png 800w, https://www.railscarma.com/wp-content/uploads/2020/07/MAKE-VOICE-CALLS-THROUGH-RUBY-ON-RAILS-WEB-APPLICATIONS-300x113.png 300w, https://www.railscarma.com/wp-content/uploads/2020/07/MAKE-VOICE-CALLS-THROUGH-RUBY-ON-RAILS-WEB-APPLICATIONS-768x288.png 768w" sizes="(max-width: 800px) 100vw, 800px"/></noscript> </picture> </a> </div> <a class="title post_title" title="Fare chiamate vocali attraverso applicazioni web Ruby on Rails" href="https://www.railscarma.com/it/blog/articoli-tecnici/effettuare-chiamate-vocali-tramite-le-applicazioni-web-ruby-on-rails/?related_post_from=31309"> Effettua chiamate vocali tramite le applicazioni Web Ruby on Rails </a> </div> </div> <script> </script> <style> .related-post {} .related-post .post-list { text-align: left; } .related-post .post-list .item { margin: 10px; padding: 10px; } .related-post .headline { font-size: 14px !important; color: #999999 !important; } .related-post .post-list .item .post_thumb { max-height: 220px; margin: 10px 0px; padding: 0px; display: block; } .related-post .post-list .item .post_title { font-size: 14px; color: #000000; margin: 10px 0px; padding: 0px; display: block; text-decoration: none; } .related-post .post-list .item .post_excerpt { font-size: 12px; color: #3f3f3f; margin: 10px 0px; padding: 0px; display: block; text-decoration: none; } .related-post .owl-dots .owl-dot { } </style> <script>window.addEventListener('DOMContentLoaded', function() { jQuery(document).ready(function($) { $(".related-post .post-list").owlCarousel({ items: 2, responsiveClass: true, responsive: { 0: { items: 1, }, 768: { items: 2, }, 1200: { items: 2, } }, rewind: true, loop: true, center: false, autoplay: true, autoplayHoverPause: true, nav: true, navSpeed: 1000, navText: ['<i class="fas fa-chevron-left"></i>', '<i class="fas fa-chevron-right"></i>'], dots: false, dotsSpeed: 1200, rtl: false, }); }); });</script> </div> <h3 class="awpa-title">Informazioni sull'autore del post</h3> <div class="wp-post-author-wrap wp-post-author-shortcode left"> <div class="awpa-tab-content active" id="1_awpa-tab1"> <div class="wp-post-author"> <div class="awpa-img awpa-author-block square"> <a href="https://www.railscarma.com/it/author/sales_jaqlr8na/"><img alt='' src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20150%20150'%3E%3C/svg%3E" data-lazy-srcset='https://secure.gravatar.com/avatar/308867ca6c81f3aba146080c601000087180326f752c4116849ea9f514c6a4fa?s=300&d=mm&r=g 2x' class='avatar avatar-150 photo' height='150' width='150' data-lazy-src="https://secure.gravatar.com/avatar/308867ca6c81f3aba146080c601000087180326f752c4116849ea9f514c6a4fa?s=150&d=mm&r=g" /><noscript><img alt='' src='https://secure.gravatar.com/avatar/308867ca6c81f3aba146080c601000087180326f752c4116849ea9f514c6a4fa?s=150&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/308867ca6c81f3aba146080c601000087180326f752c4116849ea9f514c6a4fa?s=300&d=mm&r=g 2x' class='avatar avatar-150 photo' height='150' width='150' /></noscript></a> </div> <div class="wp-post-author-meta awpa-author-block"> <h4 class="awpa-display-name"> <a href="https://www.railscarma.com/it/author/sales_jaqlr8na/">amministratore</a> </h4> <div class="wp-post-author-meta-bio"> </div> <div class="wp-post-author-meta-more-posts"> <p class="awpa-more-posts square"> <a href="https://www.railscarma.com/it/author/sales_jaqlr8na/" class="awpa-more-posts" data-no-translation="" data-trp-gettext="">Vedi i post dell'autore</a> </p> </div> <ul class="awpa-contact-info round"> <li class="awpa-website-li"> <a href="https://www.railscarma.com/it/assumere-ruby-on-rails-sviluppatore/" class="awpa-website awpa-icon-website"></a> </li> </ul> </div> </div> </div> </div> </div><!-- .entry-content .clear --> </div> </article><!-- #post-## --> <nav class="navigation post-navigation" aria-label="Articoli" data-no-translation-aria-label=""> <h2 class="screen-reader-text" data-no-translation="" data-trp-gettext="">Navigazione articoli</h2> <div class="nav-links"><div class="nav-previous"><a href="https://www.railscarma.com/it/blog/articoli-tecnici/impaginazione-in-rotaie-con-la-gemma-will_paginate/" rel="prev"><span class="ast-left-arrow">←</span> Precedente Articolo</a></div><div class="nav-next"><a href="https://www.railscarma.com/it/blog/articoli-tecnici/protect-your-web-application-with-google-recaptcha-on-ruby-on-rails/" rel="next">Successivo Articolo <span class="ast-right-arrow">→</span></a></div></div> </nav> <div id="comments" class="comments-area"> <div id="respond" class="comment-respond"> <h3 id="reply-title" class="comment-reply-title">Lascia un commento <small><a rel="nofollow" id="cancel-comment-reply-link" href="/it/blog/technical-articles/learning-the-fundamentals-of-nokogiri-gem/#respond" style="display:none;" data-no-translation="" data-trp-gettext="">Cancella risposta</a></small></h3><form action="https://www.railscarma.com/wp-comments-post.php" method="post" id="ast-commentform" class="comment-form" data-trp-original-action="https://www.railscarma.com/wp-comments-post.php"><p class="comment-notes"><span id="email-notes" data-no-translation="" data-trp-gettext="">Il tuo indirizzo email non sarà pubblicato.</span> <span class="required-field-message" data-no-translation="" data-trp-gettext="">I campi obbligatori sono contrassegnati <span class="required">*</span></span></p><div class="ast-row comment-textarea"><fieldset class="comment-form-comment"><div class="comment-form-textarea ast-col-lg-12"><label for="comment" class="screen-reader-text" data-no-translation="" data-trp-gettext="">Digitare qui..</label><textarea id="comment" name="comment" placeholder="Digitare qui.." cols="45" rows="8" aria-required="true" data-no-translation-placeholder=""></textarea></div></fieldset></div><div class="ast-comment-formwrap ast-row"><p class="comment-form-author ast-col-xs-12 ast-col-sm-12 ast-col-md-4 ast-col-lg-4"><label for="author" class="screen-reader-text" data-no-translation="" data-trp-gettext="">Nome*</label><input id="author" name="author" type="text" value="" placeholder="Nome*" size="30" aria-required='true' data-no-translation-placeholder="" /></p> <p class="comment-form-email ast-col-xs-12 ast-col-sm-12 ast-col-md-4 ast-col-lg-4"><label for="email" class="screen-reader-text" data-no-translation="" data-trp-gettext="">E-mail*</label><input id="email" name="email" type="text" value="" placeholder="E-mail*" size="30" aria-required='true' data-no-translation-placeholder="" /></p> <p class="comment-form-url ast-col-xs-12 ast-col-sm-12 ast-col-md-4 ast-col-lg-4"><label for="url"><label for="url" class="screen-reader-text" data-no-translation="" data-trp-gettext="">Sito web</label><input id="url" name="url" type="text" value="" placeholder="Sito web" size="30" data-no-translation-placeholder="" /></label></p></div> <p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes" /> <label for="wp-comment-cookies-consent" data-no-translation="" data-trp-gettext="">Salva il mio nome, email e sito web in questo browser per la prossima volta che commento.</label></p> <script>document.addEventListener("DOMContentLoaded", function() { setTimeout(function(){ var e=document.getElementById("cf-turnstile-c-204745492"); e&&!e.innerHTML.trim()&&(turnstile.remove("#cf-turnstile-c-204745492"), turnstile.render("#cf-turnstile-c-204745492", {sitekey:"0x4AAAAAAA8O8LOU5wYs5L-c"})); }, 100); });</script> <p class="form-submit"><span id="cf-turnstile-c-204745492" class="cf-turnstile cf-turnstile-comments" data-action="wordpress-comment" data-callback="" data-sitekey="0x4AAAAAAA8O8LOU5wYs5L-c" data-theme="light" data-language="auto" data-appearance="always" data-size="normal" data-retry="auto" data-retry-interval="1000"></span><br class="cf-turnstile-br cf-turnstile-br-comments"><input name="submit" type="submit" id="submit" class="submit" value="Posta un commento "" data-no-translation-value="" /><script type="text/javascript">document.addEventListener("DOMContentLoaded", function() { document.body.addEventListener("click", function(event) { if (event.target.matches(".comment-reply-link, #cancel-comment-reply-link")) { turnstile.reset(".comment-form .cf-turnstile"); } }); });</script> <input type='hidden' name='comment_post_ID' value='7611' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /> </p><input type="hidden" name="trp-form-language" value="it"/></form> </div><!-- #respond --> </div><!-- #comments --> </main><!-- #main --> </div><!-- #primary --> <div class="widget-area secondary" id="secondary" role="complementary" itemtype="https://schema.org/WPSideBar" itemscope="itemscope"> <div class="sidebar-main" > <aside id="sib_subscribe_form-2" class="widget widget_sib_subscribe_form"><h2 class="widget-title">Iscriviti per ricevere aggiornamenti</h2> <script type="text/javascript">window.addEventListener('DOMContentLoaded', function() { var gCaptchaSibWidget; var onloadSibCallbackInvisible = function () { var element = document.getElementsByClassName('sib-default-btn'); var countInvisible = 0; var indexArray = []; jQuery('.sib-default-btn').each(function (index, el) { if ((jQuery(el).attr('id') == "invisible")) { indexArray[countInvisible] = index; countInvisible++ } }); jQuery('.invi-recaptcha').each(function (index, el) { grecaptcha.render(element[indexArray[index]], { 'sitekey': jQuery(el).attr('data-sitekey'), 'callback': sibVerifyCallback, }); }); }; });</script> <script src="https://www.google.com/recaptcha/api.js?onload=onloadSibCallbackInvisible&render=explicit" async defer></script> <form id="sib_signup_form_1" method="post" class="sib_signup_form" action=""> <div class="sib_loader" style="display:none;"><img width="20" height="20" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2020%2020'%3E%3C/svg%3E" alt="caricatore" data-lazy-src="https://www.railscarma.com/wp-includes/images/spinner.gif"><noscript><img width="20" height="20" src="https://www.railscarma.com/wp-includes/images/spinner.gif" alt="caricatore"></noscript></div> <input type="hidden" name="sib_form_action" value="subscribe_form_submit"> <input type="hidden" name="sib_form_id" value="1"> <input type="hidden" name="sib_form_alert_notice" value="Please fill out this field"> <input type="hidden" name="sib_form_invalid_email_notice" value="Your email address is invalid"> <input type="hidden" name="sib_security" value="f8bf3e4ca8"> <div class="sib_signup_box_inside_1"> <div style="/*display:none*/" class="sib_msg_disp"> </div> <div id="sib_captcha_invisible" class="invi-recaptcha" data-sitekey="6LdikOAaAAAAAJ6SWrrKVQrtw7TQpQAEnv0HS0G3"></div> <p class="sib-email-area"> <label class="sib-email-area"></label> <input type="email" class="sib-email-area" name="email" required="required" placeholder="Indirizzo e-mail"> </p> <p class="sib-NAME-area"> <label class="sib-NAME-area"></label> <input type="text" class="sib-NAME-area" name="NAME" placeholder="Nome"> </p> <p> <input type="submit" id="invisible" class="sib-default-btn" value="sottoscrivi"> </p> </div> <input type="hidden" name="trp-form-language" value="it"/></form> <style> form#sib_signup_form_1 p.sib-alert-message { padding: 6px 12px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } form#sib_signup_form_1 p.sib-alert-message-error { background-color: #f2dede; border-color: #ebccd1; color: #a94442; } form#sib_signup_form_1 p.sib-alert-message-success { background-color: #dff0d8; border-color: #d6e9c6; color: #3c763d; } form#sib_signup_form_1 p.sib-alert-message-warning { background-color: #fcf8e3; border-color: #faebcc; color: #8a6d3b; } </style> </aside> <aside id="recent-posts-2" class="widget widget_recent_entries"> <h2 class="widget-title" data-no-translation="" data-trp-gettext="">Articoli recenti</h2><nav aria-label="Articoli recenti" data-no-translation-aria-label=""> <ul> <li> <a href="https://www.railscarma.com/it/blog/rails-joins-a-complete-guide-to-active-record-query-interface/">Giunzioni in Rails: Guida completa all'interfaccia di interrogazione dei record attivi</a> </li> <li> <a href="https://www.railscarma.com/it/blog/mastering-ruby-multiline-strings-a-comprehensive-guide/">Padroneggiare le stringhe multilinea in Ruby: Una guida completa</a> </li> <li> <a href="https://www.railscarma.com/it/blog/why-ruby-on-rails-is-suitable-for-cloud-native-development/">Perché Ruby on Rails è adatto allo sviluppo cloud-nativo</a> </li> </ul> </nav></aside><aside id="categories-2" class="widget widget_categories"><h2 class="widget-title" data-no-translation="" data-trp-gettext="">Categorie</h2><nav aria-label="Categorie" data-no-translation-aria-label=""> <ul> <li class="cat-item cat-item-385"><a href="https://www.railscarma.com/it/categoria/blog/gestione/">Articoli sulla gestione</a> </li> <li class="cat-item cat-item-1224"><a href="https://www.railscarma.com/it/categoria/blog/">Blog</a> </li> <li class="cat-item cat-item-596"><a href="https://www.railscarma.com/it/categoria/blog/applicazione-ibrida/">applicazione ibrida</a> </li> <li class="cat-item cat-item-517"><a href="https://www.railscarma.com/it/categoria/blog/approfondimenti-sul-settore/">Approfondimenti sul settore</a> </li> <li class="cat-item cat-item-697"><a href="https://www.railscarma.com/it/categoria/lavori/">lavori</a> </li> <li class="cat-item cat-item-598"><a href="https://www.railscarma.com/it/categoria/blog/applicazione-mobile/">Applicazione mobile</a> </li> <li class="cat-item cat-item-600"><a href="https://www.railscarma.com/it/categoria/blog/sviluppo-di-applicazioni-mobili/">sviluppo di applicazioni mobili</a> </li> <li class="cat-item cat-item-601"><a href="https://www.railscarma.com/it/categoria/blog/marketing-mobile/">marketing mobile</a> </li> <li class="cat-item cat-item-602"><a href="https://www.railscarma.com/it/categoria/blog/applicazione-nativa/">applicazione nativa</a> </li> <li class="cat-item cat-item-414"><a href="https://www.railscarma.com/it/categoria/blog/notizie/">Notizia</a> </li> <li class="cat-item cat-item-455"><a href="https://www.railscarma.com/it/categoria/blog/binari-3/">Rotaie 3</a> </li> <li class="cat-item cat-item-690"><a href="https://www.railscarma.com/it/categoria/blog/roro/">ROR</a> </li> <li class="cat-item cat-item-384"><a href="https://www.railscarma.com/it/categoria/blog/articoli-tecnici/">Articoli tecnici</a> </li> <li class="cat-item cat-item-1"><a href="https://www.railscarma.com/it/categoria/blog/uncategorized/">Non categorizzato</a> </li> <li class="cat-item cat-item-606"><a href="https://www.railscarma.com/it/categoria/blog/web-app-railscarma/">applicazione web</a> </li> </ul> </nav></aside><aside id="media_image-2" class="widget widget_media_image"><h2 class="widget-title">Chi siamo</h2><img width="200" height="46" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20200%2046'%3E%3C/svg%3E" class="image wp-image-16 attachment-full size-full" alt="RailsCarma - Società di sviluppo Ruby on Rails specializzata nello sviluppo offshore" style="max-width: 100%; height: auto;" decoding="async" data-lazy-src="https://www.railscarma.com/wp-content/uploads/2020/08/railscarma_logo.png" /><noscript><img width="200" height="46" src="https://www.railscarma.com/wp-content/uploads/2020/08/railscarma_logo.png" class="image wp-image-16 attachment-full size-full" alt="RailsCarma - Società di sviluppo Ruby on Rails specializzata nello sviluppo offshore" style="max-width: 100%; height: auto;" decoding="async" /></noscript></aside><aside id="text-8" class="widget widget_text"> <div class="textwidget"><p>RailsCarma, una delle aziende tecnologiche in più rapida crescita, è specializzata nella creazione di soluzioni per imprenditori, grandi organizzazioni, agenzie e start-up.</p> <p><a href="https://www.railscarma.com/it/">Per saperne di più</a></p> </div> </aside> </div><!-- .sidebar-main --> </div><!-- #secondary --> </div> <!-- ast-container --> </div><!-- #content --> <footer class="site-footer" id="colophon" itemtype="https://schema.org/WPFooter" itemscope="itemscope" itemid="#colophon" > <div class="footer-adv footer-adv-layout-4"> <div class="footer-adv-overlay"> <div class="ast-container"> <div class="ast-row"> <div class="ast-col-lg-3 ast-col-md-3 ast-col-sm-12 ast-col-xs-12 footer-adv-widget footer-adv-widget-1" > <div id="text-3" class="widget widget_text"><h2 class="widget-title">Navigazione rapida</h2> <div class="textwidget"><p style="margin-bottom: .2em;"><a href="/it/chi-siamo/">Chi siamo</a></p> <p style="margin-bottom: .2em;"><a href="/it/why-us/">Perché noi</a></p> <p style="margin-bottom: .2em;"><a href="/it/our-team/">La nostra squadra</a></p> <p style="margin-bottom: .2em;"><a href="/it/careers/">Carriere</a></p> <p style="margin-bottom: .2em;"><a href="/it/our-development-workflow/">Flusso di lavoro di sviluppo</a></p> <p style="margin-bottom: .2em;"><a href="/it/technology-stack/">Pila tecnologica</a></p> <p style="margin-bottom: .2em;"><a href="/it/agile-rails-methodology/">Metodologia di sviluppo agile</a></p> <p style="margin-bottom: .2em;"><a href="https://www.railscarma.com/it/portafoglio/">Portafoglio</a></p> <p style="margin-bottom: .2em;"><a href="/it/casestudies/">Casi studio</a></p> <p style="margin-bottom: .2em;"><a href="/it/blog/">Blog</a></p> </div> </div> </div> <div class="ast-col-lg-3 ast-col-md-3 ast-col-sm-12 ast-col-xs-12 footer-adv-widget footer-adv-widget-2" > <div id="text-4" class="widget widget_text"><h2 class="widget-title">I nostri servizi</h2> <div class="textwidget"><p style="margin-bottom: .2em;"><a href="/it/ruby-on-rails-consulting/">Consulenza Ruby On Rails</a></p> <p style="margin-bottom: .2em;"><a href="/it/sviluppo-di-applicazioni-mobili/">Sviluppo di app mobili</a></p> <p style="margin-bottom: .2em;"><a href="/it/assumere-ruby-on-rails-sviluppatore/">Assumi uno sviluppatore Ruby on Rails</a></p> <p style="margin-bottom: .2em;"><a href="/it/product-development-services/">Servizi di sviluppo prodotto</a></p> <p style="margin-bottom: .2em;"><a href="/it/sviluppo-commerciale-spree/">Sviluppo del commercio sfrenato</a></p> <p style="margin-bottom: .2em;"><a href="/it/saas-application-development/">Sviluppo di applicazioni SaaS</a></p> <p style="margin-bottom: .2em;"><a href="/it/sviluppo-di-applicazioni-per-binari-personalizzati/">Sviluppo di applicazioni ROR</a></p> <p style="margin-bottom: .2em;"><a href="https://www.railscarma.com/it/mvp-development/">Sviluppo MVP</a></p> </div> </div> </div> <div class="ast-col-lg-3 ast-col-md-3 ast-col-sm-12 ast-col-xs-12 footer-adv-widget footer-adv-widget-3" > <div id="text-9" class="widget widget_text"> <div class="textwidget"><h2 style="margin-bottom: 60px;"></h2> <p style="margin-bottom: .2em;"><a href="/it/servizi-devops/">Servizio DevOps</a></p> <p style="margin-bottom: .2em;"><a href="/it/cloud-hosting-and-migration/">Hosting e migrazione nel cloud</a></p> <p style="margin-bottom: .2em;"><a href="/it/api-driven-development-and-mashups/">Sviluppo basato su API</a></p> <p style="margin-bottom: .2em;"><a href="/it/rails-upgrade-service-provider/">Servizio di aggiornamento delle rotaie</a></p> <p style="margin-bottom: .2em;"><a href="/it/application-support-and-maintenance/">Supporto e manutenzione dell'app</a></p> <p style="margin-bottom: .2em;"><a href="/it/societa-di-sviluppo-mean-stack/">Sviluppo dello stack MEAN</a></p> <p style="margin-bottom: .2em;"><a href="/it/societa-di-servizi-di-progettazione-ui-ux/">Servizi di progettazione UI UX</a></p> <p><a href="https://www.railscarma.com/it/servizi-di-sviluppo-mern-stack/">Sviluppo dello stack MERN</a></p> </div> </div> </div> <div class="ast-col-lg-3 ast-col-md-3 ast-col-sm-12 ast-col-xs-12 footer-adv-widget footer-adv-widget-4" > <div id="text-6" class="widget widget_text"><h2 class="widget-title">Informazioni di contatto</h2> <div class="textwidget"><p style="margin-bottom: 1.1em;"><i class="fa fa-angle-double-right" style="color: #b71c1c; font-size: 16px; margin-right: 10px;" aria-hidden="true"></i>sales@railscarma.com</p> <p style="margin-bottom: 1.1em;"><i class="fa fa-angle-double-right" style="color: #b71c1c; font-size: 16px; margin-right: 10px;" aria-hidden="true"></i>+1 (888) 394 0048 (Stati Uniti)</p> <p style="margin-bottom: 1.1em;"><i class="fa fa-angle-double-right" style="color: #b71c1c; font-size: 16px; margin-right: 10px;" aria-hidden="true"></i>+91 70120 98783 (IND)</p> </div> </div><div id="custom_html-2" class="widget_text widget widget_custom_html"><div class="textwidget custom-html-widget"><link data-minify="1" rel="preload" href="https://www.railscarma.com/wp-content/cache/min/1/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css?ver=1775058246" data-rocket-async="style" as="style" onload="this.onload=null;this.rel='stylesheet'" onerror="this.removeAttribute('data-rocket-async')" > <a href="https://www.facebook.com/RailsCarma"><i class="fa fa-facebook-square" style="font-size:26px;color:#b71c1c;padding-right:10px"></i></a><a href="https://twitter.com/railscarma"><i class="fa fa-twitter-square" style="font-size:26px;color:#b71c1c;padding-right:10px;"></i></a><a href="https://www.linkedin.com/company/railscarma/"><i class="fa fa-linkedin-square" style="font-size:26px;color:#b71c1c;padding-right:10px;"></i></a><a href="https://www.behance.net/railscarma"><i class="fa fa-behance-square" style="font-size:26px;color:#b71c1c;padding-right:10px;"></i></a><a href="https://dribbble.com/railscarma"><i class="fa fa-dribbble" style="font-size:26px;color:#b71c1c;"></i></a> <a href="https://www.provenexpert.com/railscarma-ruby-on-rails-development-company/"><i class="fa fa-check-square" style="font-size:26px;color:#b71c1c;margin-left:10px;"></i></a> <a href="https://clutch.co/profile/railscarma#summary"><picture style="height: 25px; margin-top: -10px; margin-left: 10px;"> <source type="image/webp" data-lazy-srcset="https://www.railscarma.com/wp-content/uploads/2021/11/clutch.png.webp"/> <img src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%200%200'%3E%3C/svg%3E" alt="" data-lazy-src="https://www.railscarma.com/wp-content/uploads/2021/11/clutch.png"/><noscript><img src="https://www.railscarma.com/wp-content/uploads/2021/11/clutch.png" alt=""/></noscript> </picture> </a> <a href="https://upcity.com/profiles/railscarma"><picture style="height: 25px; margin-top: -10px;"> <source type="image/webp" data-lazy-srcset="https://www.railscarma.com/wp-content/uploads/2021/11/upcity.png.webp"/> <img src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%200%200'%3E%3C/svg%3E" alt="" data-lazy-src="https://www.railscarma.com/wp-content/uploads/2021/11/upcity.png"/><noscript><img src="https://www.railscarma.com/wp-content/uploads/2021/11/upcity.png" alt=""/></noscript> </picture> </a></div></div><div id="custom_html-3" class="widget_text widget widget_custom_html"><div class="textwidget custom-html-widget"><link data-minify="1" href="https://www.railscarma.com/wp-content/cache/min/1/widget-awards/css/diamond.min.css?ver=1775058246" data-rocket-async="style" as="style" onload="this.onload=null;this.rel='stylesheet'" onerror="this.removeAttribute('data-rocket-async')" rel="preload"> <div style="width:230px ! important;" class="surly__diamond surly__black surly__id_40525429" onclick="if(event.target.nodeName.toLowerCase() != 'a' && event.target.parentElement.nodeName.toLowerCase() != 'a') {window.open('https://sur.ly/i/railscarma.com/'); return 0;}"> <div class="surly__logo-container"> <a href="https://sur.ly" class="surly__name"><span class="surly__name-prefix">di</span> <span>sur.ly</span></a> </div> <div class="surly__content"> <span style="font-size:12px ! important;" class="surly__title surly__title_r3"> <span class="surly__subtitle">100% Rispettabile</span> <span class="surly__subtitle">Sviluppo </span> <span class="surly__subtitle">Azienda</span> </span> <span class="surly__text" style="font-size:12px ! important;">Sito web</span> <span class="surly__date" style="font-size:14px ! important;">2021</span> </div> </div></div></div> </div> </div><!-- .ast-row --> <div class="footlocations"> <div class="tooltip"><picture class="alignnone size-full wp-image-33204" style="margin-right: 10px;"> <source type="image/webp" data-lazy-srcset="https://www.railscarma.com/wp-content/uploads/2021/09/DXB.png.webp"/> <img src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2030%2020'%3E%3C/svg%3E" alt="" width="30" height="20" data-lazy-src="https://www.railscarma.com/wp-content/uploads/2021/09/DXB.png"/><noscript><img src="https://www.railscarma.com/wp-content/uploads/2021/09/DXB.png" alt="" width="30" height="20"/></noscript> </picture> <a href="https://www.railscarma.com/it/ruby-on-rails-development-company-a-dubai-emirati-arabi-uniti/"> Dubai, Emirati Arabi Uniti</a><span class="tooltiptext">Casella postale 390 667, Business Center, Dubai World Central, Dubai</span></div>   <div class="tooltip"><picture class="alignnone size-full wp-image-802" style="margin-right: 10px;"> <source type="image/webp" data-lazy-srcset="https://www.railscarma.com/wp-content/uploads/2021/09/usa.jpg.webp"/> <img src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2030%2020'%3E%3C/svg%3E" alt="" width="30" height="20" data-lazy-src="https://www.railscarma.com/wp-content/uploads/2021/09/usa.jpg"/><noscript><img src="https://www.railscarma.com/wp-content/uploads/2021/09/usa.jpg" alt="" width="30" height="20"/></noscript> </picture> <a href="https://www.railscarma.com/it/ruby-rails-development-consulting-california/">California, Stati Uniti</a><span class="tooltiptext">515 S, Flower Street 36° piano, Los Angeles, California, 90071</span></div>   <div class="tooltip"><picture class="alignnone size-full wp-image-802" style="margin-right: 10px;"> <source type="image/webp" data-lazy-srcset="https://www.railscarma.com/wp-content/uploads/2021/09/usa.jpg.webp"/> <img src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2030%2020'%3E%3C/svg%3E" alt="" width="30" height="20" data-lazy-src="https://www.railscarma.com/wp-content/uploads/2021/09/usa.jpg"/><noscript><img src="https://www.railscarma.com/wp-content/uploads/2021/09/usa.jpg" alt="" width="30" height="20"/></noscript> </picture> <a href="https://www.railscarma.com/it/ruby-on-rails-development-consulting-new-york/">New York, Stati Uniti</a><span class="tooltiptext">172 5th Ave Suite 49 Brooklyn, New York 11217, Stati Uniti</span></div>   <div class="tooltip"><picture class="alignnone size-full wp-image-802" style="margin-right: 10px;"> <source type="image/webp" data-lazy-srcset="https://www.railscarma.com/wp-content/uploads/2021/09/usa.jpg.webp"/> <img src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2030%2020'%3E%3C/svg%3E" alt="" width="30" height="20" data-lazy-src="https://www.railscarma.com/wp-content/uploads/2021/09/usa.jpg"/><noscript><img src="https://www.railscarma.com/wp-content/uploads/2021/09/usa.jpg" alt="" width="30" height="20"/></noscript> </picture> <a href="https://www.railscarma.com/it/ruby-on-rails-development-consulting-dallas/">Dalla, Stati Uniti</a><span class="tooltiptext">3333 Lee Parkway, Ste 600, Dallas, TX 75219 Stati Uniti</span></div>   <div class="tooltip"><picture class="alignnone size-full wp-image-801" style="margin-right: 10px;"> <source type="image/webp" data-lazy-srcset="https://www.railscarma.com/wp-content/uploads/2021/09/qatar.jpg.webp"/> <img src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2030%2020'%3E%3C/svg%3E" alt="" width="30" height="20" data-lazy-src="https://www.railscarma.com/wp-content/uploads/2021/09/qatar.jpg"/><noscript><img src="https://www.railscarma.com/wp-content/uploads/2021/09/qatar.jpg" alt="" width="30" height="20"/></noscript> </picture> <a href="https://www.railscarma.com/it/consulenza-per-lo-sviluppo-di-ruby-rails-a-doha-qatar/">Doha, Qatar</a><span class="tooltiptext">Torre Al EZZ, 2° piano, edificio n. 84, Al Aaliya Street, Doha-Qatar</span></div>   <div class="tooltip"><picture class="alignnone size-full wp-image-803" style="margin-right: 10px;"> <source type="image/webp" data-lazy-srcset="https://www.railscarma.com/wp-content/uploads/2021/09/india.jpg.webp"/> <img src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2030%2020'%3E%3C/svg%3E" alt="" width="30" height="20" data-lazy-src="https://www.railscarma.com/wp-content/uploads/2021/09/india.jpg"/><noscript><img src="https://www.railscarma.com/wp-content/uploads/2021/09/india.jpg" alt="" width="30" height="20"/></noscript> </picture> <a href="https://www.railscarma.com/it/ruby-on-rails-development-consulting-in-bangalore/">Bangalore, India</a><span class="tooltiptext">#27, Ambalipura, Bellandur, Bangalore 560103, India.</span></div> </div> </div><!-- .ast-container --> </div><!-- .footer-adv-overlay--> </div><!-- .ast-theme-footer .footer-adv-layout-4 --> <div class="ast-small-footer footer-sml-layout-1"> <div class="ast-footer-overlay"> <div class="ast-container"> <div class="ast-small-footer-wrap" > <div class="ast-small-footer-section ast-small-footer-section-1" > Copyright © 2025 - 2026 <a href="https://www.railscarma.com/it/" title="Società di sviluppo Ruby On Rails">RailsCarma.</a> Tutti i diritti riservati. Progettato da <a class="" href="https://www.carmatec.com/">Carmatec</a> </div> <div class="ast-small-footer-section ast-small-footer-section-2" > <a href="/it/privacy-policy/">Politica sulla riservatezza. </a><a href="/it/termini-di-utilizzo/">Termini di utilizzo.</a><a href="/it/mappa-del-sito/"> Mappa del sito</a> </div> </div><!-- .ast-row .ast-small-footer-wrap --> </div><!-- .ast-container --> </div><!-- .ast-footer-overlay --> </div><!-- .ast-small-footer--> </footer><!-- #colophon --> </div><!-- #page --> <template id="tp-language" data-tp-language="it_IT"></template><script type="speculationrules"> {"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/it/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/astra-child/*","/wp-content/themes/astra/*","/it/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <!--googleoff: all--><div id="cookie-law-info-bar" data-nosnippet="true"><span><div class="cli-bar-container cli-style-v2"><div class="cli-bar-message">Sul nostro sito web utilizziamo i cookie per offrirvi l'esperienza più pertinente possibile, ricordando le vostre preferenze e le vostre visite ripetute. Facendo clic su "ACCETTA TUTTI", si acconsente all'uso di TUTTI i cookie. Tuttavia, è possibile visitare "Impostazioni dei cookie" per fornire un consenso controllato.</div><div class="cli-bar-btn_container"><a role='button' class="cli_settings_button" style="margin:0px 10px 0px 5px">Impostazioni dei cookie</a><a role='button' id="cookie_action_close_header_reject" class="medium cli-plugin-button cli-plugin-main-button cookie_action_close_header_reject cli_action_button wt-cli-reject-btn" data-cli_action="reject" style="margin:5px 10px 5px 5px" data-no-translation="" data-trp-gettext="">RIFIUTARE TUTTO</a><a id="wt-cli-accept-all-btn" role='button' data-cli_action="accept_all" class="wt-cli-element medium cli-plugin-button wt-cli-accept-all-btn cookie_action_close_header cli_action_button">ACCETTA TUTTI</a></div></div></span></div><div id="cookie-law-info-again" style="display:none" data-nosnippet="true"><span id="cookie_hdr_showagain">Gestire il consenso</span></div><div class="cli-modal" data-nosnippet="true" id="cliSettingsPopup" tabindex="-1" role="dialog" aria-labelledby="cliSettingsPopup" aria-hidden="true"> <div class="cli-modal-dialog" role="document"> <div class="cli-modal-content cli-bar-popup"> <button type="button" class="cli-modal-close" id="cliModalClose"> <svg class="" viewbox="0 0 24 24"><path d="M19 6.41l-1.41-1.41-5.59 5.59-5.59-5.59-1.41 1.41 5.59 5.59-5.59 5.59 1.41 1.41 5.59-5.59 5.59 5.59 1.41-1.41-5.59-5.59z"></path><path d="M0 0h24v24h-24z" fill="none"></path></svg> <span class="wt-cli-sr-only" data-no-translation="" data-trp-gettext="">Vicino</span> </button> <div class="cli-modal-body"> <div class="cli-container-fluid cli-tab-container"> <div class="cli-row"> <div class="cli-col-12 cli-align-items-stretch cli-px-0"> <div class="cli-privacy-overview"> <h4>Panoramica sulla privacy</h4> <div class="cli-privacy-content"> <div class="cli-privacy-content-text">Questo sito Web utilizza i cookie per migliorare la tua esperienza durante la navigazione nel sito Web. Di questi, i cookie classificati come necessari vengono memorizzati nel tuo browser in quanto sono essenziali per il funzionamento delle funzionalità di base del sito web. Utilizziamo anche cookie di terze parti che ci aiutano ad analizzare e comprendere come utilizzi questo sito web. Questi cookie verranno memorizzati nel tuo browser solo con il tuo consenso. Hai anche la possibilità di disattivare questi cookie. Ma la disattivazione di alcuni di questi cookie potrebbe influire sulla tua esperienza di navigazione.</div> </div> <a class="cli-privacy-readmore" aria-label="Mostra di più" role="button" data-readmore-text="Mostra di più" data-readless-text="Mostra meno" data-no-translation-aria-label="" data-no-translation-data-readmore-text="" data-no-translation-data-readless-text=""></a> </div> </div> <div class="cli-col-12 cli-align-items-stretch cli-px-0 cli-tab-section-container"> <div class="cli-tab-section"> <div class="cli-tab-header"> <a role="button" tabindex="0" class="cli-nav-link cli-settings-mobile" data-target="necessary" data-toggle="cli-toggle-tab"> Necessario </a> <div class="wt-cli-necessary-checkbox"> <input type="checkbox" class="cli-user-preference-checkbox" id="wt-cli-checkbox-necessary" data-id="checkbox-necessary" checked="checked" /> <label class="form-check-label" for="wt-cli-checkbox-necessary">Necessario</label> </div> <span class="cli-necessary-caption" data-no-translation="" data-trp-gettext="">Sempre abilitato</span> </div> <div class="cli-tab-content"> <div class="cli-tab-pane cli-fade" data-id="necessary"> <div class="wt-cli-cookie-description"> I cookie necessari sono assolutamente essenziali affinché il sito web funzioni correttamente. Questi cookie garantiscono le funzionalità di base e le caratteristiche di sicurezza del sito web, in modo anonimo. <table class="cookielawinfo-row-cat-table cookielawinfo-winter"><thead><tr><th class="cookielawinfo-column-1" data-no-translation="" data-trp-gettext="">Biscotto</th><th class="cookielawinfo-column-3" data-no-translation="" data-trp-gettext="">Durata</th><th class="cookielawinfo-column-4" data-no-translation="" data-trp-gettext="">Descrizione</th></tr></thead><tbody><tr class="cookielawinfo-row"><td class="cookielawinfo-column-1">cookielawinfo-checkbox-analytics</td><td class="cookielawinfo-column-3">11 mesi</td><td class="cookielawinfo-column-4">Questo cookie è impostato dal plug-in GDPR Cookie Consent. Il cookie viene utilizzato per memorizzare il consenso dell'utente per i cookie nella categoria "Analytics".</td></tr><tr class="cookielawinfo-row"><td class="cookielawinfo-column-1">cookielawinfo-checkbox-funzionale</td><td class="cookielawinfo-column-3">11 mesi</td><td class="cookielawinfo-column-4">Il cookie è impostato dal consenso cookie GDPR per registrare il consenso dell'utente per i cookie nella categoria "Funzionali".</td></tr><tr class="cookielawinfo-row"><td class="cookielawinfo-column-1">cookielawinfo-checkbox-necessario</td><td class="cookielawinfo-column-3">11 mesi</td><td class="cookielawinfo-column-4">Questo cookie è impostato dal plug-in GDPR Cookie Consent. I cookie vengono utilizzati per memorizzare il consenso dell'utente per i cookie nella categoria "Necessari".</td></tr><tr class="cookielawinfo-row"><td class="cookielawinfo-column-1">cookielawinfo-checkbox-altri</td><td class="cookielawinfo-column-3">11 mesi</td><td class="cookielawinfo-column-4">Questo cookie è impostato dal plug-in GDPR Cookie Consent. Il cookie viene utilizzato per memorizzare il consenso dell'utente per i cookie nella categoria "Altro.</td></tr><tr class="cookielawinfo-row"><td class="cookielawinfo-column-1">cookielawinfo-checkbox-performance</td><td class="cookielawinfo-column-3">11 mesi</td><td class="cookielawinfo-column-4">Questo cookie è impostato dal plug-in GDPR Cookie Consent. Il cookie viene utilizzato per memorizzare il consenso dell'utente per i cookie nella categoria "Prestazioni".</td></tr><tr class="cookielawinfo-row"><td class="cookielawinfo-column-1">visti_cookie_policy</td><td class="cookielawinfo-column-3">11 mesi</td><td class="cookielawinfo-column-4">Il cookie viene impostato dal plug-in GDPR Cookie Consent e viene utilizzato per memorizzare se l'utente ha acconsentito o meno all'uso dei cookie. Non memorizza alcun dato personale.</td></tr></tbody></table> </div> </div> </div> </div> <div class="cli-tab-section"> <div class="cli-tab-header"> <a role="button" tabindex="0" class="cli-nav-link cli-settings-mobile" data-target="functional" data-toggle="cli-toggle-tab"> Funzionale </a> <div class="cli-switch"> <input type="checkbox" id="wt-cli-checkbox-functional" class="cli-user-preference-checkbox" data-id="checkbox-functional" /> <label for="wt-cli-checkbox-functional" class="cli-slider" data-cli-enable="Abilitato" data-cli-disable="Disabilitato" data-no-translation-data-cli-enable="" data-no-translation-data-cli-disable=""><span class="wt-cli-sr-only">Funzionale</span></label> </div> </div> <div class="cli-tab-content"> <div class="cli-tab-pane cli-fade" data-id="functional"> <div class="wt-cli-cookie-description"> I cookie funzionali aiutano a eseguire determinate funzionalità come la condivisione del contenuto del sito Web su piattaforme di social media, la raccolta di feedback e altre funzionalità di terze parti. </div> </div> </div> </div> <div class="cli-tab-section"> <div class="cli-tab-header"> <a role="button" tabindex="0" class="cli-nav-link cli-settings-mobile" data-target="performance" data-toggle="cli-toggle-tab"> Prestazione </a> <div class="cli-switch"> <input type="checkbox" id="wt-cli-checkbox-performance" class="cli-user-preference-checkbox" data-id="checkbox-performance" /> <label for="wt-cli-checkbox-performance" class="cli-slider" data-cli-enable="Abilitato" data-cli-disable="Disabilitato" data-no-translation-data-cli-enable="" data-no-translation-data-cli-disable=""><span class="wt-cli-sr-only">Prestazione</span></label> </div> </div> <div class="cli-tab-content"> <div class="cli-tab-pane cli-fade" data-id="performance"> <div class="wt-cli-cookie-description"> I cookie per le prestazioni vengono utilizzati per comprendere e analizzare gli indici di prestazione chiave del sito Web che aiutano a offrire ai visitatori un'esperienza utente migliore. </div> </div> </div> </div> <div class="cli-tab-section"> <div class="cli-tab-header"> <a role="button" tabindex="0" class="cli-nav-link cli-settings-mobile" data-target="analytics" data-toggle="cli-toggle-tab"> Analitica </a> <div class="cli-switch"> <input type="checkbox" id="wt-cli-checkbox-analytics" class="cli-user-preference-checkbox" data-id="checkbox-analytics" /> <label for="wt-cli-checkbox-analytics" class="cli-slider" data-cli-enable="Abilitato" data-cli-disable="Disabilitato" data-no-translation-data-cli-enable="" data-no-translation-data-cli-disable=""><span class="wt-cli-sr-only">Analitica</span></label> </div> </div> <div class="cli-tab-content"> <div class="cli-tab-pane cli-fade" data-id="analytics"> <div class="wt-cli-cookie-description"> I cookie analitici vengono utilizzati per capire come i visitatori interagiscono con il sito web. Questi cookie aiutano a fornire informazioni sulle metriche relative al numero di visitatori, frequenza di rimbalzo, fonte di traffico, ecc. </div> </div> </div> </div> <div class="cli-tab-section"> <div class="cli-tab-header"> <a role="button" tabindex="0" class="cli-nav-link cli-settings-mobile" data-target="advertisement" data-toggle="cli-toggle-tab"> Annuncio </a> <div class="cli-switch"> <input type="checkbox" id="wt-cli-checkbox-advertisement" class="cli-user-preference-checkbox" data-id="checkbox-advertisement" /> <label for="wt-cli-checkbox-advertisement" class="cli-slider" data-cli-enable="Abilitato" data-cli-disable="Disabilitato" data-no-translation-data-cli-enable="" data-no-translation-data-cli-disable=""><span class="wt-cli-sr-only">Annuncio</span></label> </div> </div> <div class="cli-tab-content"> <div class="cli-tab-pane cli-fade" data-id="advertisement"> <div class="wt-cli-cookie-description"> I cookie pubblicitari vengono utilizzati per fornire ai visitatori annunci e campagne di marketing pertinenti. Questi cookie tracciano i visitatori attraverso i siti Web e raccolgono informazioni per fornire annunci personalizzati. </div> </div> </div> </div> <div class="cli-tab-section"> <div class="cli-tab-header"> <a role="button" tabindex="0" class="cli-nav-link cli-settings-mobile" data-target="others" data-toggle="cli-toggle-tab"> Altri </a> <div class="cli-switch"> <input type="checkbox" id="wt-cli-checkbox-others" class="cli-user-preference-checkbox" data-id="checkbox-others" /> <label for="wt-cli-checkbox-others" class="cli-slider" data-cli-enable="Abilitato" data-cli-disable="Disabilitato" data-no-translation-data-cli-enable="" data-no-translation-data-cli-disable=""><span class="wt-cli-sr-only">Altri</span></label> </div> </div> <div class="cli-tab-content"> <div class="cli-tab-pane cli-fade" data-id="others"> <div class="wt-cli-cookie-description"> Altri cookie senza categoria sono quelli che vengono analizzati e non sono stati ancora classificati in una categoria. </div> </div> </div> </div> </div> </div> </div> </div> <div class="cli-modal-footer"> <div class="wt-cli-element cli-container-fluid cli-tab-container"> <div class="cli-row"> <div class="cli-col-12 cli-align-items-stretch cli-px-0"> <div class="cli-tab-footer wt-cli-privacy-overview-actions"> <a id="wt-cli-privacy-save-btn" role="button" tabindex="0" data-cli-action="accept" class="wt-cli-privacy-btn cli_setting_save_button wt-cli-privacy-accept-btn cli-btn" data-no-translation="" data-trp-gettext="">SALVA E ACCETTA</a> </div> </div> </div> </div> </div> </div> </div> </div> <div class="cli-modal-backdrop cli-fade cli-settings-overlay"></div> <div class="cli-modal-backdrop cli-fade cli-popupbar-overlay"></div> <!--googleon: all--> <!--Start of Tawk.to Script (0.9.3)--> <script id="tawk-script" type="text/javascript"> var Tawk_API = Tawk_API || {}; var Tawk_LoadStart=new Date(); (function(){ var s1 = document.createElement( 'script' ),s0=document.getElementsByTagName( 'script' )[0]; s1.async = true; s1.src = 'https://embed.tawk.to/624d2fb9c72df874911d3773/1fvuo4t5p'; s1.charset = 'UTF-8'; s1.setAttribute( 'crossorigin','*' ); s0.parentNode.insertBefore( s1, s0 ); })(); </script> <!--End of Tawk.to Script (0.9.3)--> <div id="trp-floater-ls" onclick="" data-no-translation class="trp-language-switcher-container trp-floater-ls-names trp-bottom-left trp-color-dark flags-full-names" > <div id="trp-floater-ls-current-language" class="trp-with-flags"> <a href="#" class="trp-floater-ls-disabled-language trp-ls-disabled-language" onclick="event.preventDefault()"> <img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="it_IT" title="Italian" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/it_IT.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/it_IT.png" width="18" height="12" alt="it_IT" title="Italian"></noscript>Italian </a> </div> <div id="trp-floater-ls-language-list" class="trp-with-flags" > <div class="trp-language-wrap trp-language-wrap-bottom"> <a href="https://www.railscarma.com/blog/technical-articles/learning-the-fundamentals-of-nokogiri-gem/" title="English"> <img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="en_US" title="English" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/en_US.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/en_US.png" width="18" height="12" alt="en_US" title="English"></noscript>English </a> <a href="https://www.railscarma.com/ja/%e3%83%96%e3%83%ad%e3%82%b0/%e6%8a%80%e8%a1%93%e8%ab%96%e6%96%87/%e3%83%8e%e3%82%b3%e3%82%ae%e3%83%aa%e3%82%b8%e3%82%a7%e3%83%a0%e3%81%ae%e5%9f%ba%e6%9c%ac%e3%82%92%e5%ad%a6%e3%81%b6/" title="Japanese"> <img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="ja" title="Japanese" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/ja.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/ja.png" width="18" height="12" alt="ja" title="Japanese"></noscript>Japanese </a> <a href="https://www.railscarma.com/de/blog/fachartikel/erlernen-der-grundlagen-von-nokogiri-gem/" title="German"> <img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="de_DE" title="German" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/de_DE.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/de_DE.png" width="18" height="12" alt="de_DE" title="German"></noscript>German </a> <a href="https://www.railscarma.com/fr/blog/articles-techniques/apprendre-les-bases-de-la-gemme-nokogiri/" title="French"> <img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="fr_FR" title="French" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/fr_FR.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/fr_FR.png" width="18" height="12" alt="fr_FR" title="French"></noscript>French </a> <a href="https://www.railscarma.com/es/blog/articulos-tecnicos/learning-the-fundamentals-of-nokogiri-gem/" title="Spanish"> <img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="es_ES" title="Spanish" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/es_ES.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/es_ES.png" width="18" height="12" alt="es_ES" title="Spanish"></noscript>Spanish </a> <a href="https://www.railscarma.com/sv/blogg/tekniska-artiklar/lara-dig-grunderna-i-nokogiri-gem/" title="Swedish"> <img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="sv_SE" title="Swedish" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/sv_SE.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/sv_SE.png" width="18" height="12" alt="sv_SE" title="Swedish"></noscript>Swedish </a> <a href="#" class="trp-floater-ls-disabled-language trp-ls-disabled-language" onclick="event.preventDefault()"><img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="it_IT" title="Italian" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/it_IT.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/it_IT.png" width="18" height="12" alt="it_IT" title="Italian"></noscript>Italian</a></div> </div> </div> <div class="trp_model_container" id="trp_ald_modal_container" style="display: none" data-no-dynamic-translation data-no-translation> <div class="trp_ald_modal" id="trp_ald_modal_popup"> <div id="trp_ald_popup_text"> We've detected you might be speaking a different language. Do you want to change to: </div> <div class="trp_ald_select_and_button"> <div class="trp_ald_ls_container"> <div class="trp-language-switcher trp-language-switcher-container" id="trp_ald_popup_select_container" data-no-translation> <div class="trp-ls-shortcode-current-language" id="en_US" special-selector="trp_ald_popup_current_language" data-trp-ald-selected-language= "en_US"> <img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="en_US" title="English" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/en_US.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/en_US.png" width="18" height="12" alt="en_US" title="English"></noscript> English </div> <div class="trp-ls-shortcode-language"> <div class="trp-ald-popup-select" id="en_US" data-trp-ald-selected-language = "en_US"> <img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="en_US" title="English" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/en_US.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/en_US.png" width="18" height="12" alt="en_US" title="English"></noscript> English </div> <div class="trp-ald-popup-select" id="ja" data-trp-ald-selected-language = "ja"> <img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="ja" title="Japanese" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/ja.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/ja.png" width="18" height="12" alt="ja" title="Japanese"></noscript> Japanese </div> <div class="trp-ald-popup-select" id="de_DE" data-trp-ald-selected-language = "de_DE"> <img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="de_DE" title="German" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/de_DE.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/de_DE.png" width="18" height="12" alt="de_DE" title="German"></noscript> German </div> <div class="trp-ald-popup-select" id="fr_FR" data-trp-ald-selected-language = "fr_FR"> <img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="fr_FR" title="French" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/fr_FR.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/fr_FR.png" width="18" height="12" alt="fr_FR" title="French"></noscript> French </div> <div class="trp-ald-popup-select" id="es_ES" data-trp-ald-selected-language = "es_ES"> <img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="es_ES" title="Spanish" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/es_ES.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/es_ES.png" width="18" height="12" alt="es_ES" title="Spanish"></noscript> Spanish </div> <div class="trp-ald-popup-select" id="it_IT" data-trp-ald-selected-language = "it_IT"> <img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="it_IT" title="Italian" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/it_IT.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/it_IT.png" width="18" height="12" alt="it_IT" title="Italian"></noscript> Italian </div> <div class="trp-ald-popup-select" id="sv_SE" data-trp-ald-selected-language = "sv_SE"> <img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="sv_SE" title="Swedish" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/sv_SE.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/sv_SE.png" width="18" height="12" alt="sv_SE" title="Swedish"></noscript> Swedish </div> </div> </div> </div> <div class="trp_ald_button"> <a href="https://www.railscarma.com" id="trp_ald_popup_change_language"> Change Language </a> </div> </div> <a id="trp_ald_x_button_and_textarea" href="#"> <span id="trp_ald_x_button" title="Close and do not switch language"></span> <span id="trp_ald_x_button_textarea" title="Close and do not switch language"> Close and do not switch language </span> </a> </div> </div> <template id="trp_ald_no_text_popup_template"> <div id="trp_no_text_popup_wrap"> <div id="trp_no_text_popup" class="trp_ald_no_text_popup" data-no-dynamic-translation data-no-translation> <div id="trp_ald_not_text_popup_ls_and_button"> <div id="trp_ald_no_text_popup_div"> <span id="trp_ald_no_text_popup_text"> We've detected you might be speaking a different language. Do you want to change to: </span> </div> <div class="trp_ald_ls_container"> <div class="trp-language-switcher trp-language-switcher-container" id="trp_ald_no_text_select" data-no-translation> <div class="trp-ls-shortcode-current-language" id="en_US" special-selector="trp_ald_popup_current_language" data-trp-ald-selected-language="en_US"> <img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="en_US" title="English" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/en_US.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/en_US.png" width="18" height="12" alt="en_US" title="English"></noscript> English </div> <div class="trp-ls-shortcode-language" id="trp_ald_no_text_popup_select_container"> <div class="trp-ald-popup-select" id="en_US" data-trp-ald-selected-language= "en_US"> <img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="en_US" title="English" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/en_US.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/en_US.png" width="18" height="12" alt="en_US" title="English"></noscript> English </div> <div class="trp-ald-popup-select" id="ja" data-trp-ald-selected-language="ja"> <img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="ja" title="Japanese" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/ja.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/ja.png" width="18" height="12" alt="ja" title="Japanese"></noscript> Japanese </div> <div class="trp-ald-popup-select" id="de_DE" data-trp-ald-selected-language="de_DE"> <img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="de_DE" title="German" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/de_DE.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/de_DE.png" width="18" height="12" alt="de_DE" title="German"></noscript> German </div> <div class="trp-ald-popup-select" id="fr_FR" data-trp-ald-selected-language="fr_FR"> <img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="fr_FR" title="French" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/fr_FR.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/fr_FR.png" width="18" height="12" alt="fr_FR" title="French"></noscript> French </div> <div class="trp-ald-popup-select" id="es_ES" data-trp-ald-selected-language="es_ES"> <img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="es_ES" title="Spanish" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/es_ES.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/es_ES.png" width="18" height="12" alt="es_ES" title="Spanish"></noscript> Spanish </div> <div class="trp-ald-popup-select" id="it_IT" data-trp-ald-selected-language="it_IT"> <img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="it_IT" title="Italian" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/it_IT.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/it_IT.png" width="18" height="12" alt="it_IT" title="Italian"></noscript> Italian </div> <div class="trp-ald-popup-select" id="sv_SE" data-trp-ald-selected-language="sv_SE"> <img class="trp-flag-image" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2018%2012'%3E%3C/svg%3E" width="18" height="12" alt="sv_SE" title="Swedish" data-lazy-src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/sv_SE.png"><noscript><img class="trp-flag-image" src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/sv_SE.png" width="18" height="12" alt="sv_SE" title="Swedish"></noscript> Swedish </div> </div> </div> </div> <div class="trp_ald_change_language_div"> <a href="https://www.railscarma.com" id="trp_ald_no_text_popup_change_language"> Change Language </a> </div> </div> <div id="trp_ald_no_text_popup_x"> <button id="trp_close"></button> </div> </div> </div> </template> <!-- GTM Container placement set to footer --> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-59W5" height="0" width="0" style="display:none;visibility:hidden" aria-hidden="true"></iframe></noscript> <!-- End Google Tag Manager (noscript) --><style type='text/css' class='astra-megamenu-inline-style'>.ast-desktop .astra-megamenu-li.menu-item-2074 .astra-full-megamenu-wrapper, .ast-desktop .astra-megamenu-li.menu-item-2074 .astra-mega-menu-width-menu-container, .ast-desktop .astra-megamenu-li.menu-item-2074 .astra-mega-menu-width-content, .ast-desktop .astra-megamenu-li.menu-item-2074 .astra-mega-menu-width-custom{background-color:#ffffff;}</style> <!-- Click to Chat - https://holithemes.com/plugins/click-to-chat/ v4.36 --> <style id="ht-ctc-entry-animations">.ht_ctc_entry_animation{animation-duration:0.4s;animation-fill-mode:both;animation-delay:0s;animation-iteration-count:1;} @keyframes ht_ctc_anim_corner {0% {opacity: 0;transform: scale(0);}100% {opacity: 1;transform: scale(1);}}.ht_ctc_an_entry_corner {animation-name: ht_ctc_anim_corner;animation-timing-function: cubic-bezier(0.25, 1, 0.5, 1);transform-origin: bottom var(--side, right);} </style> <div class="ht-ctc ht-ctc-chat ctc-analytics ctc_wp_desktop style-3 ht_ctc_entry_animation ht_ctc_an_entry_corner ctc_side_positions" id="ht-ctc-chat" style="display: none; position: fixed; top: 15px; right: 15px;" > <div class="ht_ctc_style ht_ctc_chat_style"> <div style="display:flex;justify-content:center;align-items:center; " class="ctc_s_3 ctc_nb" data-nb_top="-5px" data-nb_right="-5px"> <p class="ctc-analytics ctc_cta ctc_cta_stick ht-ctc-cta ht-ctc-cta-hover ctc_m_cta_order_1" style="padding: 0px 16px; line-height: 1.6; font-size: 15px; background-color: #25d366; color: #ffffff; border-radius:10px; margin:0 10px; display: none; order: 0; ">WhatsApp</p> <svg style="pointer-events:none; display:block; height:50px; width:50px;" width="50px" height="50px" viewbox="0 0 1219.547 1225.016"> <path style="fill: #E0E0E0;" fill="#E0E0E0" d="M1041.858 178.02C927.206 63.289 774.753.07 612.325 0 277.617 0 5.232 272.298 5.098 606.991c-.039 106.986 27.915 211.42 81.048 303.476L0 1225.016l321.898-84.406c88.689 48.368 188.547 73.855 290.166 73.896h.258.003c334.654 0 607.08-272.346 607.222-607.023.056-162.208-63.052-314.724-177.689-429.463zm-429.533 933.963h-.197c-90.578-.048-179.402-24.366-256.878-70.339l-18.438-10.93-191.021 50.083 51-186.176-12.013-19.087c-50.525-80.336-77.198-173.175-77.16-268.504.111-278.186 226.507-504.503 504.898-504.503 134.812.056 261.519 52.604 356.814 147.965 95.289 95.36 147.728 222.128 147.688 356.948-.118 278.195-226.522 504.543-504.693 504.543z"/> <lineargradient id="htwaicona-chat" gradientunits="userSpaceOnUse" x1="609.77" y1="1190.114" x2="609.77" y2="21.084"> <stop offset="0" stop-color="#20b038"/> <stop offset="1" stop-color="#60d66a"/> </lineargradient> <path style="fill: url(#htwaicona-chat);" fill="url(#htwaicona-chat)" d="M27.875 1190.114l82.211-300.18c-50.719-87.852-77.391-187.523-77.359-289.602.133-319.398 260.078-579.25 579.469-579.25 155.016.07 300.508 60.398 409.898 169.891 109.414 109.492 169.633 255.031 169.57 409.812-.133 319.406-260.094 579.281-579.445 579.281-.023 0 .016 0 0 0h-.258c-96.977-.031-192.266-24.375-276.898-70.5l-307.188 80.548z"/> <image overflow="visible" opacity=".08" width="682" height="639" transform="translate(270.984 291.372)"/> <path fill-rule="evenodd" clip-rule="evenodd" style="fill: #FFFFFF;" fill="#FFF" d="M462.273 349.294c-11.234-24.977-23.062-25.477-33.75-25.914-8.742-.375-18.75-.352-28.742-.352-10 0-26.25 3.758-39.992 18.766-13.75 15.008-52.5 51.289-52.5 125.078 0 73.797 53.75 145.102 61.242 155.117 7.5 10 103.758 166.266 256.203 226.383 126.695 49.961 152.477 40.023 179.977 37.523s88.734-36.273 101.234-71.297c12.5-35.016 12.5-65.031 8.75-71.305-3.75-6.25-13.75-10-28.75-17.5s-88.734-43.789-102.484-48.789-23.75-7.5-33.75 7.516c-10 15-38.727 48.773-47.477 58.773-8.75 10.023-17.5 11.273-32.5 3.773-15-7.523-63.305-23.344-120.609-74.438-44.586-39.75-74.688-88.844-83.438-103.859-8.75-15-.938-23.125 6.586-30.602 6.734-6.719 15-17.508 22.5-26.266 7.484-8.758 9.984-15.008 14.984-25.008 5-10.016 2.5-18.773-1.25-26.273s-32.898-81.67-46.234-111.326z"/> <path style="fill: #FFFFFF;" fill="#FFF" d="M1036.898 176.091C923.562 62.677 772.859.185 612.297.114 281.43.114 12.172 269.286 12.039 600.137 12 705.896 39.633 809.13 92.156 900.13L7 1211.067l318.203-83.438c87.672 47.812 186.383 73.008 286.836 73.047h.255.003c330.812 0 600.109-269.219 600.25-600.055.055-160.343-62.328-311.108-175.649-424.53zm-424.601 923.242h-.195c-89.539-.047-177.344-24.086-253.93-69.531l-18.227-10.805-188.828 49.508 50.414-184.039-11.875-18.867c-49.945-79.414-76.312-171.188-76.273-265.422.109-274.992 223.906-498.711 499.102-498.711 133.266.055 258.516 52 352.719 146.266 94.195 94.266 146.031 219.578 145.992 352.852-.118 274.999-223.923 498.749-498.899 498.749z"/> </svg></div> </div> </div> <span class="ht_ctc_chat_data" data-settings="{"number":"917012098783","pre_filled":"Hello","dis_m":"show","dis_d":"show","css":"cursor: pointer; z-index: 99999999;","pos_d":"position: fixed; top: 15px; right: 15px;","pos_m":"position: fixed; bottom: 10px; left: 10px;","side_d":"right","side_m":"left","schedule":"no","se":150,"ani":"no-animation","url_target_d":"_blank","ga":"yes","gtm":"1","fb":"yes","webhook_format":"json","g_init":"default","g_an_event_name":"chat: {number}","gtm_event_name":"Click to Chat","pixel_event_name":"Click to Chat by HoliThemes"}" data-rest="d528ce73eb"></span> <link rel='preload' href='https://www.railscarma.com/wp-content/plugins/elementor/assets/css/widget-icon-list.min.css?ver=3.34.1' data-rocket-async="style" as="style" onload="this.onload=null;this.rel='stylesheet'" onerror="this.removeAttribute('data-rocket-async')" media='all' /> <link rel='preload' href='https://www.railscarma.com/wp-content/plugins/elementor/assets/css/widget-image.min.css?ver=3.34.1' data-rocket-async="style" as="style" onload="this.onload=null;this.rel='stylesheet'" onerror="this.removeAttribute('data-rocket-async')" media='all' /> <link rel='preload' href='https://www.railscarma.com/wp-content/plugins/elementor/assets/css/widget-testimonial.min.css?ver=3.34.1' data-rocket-async="style" as="style" onload="this.onload=null;this.rel='stylesheet'" onerror="this.removeAttribute('data-rocket-async')" media='all' /> <link rel='preload' href='https://www.railscarma.com/wp-content/cache/background-css/1/www.railscarma.com/wp-content/plugins/related-post/assets/front/css/owl.carousel.min.css?ver=6.9.4&wpr_t=1775081309' data-rocket-async="style" as="style" onload="this.onload=null;this.rel='stylesheet'" onerror="this.removeAttribute('data-rocket-async')" media='all' /> <link data-minify="1" rel='preload' href='https://www.railscarma.com/wp-content/cache/min/1/wp-content/plugins/related-post/assets/front/css/related-post.css?ver=1775058258' data-rocket-async="style" as="style" onload="this.onload=null;this.rel='stylesheet'" onerror="this.removeAttribute('data-rocket-async')" media='all' /> <link data-minify="1" rel='preload' href='https://www.railscarma.com/wp-content/cache/background-css/1/www.railscarma.com/wp-content/cache/min/1/wp-content/plugins/cookie-law-info/legacy/public/css/cookie-law-info-table.css?ver=1775058246&wpr_t=1775081309' data-rocket-async="style" as="style" onload="this.onload=null;this.rel='stylesheet'" onerror="this.removeAttribute('data-rocket-async')" media='all' /> <script id="trp-dynamic-translator-js-extra"> var trp_data = {"trp_custom_ajax_url":"https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/includes/trp-ajax.php","trp_wp_ajax_url":"https://www.railscarma.com/wp-admin/admin-ajax.php","trp_language_to_query":"it_IT","trp_original_language":"en_US","trp_current_language":"it_IT","trp_skip_selectors":["[data-no-translation]","[data-no-dynamic-translation]","[data-trp-translate-id-innertext]","script","style","head","trp-span","translate-press","[data-trp-translate-id]","[data-trpgettextoriginal]","[data-trp-post-slug]"],"trp_base_selectors":["data-trp-translate-id","data-trpgettextoriginal","data-trp-post-slug"],"trp_attributes_selectors":{"text":{"accessor":"outertext","attribute":false},"block":{"accessor":"innertext","attribute":false},"image_src":{"selector":"img[src]","accessor":"src","attribute":true},"submit":{"selector":"input[type='submit'],input[type='button'], input[type='reset']","accessor":"value","attribute":true},"placeholder":{"selector":"input[placeholder],textarea[placeholder]","accessor":"placeholder","attribute":true},"title":{"selector":"[title]","accessor":"title","attribute":true},"a_href":{"selector":"a[href]","accessor":"href","attribute":true},"button":{"accessor":"outertext","attribute":false},"option":{"accessor":"innertext","attribute":false},"aria_label":{"selector":"[aria-label]","accessor":"aria-label","attribute":true},"video_src":{"selector":"video[src]","accessor":"src","attribute":true},"video_poster":{"selector":"video[poster]","accessor":"poster","attribute":true},"video_source_src":{"selector":"video source[src]","accessor":"src","attribute":true},"audio_src":{"selector":"audio[src]","accessor":"src","attribute":true},"audio_source_src":{"selector":"audio source[src]","accessor":"src","attribute":true},"picture_image_src":{"selector":"picture image[src]","accessor":"src","attribute":true},"picture_source_srcset":{"selector":"picture source[srcset]","accessor":"srcset","attribute":true},"image_alt":{"selector":"img[alt]","accessor":"alt","attribute":true},"meta_desc":{"selector":"meta[name=\"description\"],meta[property=\"og:title\"],meta[property=\"og:description\"],meta[property=\"og:site_name\"],meta[property=\"og:image:alt\"],meta[name=\"twitter:title\"],meta[name=\"twitter:description\"],meta[name=\"twitter:image:alt\"],meta[name=\"DC.Title\"],meta[name=\"DC.Description\"],meta[property=\"article:section\"],meta[property=\"article:tag\"]","accessor":"content","attribute":true},"page_title":{"selector":"title","accessor":"innertext","attribute":false},"meta_desc_img":{"selector":"meta[property=\"og:image\"],meta[property=\"og:image:secure_url\"],meta[name=\"twitter:image\"]","accessor":"content","attribute":true}},"trp_attributes_accessors":["outertext","innertext","src","value","placeholder","title","href","aria-label","poster","srcset","alt","content"],"gettranslationsnonceregular":"6122ce5cbf","showdynamiccontentbeforetranslation":"","skip_strings_from_dynamic_translation":[],"skip_strings_from_dynamic_translation_for_substrings":{"href":["amazon-adsystem","googleads","g.doubleclick"]},"duplicate_detections_allowed":"100","trp_translate_numerals_opt":"no","trp_no_auto_translation_selectors":["[data-no-auto-translation]"]}; //# sourceURL=trp-dynamic-translator-js-extra </script> <script data-minify="1" src="https://www.railscarma.com/wp-content/cache/min/1/wp-content/plugins/translatepress-multilingual/assets/js/trp-translate-dom-changes.js?ver=1775058247" id="trp-dynamic-translator-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-includes/js/comment-reply.min.js?ver=6.9.4" id="comment-reply-js" async data-wp-strategy="async" fetchpriority="low"></script> <script id="astra-theme-js-js-extra"> var astra = {"break_point":"921","isRtl":""}; //# sourceURL=astra-theme-js-js-extra </script> <script src="https://www.railscarma.com/wp-content/themes/astra/assets/js/minified/style.min.js?ver=2.5.5" id="astra-theme-js-js" data-rocket-defer defer></script> <script id="ht_ctc_app_js-js-extra"> var ht_ctc_chat_var = {"number":"917012098783","pre_filled":"Hello","dis_m":"show","dis_d":"show","css":"cursor: pointer; z-index: 99999999;","pos_d":"position: fixed; top: 15px; right: 15px;","pos_m":"position: fixed; bottom: 10px; left: 10px;","side_d":"right","side_m":"left","schedule":"no","se":"150","ani":"no-animation","url_target_d":"_blank","ga":"yes","gtm":"1","fb":"yes","webhook_format":"json","g_init":"default","g_an_event_name":"chat: {number}","gtm_event_name":"Click to Chat","pixel_event_name":"Click to Chat by HoliThemes"}; var ht_ctc_variables = {"g_an_event_name":"chat: {number}","gtm_event_name":"Click to Chat","pixel_event_type":"trackCustom","pixel_event_name":"Click to Chat by HoliThemes","g_an_params":["g_an_param_1","g_an_param_2"],"g_an_param_1":{"key":"event_category","value":"Click to Chat for WhatsApp"},"g_an_param_2":{"key":"event_label","value":"{title}, {url}"},"pixel_params":["pixel_param_1","pixel_param_2","pixel_param_3","pixel_param_4"],"pixel_param_1":{"key":"Category","value":"Click to Chat for WhatsApp"},"pixel_param_2":{"key":"ID","value":"{number}"},"pixel_param_3":{"key":"Title","value":"{title}"},"pixel_param_4":{"key":"URL","value":"{url}"},"gtm_params":["gtm_param_1","gtm_param_2","gtm_param_3","gtm_param_4","gtm_param_5"],"gtm_param_1":{"key":"type","value":"chat"},"gtm_param_2":{"key":"number","value":"{number}"},"gtm_param_3":{"key":"title","value":"{title}"},"gtm_param_4":{"key":"url","value":"{url}"},"gtm_param_5":{"key":"ref","value":"dataLayer push"}}; //# sourceURL=ht_ctc_app_js-js-extra </script> <script data-minify="1" src="https://www.railscarma.com/wp-content/cache/min/1/wp-content/plugins/click-to-chat-for-whatsapp/new/inc/assets/js/app.js?ver=1775058247" id="ht_ctc_app_js-js" defer data-wp-strategy="defer"></script> <script data-minify="1" src="https://www.railscarma.com/wp-content/cache/min/1/wp-content/plugins/duracelltomi-google-tag-manager/dist/js/gtm4wp-form-move-tracker.js?ver=1775058247" id="gtm4wp-form-move-tracker-js" data-rocket-defer defer></script> <script id="rocket-browser-checker-js-after"> "use strict";var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}var RocketBrowserCompatibilityChecker=function(){function RocketBrowserCompatibilityChecker(options){_classCallCheck(this,RocketBrowserCompatibilityChecker),this.passiveSupported=!1,this._checkPassiveOption(this),this.options=!!this.passiveSupported&&options}return _createClass(RocketBrowserCompatibilityChecker,[{key:"_checkPassiveOption",value:function(self){try{var options={get passive(){return!(self.passiveSupported=!0)}};window.addEventListener("test",null,options),window.removeEventListener("test",null,options)}catch(err){self.passiveSupported=!1}}},{key:"initRequestIdleCallback",value:function(){!1 in window&&(window.requestIdleCallback=function(cb){var start=Date.now();return setTimeout(function(){cb({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-start))}})},1)}),!1 in window&&(window.cancelIdleCallback=function(id){return clearTimeout(id)})}},{key:"isDataSaverModeOn",value:function(){return"connection"in navigator&&!0===navigator.connection.saveData}},{key:"supportsLinkPrefetch",value:function(){var elem=document.createElement("link");return elem.relList&&elem.relList.supports&&elem.relList.supports("prefetch")&&window.IntersectionObserver&&"isIntersecting"in IntersectionObserverEntry.prototype}},{key:"isSlowConnection",value:function(){return"connection"in navigator&&"effectiveType"in navigator.connection&&("2g"===navigator.connection.effectiveType||"slow-2g"===navigator.connection.effectiveType)}}]),RocketBrowserCompatibilityChecker}(); //# sourceURL=rocket-browser-checker-js-after </script> <script id="rocket-preload-links-js-extra"> var RocketPreloadLinksConfig = {"excludeUris":"/it(/(?:.+/)?feed(?:/(?:.+/?)?)?$|/(?:.+/)?embed/|/(index.php/)?(.*)wp-json(/.*|$))|/refer/|/go/|/recommend/|/recommends/","usesTrailingSlash":"1","imageExt":"jpg|jpeg|gif|png|tiff|bmp|webp|avif|pdf|doc|docx|xls|xlsx|php","fileExt":"jpg|jpeg|gif|png|tiff|bmp|webp|avif|pdf|doc|docx|xls|xlsx|php|html|htm","siteUrl":"https://www.railscarma.com/it","onHoverDelay":"100","rateThrottle":"3"}; //# sourceURL=rocket-preload-links-js-extra </script> <script id="rocket-preload-links-js-after"> (function() { "use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e=function(){function i(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),e}}();function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var t=function(){function n(e,t){i(this,n),this.browser=e,this.config=t,this.options=this.browser.options,this.prefetched=new Set,this.eventTime=null,this.threshold=1111,this.numOnHover=0}return e(n,[{key:"init",value:function(){!this.browser.supportsLinkPrefetch()||this.browser.isDataSaverModeOn()||this.browser.isSlowConnection()||(this.regex={excludeUris:RegExp(this.config.excludeUris,"i"),images:RegExp(".("+this.config.imageExt+")$","i"),fileExt:RegExp(".("+this.config.fileExt+")$","i")},this._initListeners(this))}},{key:"_initListeners",value:function(e){-1<this.config.onHoverDelay&&document.addEventListener("mouseover",e.listener.bind(e),e.listenerOptions),document.addEventListener("mousedown",e.listener.bind(e),e.listenerOptions),document.addEventListener("touchstart",e.listener.bind(e),e.listenerOptions)}},{key:"listener",value:function(e){var t=e.target.closest("a"),n=this._prepareUrl(t);if(null!==n)switch(e.type){case"mousedown":case"touchstart":this._addPrefetchLink(n);break;case"mouseover":this._earlyPrefetch(t,n,"mouseout")}}},{key:"_earlyPrefetch",value:function(t,e,n){var i=this,r=setTimeout(function(){if(r=null,0===i.numOnHover)setTimeout(function(){return i.numOnHover=0},1e3);else if(i.numOnHover>i.config.rateThrottle)return;i.numOnHover++,i._addPrefetchLink(e)},this.config.onHoverDelay);t.addEventListener(n,function e(){t.removeEventListener(n,e,{passive:!0}),null!==r&&(clearTimeout(r),r=null)},{passive:!0})}},{key:"_addPrefetchLink",value:function(i){return this.prefetched.add(i.href),new Promise(function(e,t){var n=document.createElement("link");n.rel="prefetch",n.href=i.href,n.onload=e,n.onerror=t,document.head.appendChild(n)}).catch(function(){})}},{key:"_prepareUrl",value:function(e){if(null===e||"object"!==(void 0===e?"undefined":r(e))||!1 in e||-1===["http:","https:"].indexOf(e.protocol))return null;var t=e.href.substring(0,this.config.siteUrl.length),n=this._getPathname(e.href,t),i={original:e.href,protocol:e.protocol,origin:t,pathname:n,href:t+n};return this._isLinkOk(i)?i:null}},{key:"_getPathname",value:function(e,t){var n=t?e.substring(this.config.siteUrl.length):e;return n.startsWith("/")||(n="/"+n),this._shouldAddTrailingSlash(n)?n+"/":n}},{key:"_shouldAddTrailingSlash",value:function(e){return this.config.usesTrailingSlash&&!e.endsWith("/")&&!this.regex.fileExt.test(e)}},{key:"_isLinkOk",value:function(e){return null!==e&&"object"===(void 0===e?"undefined":r(e))&&(!this.prefetched.has(e.href)&&e.origin===this.config.siteUrl&&-1===e.href.indexOf("?")&&-1===e.href.indexOf("#")&&!this.regex.excludeUris.test(e.href)&&!this.regex.images.test(e.href))}}],[{key:"run",value:function(){"undefined"!=typeof RocketPreloadLinksConfig&&new n(new RocketBrowserCompatibilityChecker({capture:!0,passive:!0}),RocketPreloadLinksConfig).init()}}]),n}();t.run(); }()); //# sourceURL=rocket-preload-links-js-after </script> <script id="rocket_lazyload_css-js-extra"> var rocket_lazyload_css_data = {"threshold":"300"}; //# sourceURL=rocket_lazyload_css-js-extra </script> <script id="rocket_lazyload_css-js-after"> !function o(n,c,a){function u(t,e){if(!c[t]){if(!n[t]){var r="function"==typeof require&&require;if(!e&&r)return r(t,!0);if(s)return s(t,!0);throw(e=new Error("Cannot find module '"+t+"'")).code="MODULE_NOT_FOUND",e}r=c[t]={exports:{}},n[t][0].call(r.exports,function(e){return u(n[t][1][e]||e)},r,r.exports,o,n,c,a)}return c[t].exports}for(var s="function"==typeof require&&require,e=0;e<a.length;e++)u(a[e]);return u}({1:[function(e,t,r){"use strict";{const c="undefined"==typeof rocket_pairs?[]:rocket_pairs,a=(("undefined"==typeof rocket_excluded_pairs?[]:rocket_excluded_pairs).map(t=>{var e=t.selector;document.querySelectorAll(e).forEach(e=>{e.setAttribute("data-rocket-lazy-bg-"+t.hash,"excluded")})}),document.querySelector("#wpr-lazyload-bg-container"));var o=rocket_lazyload_css_data.threshold||300;const u=new IntersectionObserver(e=>{e.forEach(t=>{t.isIntersecting&&c.filter(e=>t.target.matches(e.selector)).map(t=>{var e;t&&((e=document.createElement("style")).textContent=t.style,a.insertAdjacentElement("afterend",e),t.elements.forEach(e=>{u.unobserve(e),e.setAttribute("data-rocket-lazy-bg-"+t.hash,"loaded")}))})})},{rootMargin:o+"px"});function n(){0<(0<arguments.length&&void 0!==arguments[0]?arguments[0]:[]).length&&c.forEach(t=>{try{document.querySelectorAll(t.selector).forEach(e=>{"loaded"!==e.getAttribute("data-rocket-lazy-bg-"+t.hash)&&"excluded"!==e.getAttribute("data-rocket-lazy-bg-"+t.hash)&&(u.observe(e),(t.elements||=[]).push(e))})}catch(e){console.error(e)}})}n(),function(){const r=window.MutationObserver;return function(e,t){if(e&&1===e.nodeType)return(t=new r(t)).observe(e,{attributes:!0,childList:!0,subtree:!0}),t}}()(document.querySelector("body"),n)}},{}]},{},[1]); //# sourceURL=rocket_lazyload_css-js-after </script> <script id="astra-addon-js-js-extra"> var astraAddon = {"sticky_active":"1","svgIconClose":"\u003Cspan class=\"ast-icon icon-close\"\u003E\u003C/span\u003E","header_main_stick":"1","header_above_stick":"0","header_below_stick":"0","stick_header_meta":"","header_main_stick_meta":"","header_above_stick_meta":"","header_below_stick_meta":"","sticky_header_on_devices":"desktop","sticky_header_style":"none","sticky_hide_on_scroll":"0","break_point":"921","tablet_break_point":"921","mobile_break_point":"544","header_main_shrink":"1","header_logo_width":"","responsive_header_logo_width":{"desktop":"","tablet":"","mobile":""},"stick_origin_position":"","site_layout":"","site_content_width":"1240","site_layout_padded_width":"1200","site_layout_box_width":"1200","header_builder_active":"","component_limit":"10","is_header_builder_active":""}; //# sourceURL=astra-addon-js-js-extra </script> <script data-minify="1" src="https://www.railscarma.com/wp-content/cache/min/1/wp-content/uploads/astra-addon/astra-addon-69561ecc8cb804-58152084.js?ver=1775058247" id="astra-addon-js-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-includes/js/dist/hooks.min.js?ver=dd5603f07f9220ed27f1" id="wp-hooks-js"></script> <script src="https://www.railscarma.com/wp-includes/js/dist/i18n.min.js?ver=c26c3dc7bed366793375" id="wp-i18n-js"></script> <script id="wp-i18n-js-after"> wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); //# sourceURL=wp-i18n-js-after </script> <script src="https://www.railscarma.com/wp-includes/js/dist/vendor/react.min.js?ver=18.3.1.1" id="react-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-includes/js/dist/vendor/react-jsx-runtime.min.js?ver=18.3.1" id="react-jsx-runtime-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-includes/js/dist/autop.min.js?ver=9fb50649848277dd318d" id="wp-autop-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-includes/js/dist/blob.min.js?ver=9113eed771d446f4a556" id="wp-blob-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-includes/js/dist/block-serialization-default-parser.min.js?ver=14d44daebf663d05d330" id="wp-block-serialization-default-parser-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-includes/js/dist/deprecated.min.js?ver=e1f84915c5e8ae38964c" id="wp-deprecated-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-includes/js/dist/dom.min.js?ver=26edef3be6483da3de2e" id="wp-dom-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-includes/js/dist/vendor/react-dom.min.js?ver=18.3.1.1" id="react-dom-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-includes/js/dist/escape-html.min.js?ver=6561a406d2d232a6fbd2" id="wp-escape-html-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-includes/js/dist/element.min.js?ver=6a582b0c827fa25df3dd" id="wp-element-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-includes/js/dist/is-shallow-equal.min.js?ver=e0f9f1d78d83f5196979" id="wp-is-shallow-equal-js" data-rocket-defer defer></script> <script id="wp-keycodes-js-translations"> ( function( domain, translations ) { var localeData = translations.locale_data[ domain ] || translations.locale_data.messages; localeData[""].domain = domain; wp.i18n.setLocaleData( localeData, domain ); } )( "default", {"translation-revision-date":"2026-03-28 16:47:19+0000","generator":"GlotPress\/4.0.3","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"it"},"Tilde":["Tilde"],"Backtick":["Accento grave"],"Period":["Punto"],"Comma":["Virgola"]}},"comment":{"reference":"wp-includes\/js\/dist\/keycodes.js"}} ); //# sourceURL=wp-keycodes-js-translations </script> <script src="https://www.railscarma.com/wp-includes/js/dist/keycodes.min.js?ver=34c8fb5e7a594a1c8037" id="wp-keycodes-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-includes/js/dist/priority-queue.min.js?ver=2d59d091223ee9a33838" id="wp-priority-queue-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-includes/js/dist/compose.min.js?ver=7a9b375d8c19cf9d3d9b" id="wp-compose-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-includes/js/dist/private-apis.min.js?ver=4f465748bda624774139" id="wp-private-apis-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-includes/js/dist/redux-routine.min.js?ver=8bb92d45458b29590f53" id="wp-redux-routine-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-includes/js/dist/data.min.js?ver=f940198280891b0b6318" id="wp-data-js" data-rocket-defer defer></script> <script id="wp-data-js-after"> ( function() { var userId = 0; var storageKey = "WP_DATA_USER_" + userId; wp.data .use( wp.data.plugins.persistence, { storageKey: storageKey } ); } )(); //# sourceURL=wp-data-js-after </script> <script src="https://www.railscarma.com/wp-includes/js/dist/html-entities.min.js?ver=e8b78b18a162491d5e5f" id="wp-html-entities-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-includes/js/dist/dom-ready.min.js?ver=f77871ff7694fffea381" id="wp-dom-ready-js" data-rocket-defer defer></script> <script id="wp-a11y-js-translations"> ( function( domain, translations ) { var localeData = translations.locale_data[ domain ] || translations.locale_data.messages; localeData[""].domain = domain; wp.i18n.setLocaleData( localeData, domain ); } )( "default", {"translation-revision-date":"2026-03-28 16:47:19+0000","generator":"GlotPress\/4.0.3","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"it"},"Notifications":["Notifiche"]}},"comment":{"reference":"wp-includes\/js\/dist\/a11y.js"}} ); //# sourceURL=wp-a11y-js-translations </script> <script src="https://www.railscarma.com/wp-includes/js/dist/a11y.min.js?ver=cb460b4676c94bd228ed" id="wp-a11y-js" data-rocket-defer defer></script> <script id="wp-rich-text-js-translations"> ( function( domain, translations ) { var localeData = translations.locale_data[ domain ] || translations.locale_data.messages; localeData[""].domain = domain; wp.i18n.setLocaleData( localeData, domain ); } )( "default", {"translation-revision-date":"2026-03-28 16:47:19+0000","generator":"GlotPress\/4.0.3","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"it"},"%s applied.":["%s applicato."],"%s removed.":["%s eliminato."]}},"comment":{"reference":"wp-includes\/js\/dist\/rich-text.js"}} ); //# sourceURL=wp-rich-text-js-translations </script> <script src="https://www.railscarma.com/wp-includes/js/dist/rich-text.min.js?ver=5bdbb44f3039529e3645" id="wp-rich-text-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-includes/js/dist/shortcode.min.js?ver=0b3174183b858f2df320" id="wp-shortcode-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-includes/js/dist/warning.min.js?ver=d69bc18c456d01c11d5a" id="wp-warning-js" data-rocket-defer defer></script> <script id="wp-blocks-js-translations"> ( function( domain, translations ) { var localeData = translations.locale_data[ domain ] || translations.locale_data.messages; localeData[""].domain = domain; wp.i18n.setLocaleData( localeData, domain ); } )( "default", {"translation-revision-date":"2026-03-28 16:47:19+0000","generator":"GlotPress\/4.0.3","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"it"},"%1$s Block. Row %2$d":["Blocco %1$s. Riga %2$d"],"Design":["Design"],"%s Block":["Blocco %s"],"%1$s Block. %2$s":["Blocco %1$s. %2$s"],"%1$s Block. Column %2$d":["Blocco %1$s. Colonna %2$d"],"%1$s Block. Column %2$d. %3$s":["Blocco %1$s. Colonna %2$d. %3$s"],"%1$s Block. Row %2$d. %3$s":["Blocco %1$s. Riga %2$d. %3$s"],"Reusable blocks":["Blocchi riutilizzabili"],"Embeds":["Incorporamenti"],"Text":["Testo"],"Widgets":["Widget"],"Theme":["Tema"],"Media":["Media"]}},"comment":{"reference":"wp-includes\/js\/dist\/blocks.js"}} ); //# sourceURL=wp-blocks-js-translations </script> <script src="https://www.railscarma.com/wp-includes/js/dist/blocks.min.js?ver=57eca4d23daac7159d88" id="wp-blocks-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-includes/js/dist/url.min.js?ver=9e178c9516d1222dc834" id="wp-url-js"></script> <script id="wp-api-fetch-js-translations"> ( function( domain, translations ) { var localeData = translations.locale_data[ domain ] || translations.locale_data.messages; localeData[""].domain = domain; wp.i18n.setLocaleData( localeData, domain ); } )( "default", {"translation-revision-date":"2026-03-28 16:47:19+0000","generator":"GlotPress\/4.0.3","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"it"},"Could not get a valid response from the server.":["Impossibile ottenere una risposta valida dal server."],"Unable to connect. Please check your Internet connection.":["Impossibile connettersi. Verifica la connessione a Internet."],"Media upload failed. If this is a photo or a large image, please scale it down and try again.":["Caricamento dei media fallito. Se si tratta di una foto oppure di un'immagine grande, ridimensionala e riprova."],"The response is not a valid JSON response.":["La risposta non \u00e8 una risposta JSON valida."]}},"comment":{"reference":"wp-includes\/js\/dist\/api-fetch.js"}} ); //# sourceURL=wp-api-fetch-js-translations </script> <script src="https://www.railscarma.com/wp-includes/js/dist/api-fetch.min.js?ver=3a4d9af2b423048b0dee" id="wp-api-fetch-js"></script> <script id="wp-api-fetch-js-after"> wp.apiFetch.use( wp.apiFetch.createRootURLMiddleware( "https://www.railscarma.com/it/wp-json/" ) ); wp.apiFetch.nonceMiddleware = wp.apiFetch.createNonceMiddleware( "d528ce73eb" ); wp.apiFetch.use( wp.apiFetch.nonceMiddleware ); wp.apiFetch.use( wp.apiFetch.mediaUploadMiddleware ); wp.apiFetch.nonceEndpoint = "https://www.railscarma.com/wp-admin/admin-ajax.php?action=rest-nonce"; //# sourceURL=wp-api-fetch-js-after </script> <script id="render-block-script-js-extra"> var frontend_global_data = {"base_url":"https://www.railscarma.com","nonce":"d528ce73eb","ajaxurl":"https://www.railscarma.com/wp-admin/admin-ajax.php","rating_nonce":"99501da7de","is_logged_in":"0","isrigister_enabled":"0","is_admin":"false","messages":{"loggedin":"You are already logged in.","register_disable":"Registration is disabled by admin.","admin_note":"To enable anyone can register option please follow the link","admin_url":"https://www.railscarma.com/wp-admin/options-general.php","logo":"\u003Csvg xmlns=\"http://www.w3.org/2000/svg\" data-name=\"Layer 1\" viewBox=\"0 0 382.31 446.56\"\u003E\u003Cdefs\u003E\u003ClinearGradient id=\"a\" x1=\"118.66\" y1=\"270.6\" x2=\"393.33\" y2=\"112.03\" gradientUnits=\"userSpaceOnUse\"\u003E\u003Cstop offset=\"0\" stop-color=\"#2db8b7\"/\u003E\u003Cstop offset=\"1\" stop-color=\"#3062af\"/\u003E\u003C/linearGradient\u003E\u003C/defs\u003E\u003Cpath d=\"M114.75 425.01a2.47 2.47 0 0 0-2-1.69l-9.48-1.38-4.24-8.58a2.58 2.58 0 0 0-4.45 0l-4.24 8.58-9.47 1.34a2.48 2.48 0 0 0-1.37 4.23l6.86 6.67-1.62 9.43a2.48 2.48 0 0 0 3.6 2.62l8.46-4.46 8.47 4.46a2.49 2.49 0 0 0 1.16.29 2.56 2.56 0 0 0 1.46-.47 2.51 2.51 0 0 0 1-2.44l-1.62-9.43 6.86-6.66a2.49 2.49 0 0 0 .63-2.55Zm47.65 0a2.47 2.47 0 0 0-2-1.69l-9.48-1.38-4.25-8.58a2.58 2.58 0 0 0-4.45 0l-4.24 8.58-9.46 1.34a2.48 2.48 0 0 0-1.37 4.23l6.86 6.67-1.62 9.43a2.49 2.49 0 0 0 3.61 2.62l8.45-4.46 8.47 4.46a2.49 2.49 0 0 0 2.62-.18 2.49 2.49 0 0 0 1-2.44l-1.62-9.43 6.86-6.66a2.49 2.49 0 0 0 .63-2.55Zm46.07 0a2.47 2.47 0 0 0-2-1.69l-9.48-1.38-4.24-8.58a2.58 2.58 0 0 0-4.45 0l-4.24 8.58-9.47 1.34a2.49 2.49 0 0 0-2 1.69 2.45 2.45 0 0 0 .63 2.54l6.86 6.67-1.62 9.43a2.48 2.48 0 0 0 3.6 2.62l8.45-4.46 8.48 4.46a2.48 2.48 0 0 0 1.15.29 2.57 2.57 0 0 0 1.47-.47 2.51 2.51 0 0 0 1-2.44l-1.62-9.43 6.86-6.66a2.49 2.49 0 0 0 .63-2.55Zm49.24 0a2.47 2.47 0 0 0-2-1.69l-9.48-1.38-4.24-8.59a2.59 2.59 0 0 0-4.45 0l-4.24 8.59-9.47 1.34a2.48 2.48 0 0 0-1.37 4.23l6.85 6.67-1.61 9.43a2.48 2.48 0 0 0 3.6 2.62l8.45-4.46 8.48 4.46a2.47 2.47 0 0 0 1.15.28 2.48 2.48 0 0 0 2.46-2.9l-1.62-9.43 6.86-6.67a2.47 2.47 0 0 0 .63-2.54Zm45.72 0a2.49 2.49 0 0 0-2-1.69l-9.49-1.38-4.24-8.58a2.58 2.58 0 0 0-4.45 0l-4.24 8.58-9.46 1.34a2.49 2.49 0 0 0-1.37 4.24l6.86 6.66-1.62 9.44a2.48 2.48 0 0 0 3.61 2.61l8.45-4.45 8.47 4.5a2.49 2.49 0 0 0 2.62-.18 2.48 2.48 0 0 0 1-2.43l-1.62-9.44 6.86-6.66a2.49 2.49 0 0 0 .63-2.55Z\" fill=\"#ffb900\"/\u003E\u003Cpath d=\"m7.15 382.41-7.17-30.06h6.21L10.72 373l5.5-20.65h7.22l5.27 21 4.61-21h6.11l-7.28 30.06h-6.44l-6-22.47-6 22.47Zm35.38 0v-30.06h9.74a35.43 35.43 0 0 1 7.22.45 7.92 7.92 0 0 1 4.33 2.94 9.36 9.36 0 0 1 1.74 5.86 9.78 9.78 0 0 1-1 4.65 8.3 8.3 0 0 1-2.56 3 8.67 8.67 0 0 1-3.15 1.42 34.32 34.32 0 0 1-6.29.43h-4v11.34Zm6.07-25v8.53h3.32a15.85 15.85 0 0 0 4.8-.47 4 4 0 0 0 2.59-3.82 3.91 3.91 0 0 0-1-2.71 4.19 4.19 0 0 0-2.44-1.33 28.92 28.92 0 0 0-4.37-.2Zm32.85 25v-30.06h9.74a35.36 35.36 0 0 1 7.22.45 7.85 7.85 0 0 1 4.33 2.94 9.36 9.36 0 0 1 1.74 5.86 9.78 9.78 0 0 1-1 4.65 8.28 8.28 0 0 1-2.55 3 8.82 8.82 0 0 1-3.15 1.42 34.44 34.44 0 0 1-6.3.43h-4v11.34Zm6.07-25v8.53h3.33a15.9 15.9 0 0 0 4.8-.47 4 4 0 0 0 2.58-3.82 3.91 3.91 0 0 0-1-2.71 4.24 4.24 0 0 0-2.45-1.33 28.84 28.84 0 0 0-4.36-.2Zm20.72 10.13a19 19 0 0 1 1.37-7.71 14.1 14.1 0 0 1 2.8-4.13 11.64 11.64 0 0 1 3.89-2.7 16.36 16.36 0 0 1 6.48-1.19q6.65 0 10.63 4.12t4 11.46q0 7.29-4 11.39t-10.58 4.12q-6.71 0-10.67-4.09t-3.9-11.24Zm6.25-.21q0 5.12 2.36 7.74a8.1 8.1 0 0 0 11.95 0q2.35-2.56 2.35-7.79t-2.26-7.71a8.41 8.41 0 0 0-12.07 0c-1.54 1.71-2.31 4.33-2.31 7.79Zm26.11 5.27 5.9-.57a7.23 7.23 0 0 0 2.17 4.37 6.52 6.52 0 0 0 4.4 1.39 6.75 6.75 0 0 0 4.42-1.24 3.68 3.68 0 0 0 1.48-2.9 2.79 2.79 0 0 0-.62-1.82 5 5 0 0 0-2.19-1.3c-.71-.25-2.33-.68-4.86-1.31q-4.87-1.22-6.85-3a7.83 7.83 0 0 1-2.76-6.05 7.69 7.69 0 0 1 1.3-4.29 8.22 8.22 0 0 1 3.75-3 15.18 15.18 0 0 1 5.92-1c3.77 0 6.61.82 8.52 2.48a8.71 8.71 0 0 1 3 6.62l-6.07.27a5.09 5.09 0 0 0-1.67-3.33 6.09 6.09 0 0 0-3.84-1 6.91 6.91 0 0 0-4.15 1.09 2.19 2.19 0 0 0-1 1.86 2.31 2.31 0 0 0 .9 1.83q1.16 1 5.58 2a29.82 29.82 0 0 1 6.55 2.16 8.47 8.47 0 0 1 3.32 3.06 8.94 8.94 0 0 1 1.2 4.79 8.84 8.84 0 0 1-1.43 4.84 8.62 8.62 0 0 1-4.06 3.35 17 17 0 0 1-6.54 1.1c-3.81 0-6.72-.88-8.76-2.64a11.39 11.39 0 0 1-3.59-7.73Zm36.32 9.78v-25H168v-5.09h23.89v5.09h-8.9v25Zm56.11 0h-6.61l-2.62-6.83h-12l-2.48 6.83h-6.44l11.71-30.06h6.42Zm-11.18-11.89-4.14-11.16-4.06 11.16Zm14.36-18.17h6.07v16.28a34.2 34.2 0 0 0 .22 5 4.84 4.84 0 0 0 1.86 3 6.43 6.43 0 0 0 4 1.12 6.06 6.06 0 0 0 3.89-1.06 4.11 4.11 0 0 0 1.58-2.59 33.49 33.49 0 0 0 .27-5.11v-16.61h6.07v15.79a40.46 40.46 0 0 1-.49 7.65 8.47 8.47 0 0 1-1.82 3.77 9 9 0 0 1-3.53 2.45 15.39 15.39 0 0 1-5.79.92 16.68 16.68 0 0 1-6.53-1 9.32 9.32 0 0 1-3.52-2.58 8.26 8.26 0 0 1-1.7-3.33 36.42 36.42 0 0 1-.59-7.63Zm37.14 30.06v-25h-8.9v-5.09h23.89v5.09h-8.9v25Zm18.9 0v-30.03h6.07v11.83h11.9v-11.83h6.07v30.06h-6.07v-13.13h-11.9v13.14Zm29.08-14.84a19 19 0 0 1 1.38-7.71 13.91 13.91 0 0 1 2.8-4.13 11.7 11.7 0 0 1 3.88-2.7 16.43 16.43 0 0 1 6.48-1.19q6.64 0 10.64 4.12t4 11.46q0 7.29-4 11.39t-10.58 4.12q-6.7 0-10.67-4.09t-3.91-11.24Zm6.26-.21q0 5.12 2.36 7.74a7.68 7.68 0 0 0 6 2.64 7.58 7.58 0 0 0 5.95-2.62q2.33-2.61 2.33-7.84c0-3.45-.75-6-2.27-7.71a8.39 8.39 0 0 0-12.06 0c-1.52 1.74-2.29 4.36-2.29 7.82Zm27.66 15.05v-30.03h12.8a21.83 21.83 0 0 1 7 .81 6.88 6.88 0 0 1 3.5 2.88 8.62 8.62 0 0 1 1.31 4.74 8 8 0 0 1-2 5.59 9.55 9.55 0 0 1-5.94 2.78 14.06 14.06 0 0 1 3.25 2.52 34.27 34.27 0 0 1 3.45 4.88l3.67 5.86h-7.26l-4.38-6.54a43.26 43.26 0 0 0-3.2-4.42 4.76 4.76 0 0 0-1.83-1.25 10.14 10.14 0 0 0-3.05-.34h-1.24v12.55Zm6.07-17.35h4.5a23.69 23.69 0 0 0 5.45-.36 3.23 3.23 0 0 0 1.7-1.28 3.9 3.9 0 0 0 .62-2.25 3.6 3.6 0 0 0-.81-2.45 3.7 3.7 0 0 0-2.29-1.18c-.49-.07-2-.1-4.43-.1h-4.74Z\"/\u003E\u003Cpath d=\"M414.61 191.34c0-87.46-71.15-158.62-158.61-158.62S97.39 103.88 97.39 191.34a158.2 158.2 0 0 0 51.48 116.84l-.15.13 5.14 4.34c.34.28.7.51 1 .79 2.73 2.27 5.56 4.42 8.45 6.5q1.4 1 2.82 2 4.62 3.18 9.47 6c.7.42 1.41.82 2.12 1.22q5.31 3 10.84 5.66l.82.37a157.61 157.61 0 0 0 38.36 12.14l1.07.19c4.17.72 8.39 1.3 12.67 1.68l1.56.12c4.26.36 8.56.58 12.92.58s8.58-.22 12.82-.57l1.61-.12q6.3-.57 12.56-1.65l1.08-.2a157.39 157.39 0 0 0 37.82-11.85c.43-.2.88-.39 1.32-.6 4.42-2.09 8.76-4.37 13-6.86q4.67-2.73 9.12-5.77c1.07-.72 2.11-1.49 3.17-2.25 2.53-1.82 5-3.7 7.43-5.67.54-.43 1.12-.81 1.64-1.25l5.28-4.41-.16-.13a158.2 158.2 0 0 0 51.96-117.23Zm-305.69 0c0-81.1 66-147.08 147.08-147.08s147.08 66 147.08 147.08a146.72 146.72 0 0 1-49.54 110 43.4 43.4 0 0 0-5.15-3.1l-48.84-24.41a12.8 12.8 0 0 1-7.1-11.5v-17.11c1.13-1.39 2.32-3 3.56-4.71A117.11 117.11 0 0 0 311.09 211a20.93 20.93 0 0 0 12-19v-20.45a21 21 0 0 0-5.09-13.67V131c.3-3 1.36-19.88-10.86-33.82C296.51 85 279.31 78.86 256 78.86S215.49 85 204.86 97.14C192.64 111.07 193.7 128 194 131v26.92a21 21 0 0 0-5.12 13.66V192a21 21 0 0 0 7.73 16.27 108.46 108.46 0 0 0 17.84 36.85v16.68a12.85 12.85 0 0 1-6.7 11.29L162.14 298a41.76 41.76 0 0 0-4.34 2.75 146.76 146.76 0 0 1-48.88-109.41Z\" transform=\"translate(-64.85 -32.72)\" fill=\"url(#a)\"/\u003E\u003C/svg\u003E"}}; //# sourceURL=render-block-script-js-extra </script> <script data-minify="1" src="https://www.railscarma.com/wp-content/cache/min/1/wp-content/plugins/wp-post-author/assets/dist/awpa_frontend.build.js?ver=1775058247" id="render-block-script-js" data-rocket-defer defer></script> <script data-minify="1" src="https://www.railscarma.com/wp-content/cache/min/1/wp-content/plugins/wp-post-author/assets/dist/single_post_star.build.js?ver=1775058247" id="awpa-single-rating-variation-frontend-js" data-rocket-defer defer></script> <script data-minify="1" src="https://www.railscarma.com/wp-content/cache/min/1/wp-content/plugins/wp-post-author/assets/dist/author_post_star.build.js?ver=1775058247" id="awpa-author-rating-variation-frontend-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-content/plugins/elementor/assets/js/webpack.runtime.min.js?ver=3.34.1" id="elementor-webpack-runtime-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-content/plugins/elementor/assets/js/frontend-modules.min.js?ver=3.34.1" id="elementor-frontend-modules-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-includes/js/jquery/ui/core.min.js?ver=1.13.3" id="jquery-ui-core-js" data-rocket-defer defer></script> <script id="elementor-frontend-js-extra"> var uael_particles_script = {"uael_particles_url":"https://www.railscarma.com/wp-content/plugins/ultimate-elementor/assets/min-js/uael-particles.min.js","particles_url":"https://www.railscarma.com/wp-content/plugins/ultimate-elementor/assets/lib/particles/particles.min.js","snowflakes_image":"https://www.railscarma.com/wp-content/plugins/ultimate-elementor/assets/img/snowflake.svg","gift":"https://www.railscarma.com/wp-content/plugins/ultimate-elementor/assets/img/gift.png","tree":"https://www.railscarma.com/wp-content/plugins/ultimate-elementor/assets/img/tree.png","skull":"https://www.railscarma.com/wp-content/plugins/ultimate-elementor/assets/img/skull.png","ghost":"https://www.railscarma.com/wp-content/plugins/ultimate-elementor/assets/img/ghost.png","moon":"https://www.railscarma.com/wp-content/plugins/ultimate-elementor/assets/img/moon.png","bat":"https://www.railscarma.com/wp-content/plugins/ultimate-elementor/assets/img/bat.png","pumpkin":"https://www.railscarma.com/wp-content/plugins/ultimate-elementor/assets/img/pumpkin.png"}; //# sourceURL=elementor-frontend-js-extra </script> <script id="elementor-frontend-js-before"> var elementorFrontendConfig = {"environmentMode":{"edit":false,"wpPreview":false,"isScriptDebug":false},"i18n":{"shareOnFacebook":"Condividi su Facebook","shareOnTwitter":"Condividi su Twitter","pinIt":"Fissalo","download":"Scaricamento","downloadImage":"Scarica l'immagine","fullscreen":"A schermo intero","zoom":"Ingrandisci","share":"Condividere","playVideo":"Riproduci video","previous":"Precedente","next":"Prossimo","close":"Vicino","a11yCarouselPrevSlideMessage":"Diapositiva precedente","a11yCarouselNextSlideMessage":"Prossima diapositiva","a11yCarouselFirstSlideMessage":"Questa \u00e9 la prima diapositiva","a11yCarouselLastSlideMessage":"Questa \u00e8 l'ultima diapositiva","a11yCarouselPaginationBulletMessage":"Vai alla diapositiva"},"is_rtl":false,"breakpoints":{"xs":0,"sm":480,"md":768,"lg":1025,"xl":1440,"xxl":1600},"responsive":{"breakpoints":{"mobile":{"label":"Mobile Portrait","value":767,"default_value":767,"direction":"max","is_enabled":true},"mobile_extra":{"label":"Mobile Landscape","value":880,"default_value":880,"direction":"max","is_enabled":false},"tablet":{"label":"Tablet verticale","value":1024,"default_value":1024,"direction":"max","is_enabled":true},"tablet_extra":{"label":"Tablet orizzontale","value":1200,"default_value":1200,"direction":"max","is_enabled":false},"laptop":{"label":"Laptop","value":1366,"default_value":1366,"direction":"max","is_enabled":false},"widescreen":{"label":"Widescreen","value":2400,"default_value":2400,"direction":"min","is_enabled":false}},"hasCustomBreakpoints":false},"version":"3.34.1","is_static":false,"experimentalFeatures":{"additional_custom_breakpoints":true,"theme_builder_v2":true,"home_screen":true,"global_classes_should_enforce_capabilities":true,"e_variables":true,"cloud-library":true,"e_opt_in_v4_page":true,"e_interactions":true,"import-export-customization":true,"e_pro_variables":true},"urls":{"assets":"https:\/\/www.railscarma.com\/wp-content\/plugins\/elementor\/assets\/","ajaxurl":"https:\/\/www.railscarma.com\/wp-admin\/admin-ajax.php","uploadUrl":"https:\/\/www.railscarma.com\/wp-content\/uploads"},"nonces":{"floatingButtonsClickTracking":"db7e5ba8f0"},"swiperClass":"swiper","settings":{"page":[],"editorPreferences":[]},"kit":{"active_breakpoints":["viewport_mobile","viewport_tablet"],"global_image_lightbox":"yes","lightbox_enable_counter":"yes","lightbox_enable_fullscreen":"yes","lightbox_enable_zoom":"yes","lightbox_enable_share":"yes","lightbox_title_src":"title","lightbox_description_src":"description"},"post":{"id":7611,"title":"Learning%20the%20Fundamentals%20of%20Nokogiri%20Gem%20-%20RailsCarma%20-%20Ruby%20on%20Rails%20Development%20Company%20specializing%20in%20Offshore%20Development","excerpt":"","featuredImage":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/01\/nokogiri.png"}}; //# sourceURL=elementor-frontend-js-before </script> <script src="https://www.railscarma.com/wp-content/plugins/elementor/assets/js/frontend.min.js?ver=3.34.1" id="elementor-frontend-js" data-rocket-defer defer></script> <script id="elementor-frontend-js-after">window.addEventListener('DOMContentLoaded', function() { window.scope_array = []; window.backend = 0; jQuery.cachedScript = function( url, options ) { // Allow user to set any option except for dataType, cache, and url. options = jQuery.extend( options || {}, { dataType: "script", cache: true, url: url }); // Return the jqXHR object so we can chain callbacks. return jQuery.ajax( options ); }; jQuery( window ).on( "elementor/frontend/init", function() { elementorFrontend.hooks.addAction( "frontend/element_ready/global", function( $scope, $ ){ if ( "undefined" == typeof $scope ) { return; } if ( $scope.hasClass( "uael-particle-yes" ) ) { window.scope_array.push( $scope ); $scope.find(".uael-particle-wrapper").addClass("js-is-enabled"); }else{ return; } if(elementorFrontend.isEditMode() && $scope.find(".uael-particle-wrapper").hasClass("js-is-enabled") && window.backend == 0 ){ var uael_url = uael_particles_script.uael_particles_url; jQuery.cachedScript( uael_url ); window.backend = 1; }else if(elementorFrontend.isEditMode()){ var uael_url = uael_particles_script.uael_particles_url; jQuery.cachedScript( uael_url ).done(function(){ var flag = true; }); } }); }); jQuery( document ).on( "ready elementor/popup/show", () => { if ( jQuery.find( ".uael-particle-yes" ).length < 1 ) { return; } var uael_url = uael_particles_script.uael_particles_url; jQuery.cachedScript = function( url, options ) { // Allow user to set any option except for dataType, cache, and url. options = jQuery.extend( options || {}, { dataType: "script", cache: true, url: url }); // Return the jqXHR object so we can chain callbacks. return jQuery.ajax( options ); }; jQuery.cachedScript( uael_url ); }); //# sourceURL=elementor-frontend-js-after });</script> <script src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit" id="cfturnstile-js" data-wp-strategy="defer" data-rocket-defer defer></script> <script id="cfturnstile-elementor-forms-js-extra"> var cfturnstileElementorSettings = {"sitekey":"0x4AAAAAAA8O8LOU5wYs5L-c","position":"before","align":"left","theme":"light","mode":"turnstile","recaptchaSiteKey":""}; //# sourceURL=cfturnstile-elementor-forms-js-extra </script> <script src="https://www.railscarma.com/wp-content/plugins/simple-cloudflare-turnstile/js/integrations/elementor-forms.js?ver=2.5" id="cfturnstile-elementor-forms-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-content/plugins/related-post//assets/front/js/owl.carousel.min.js?ver=6.9.4" id="owl.carousel-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-content/plugins/elementor-pro/assets/js/webpack-pro.runtime.min.js?ver=3.34.0" id="elementor-pro-webpack-runtime-js" data-rocket-defer defer></script> <script id="elementor-pro-frontend-js-before"> var ElementorProFrontendConfig = {"ajaxurl":"https:\/\/www.railscarma.com\/wp-admin\/admin-ajax.php","nonce":"ac018e1498","urls":{"assets":"https:\/\/www.railscarma.com\/wp-content\/plugins\/elementor-pro\/assets\/","rest":"https:\/\/www.railscarma.com\/it\/wp-json\/"},"settings":{"lazy_load_background_images":false},"popup":{"hasPopUps":false},"shareButtonsNetworks":{"facebook":{"title":"Facebook","has_counter":true},"twitter":{"title":"Twitter"},"linkedin":{"title":"LinkedIn","has_counter":true},"pinterest":{"title":"Pinterest","has_counter":true},"reddit":{"title":"Reddit","has_counter":true},"vk":{"title":"VK","has_counter":true},"odnoklassniki":{"title":"OK","has_counter":true},"tumblr":{"title":"Tumblr"},"digg":{"title":"Digg"},"skype":{"title":"Skype"},"stumbleupon":{"title":"StumbleUpon","has_counter":true},"mix":{"title":"Mix"},"telegram":{"title":"Telegram"},"pocket":{"title":"Pocket","has_counter":true},"xing":{"title":"XING","has_counter":true},"whatsapp":{"title":"WhatsApp"},"email":{"title":"Email"},"print":{"title":"Print"},"x-twitter":{"title":"X"},"threads":{"title":"Threads"}},"facebook_sdk":{"lang":"it_IT","app_id":""},"lottie":{"defaultAnimationUrl":"https:\/\/www.railscarma.com\/wp-content\/plugins\/elementor-pro\/modules\/lottie\/assets\/animations\/default.json"}}; //# sourceURL=elementor-pro-frontend-js-before </script> <script src="https://www.railscarma.com/wp-content/plugins/elementor-pro/assets/js/frontend.min.js?ver=3.34.0" id="elementor-pro-frontend-js" data-rocket-defer defer></script> <script src="https://www.railscarma.com/wp-content/plugins/elementor-pro/assets/js/elements-handlers.min.js?ver=3.34.0" id="pro-elements-handlers-js" data-rocket-defer defer></script> <script> /(trident|msie)/i.test(navigator.userAgent)&&document.getElementById&&window.addEventListener&&window.addEventListener("hashchange",function(){var t,e=location.hash.substring(1);/^[A-z0-9_-]+$/.test(e)&&(t=document.getElementById(e))&&(/^(?:a|select|input|button|textarea)$/i.test(t.tagName)||(t.tabIndex=-1),t.focus())},!1); </script> <script>window.lazyLoadOptions=[{elements_selector:"img[data-lazy-src],.rocket-lazyload,iframe[data-lazy-src]",data_src:"lazy-src",data_srcset:"lazy-srcset",data_sizes:"lazy-sizes",class_loading:"lazyloading",class_loaded:"lazyloaded",threshold:300,callback_loaded:function(element){if(element.tagName==="IFRAME"&&element.dataset.rocketLazyload=="fitvidscompatible"){if(element.classList.contains("lazyloaded")){if(typeof window.jQuery!="undefined"){if(jQuery.fn.fitVids){jQuery(element).parent().fitVids()}}}}}},{elements_selector:".rocket-lazyload",data_src:"lazy-src",data_srcset:"lazy-srcset",data_sizes:"lazy-sizes",class_loading:"lazyloading",class_loaded:"lazyloaded",threshold:300,}];window.addEventListener('LazyLoad::Initialized',function(e){var lazyLoadInstance=e.detail.instance;if(window.MutationObserver){var observer=new MutationObserver(function(mutations){var image_count=0;var iframe_count=0;var rocketlazy_count=0;mutations.forEach(function(mutation){for(var i=0;i<mutation.addedNodes.length;i++){if(typeof mutation.addedNodes[i].getElementsByTagName!=='function'){continue} if(typeof mutation.addedNodes[i].getElementsByClassName!=='function'){continue} images=mutation.addedNodes[i].getElementsByTagName('img');is_image=mutation.addedNodes[i].tagName=="IMG";iframes=mutation.addedNodes[i].getElementsByTagName('iframe');is_iframe=mutation.addedNodes[i].tagName=="IFRAME";rocket_lazy=mutation.addedNodes[i].getElementsByClassName('rocket-lazyload');image_count+=images.length;iframe_count+=iframes.length;rocketlazy_count+=rocket_lazy.length;if(is_image){image_count+=1} if(is_iframe){iframe_count+=1}}});if(image_count>0||iframe_count>0||rocketlazy_count>0){lazyLoadInstance.update()}});var b=document.getElementsByTagName("body")[0];var config={childList:!0,subtree:!0};observer.observe(b,config)}},!1)</script><script data-no-minify="1" async src="https://www.railscarma.com/wp-content/plugins/wp-rocket/assets/js/lazyload/17.8.3/lazyload.min.js"></script> <script>var rocket_beacon_data = {"ajax_url":"https:\/\/www.railscarma.com\/wp-admin\/admin-ajax.php","nonce":"e08d7cb6e2","url":"https:\/\/www.railscarma.com\/it\/blog\/technical-articles\/learning-the-fundamentals-of-nokogiri-gem","is_mobile":false,"width_threshold":1600,"height_threshold":700,"delay":500,"debug":null,"status":{"atf":true,"lrc":true,"preload_fonts":true,"preconnect_external_domain":true},"elements":"img, video, picture, p, main, div, li, svg, section, header, span","lrc_threshold":1800,"preload_fonts_exclusions":["api.fontshare.com","cdn.fontshare.com"],"processed_extensions":["woff2","woff","ttf"],"external_font_exclusions":[],"preconnect_external_domain_elements":["link","script","iframe"],"preconnect_external_domain_exclusions":["static.cloudflareinsights.com","rel=\"profile\"","rel=\"preconnect\"","rel=\"dns-prefetch\"","rel=\"icon\""]}</script><script data-name="wpr-wpr-beacon" src='https://www.railscarma.com/wp-content/plugins/wp-rocket/assets/js/wpr-beacon.min.js' async></script><script>"use strict";function wprRemoveCPCSS(){var preload_stylesheets=document.querySelectorAll('link[data-rocket-async="style"][rel="preload"]');if(preload_stylesheets&&0<preload_stylesheets.length)for(var stylesheet_index=0;stylesheet_index<preload_stylesheets.length;stylesheet_index++){var media=preload_stylesheets[stylesheet_index].getAttribute("media")||"all";if(window.matchMedia(media).matches)return void setTimeout(wprRemoveCPCSS,200)}var elem=document.getElementById("rocket-critical-css");elem&&"remove"in elem&&elem.remove()}window.addEventListener?window.addEventListener("load",wprRemoveCPCSS):window.attachEvent&&window.attachEvent("onload",wprRemoveCPCSS);</script><noscript><link data-minify="1" rel='stylesheet' id='wpauthor-blocks-fontawesome-front-css' href='https://www.railscarma.com/wp-content/cache/min/1/wp-content/plugins/wp-post-author/assets/fontawesome/css/all.css?ver=1775058247' media='all' /><link data-minify="1" rel='stylesheet' id='wpauthor-frontend-block-style-css-css' href='https://www.railscarma.com/wp-content/cache/min/1/wp-content/plugins/wp-post-author/assets/dist/blocks.style.build.css?ver=1775058247' media='all' /><link rel='stylesheet' id='wp-block-library-css' href='https://www.railscarma.com/wp-includes/css/dist/block-library/style.min.css?ver=6.9.4' media='all' /><link rel='stylesheet' id='astra-theme-css-css' href='https://www.railscarma.com/wp-content/themes/astra/assets/css/minified/style.min.css?ver=2.5.5' media='all' /><link data-minify="1" rel='stylesheet' id='ht_ctc_main_css-css' href='https://www.railscarma.com/wp-content/cache/min/1/wp-content/plugins/click-to-chat-for-whatsapp/new/inc/assets/css/main.css?ver=1775058247' media='all' /><link data-minify="1" rel='stylesheet' id='cookie-law-info-css' href='https://www.railscarma.com/wp-content/cache/min/1/wp-content/plugins/cookie-law-info/legacy/public/css/cookie-law-info-public.css?ver=1775058247' media='all' /><link data-minify="1" rel='stylesheet' id='cookie-law-info-gdpr-css' href='https://www.railscarma.com/wp-content/cache/min/1/wp-content/plugins/cookie-law-info/legacy/public/css/cookie-law-info-gdpr.css?ver=1775058247' media='all' /><link data-minify="1" rel='stylesheet' id='trp-floater-language-switcher-style-css' href='https://www.railscarma.com/wp-content/cache/min/1/wp-content/plugins/translatepress-multilingual/assets/css/trp-floater-language-switcher.css?ver=1775058247' media='all' /><link data-minify="1" rel='stylesheet' id='trp-language-switcher-style-css' href='https://www.railscarma.com/wp-content/cache/background-css/1/www.railscarma.com/wp-content/cache/min/1/wp-content/plugins/translatepress-multilingual/assets/css/trp-language-switcher.css?ver=1775058247&wpr_t=1775081309' media='all' /><link data-minify="1" rel='stylesheet' id='trp-popup-style-css' href='https://www.railscarma.com/wp-content/cache/min/1/wp-content/plugins/translatepress-developer/add-ons-pro/automatic-language-detection/assets/css/trp-popup.css?ver=1775058247' media='all' /><link data-minify="1" rel='stylesheet' id='astra-addon-css-css' href='https://www.railscarma.com/wp-content/cache/min/1/wp-content/uploads/astra-addon/astra-addon-69561ecc8be130-66870698.css?ver=1775058247' media='all' /><link rel='stylesheet' id='elementor-frontend-css' href='https://www.railscarma.com/wp-content/plugins/elementor/assets/css/frontend.min.css?ver=3.34.1' media='all' /><link rel='stylesheet' id='elementor-post-2064-css' href='https://www.railscarma.com/wp-content/uploads/elementor/css/post-2064.css?ver=1775055007' media='all' /><link rel='stylesheet' id='elementor-post-40959-css' href='https://www.railscarma.com/wp-content/uploads/elementor/css/post-40959.css?ver=1775055007' media='all' /><link rel='stylesheet' id='elementor-post-2059-css' href='https://www.railscarma.com/wp-content/uploads/elementor/css/post-2059.css?ver=1775055007' media='all' /><link rel='stylesheet' id='elementor-post-2076-css' href='https://www.railscarma.com/wp-content/uploads/elementor/css/post-2076.css?ver=1775055007' media='all' /><link data-minify="1" rel='stylesheet' id='awpa-wp-post-author-styles-css' href='https://www.railscarma.com/wp-content/cache/min/1/wp-content/plugins/wp-post-author/assets/css/awpa-frontend-style.css?ver=1775058247' media='all' /><link rel='stylesheet' id='astra-child-theme-css-css' href='https://www.railscarma.com/wp-content/themes/astra-child/style.css?ver=1.0.0' media='all' /><link data-minify="1" rel='stylesheet' id='elementor-icons-css' href='https://www.railscarma.com/wp-content/cache/min/1/wp-content/plugins/elementor/assets/lib/eicons/css/elementor-icons.min.css?ver=1775058247' media='all' /><link rel='stylesheet' id='elementor-post-21-css' href='https://www.railscarma.com/wp-content/uploads/elementor/css/post-21.css?ver=1775055007' media='all' /><link rel='stylesheet' id='uael-frontend-css' href='https://www.railscarma.com/wp-content/plugins/ultimate-elementor/assets/min-css/uael-frontend.min.css?ver=1.36.11' media='all' /><link rel='stylesheet' id='widget-heading-css' href='https://www.railscarma.com/wp-content/plugins/elementor/assets/css/widget-heading.min.css?ver=3.34.1' media='all' /><link rel='stylesheet' id='elementor-post-7611-css' href='https://www.railscarma.com/wp-content/uploads/elementor/css/post-7611.css?ver=1775057488' media='all' /><link data-minify="1" rel='stylesheet' id='sib-front-css-css' href='https://www.railscarma.com/wp-content/cache/background-css/1/www.railscarma.com/wp-content/cache/min/1/wp-content/plugins/mailin/css/mailin-front.css?ver=1775058247&wpr_t=1775081309' media='all' /><link rel='stylesheet' id='elementor-icons-shared-0-css' href='https://www.railscarma.com/wp-content/plugins/elementor/assets/lib/font-awesome/css/fontawesome.min.css?ver=5.15.3' media='all' /><link data-minify="1" rel='stylesheet' id='elementor-icons-fa-solid-css' href='https://www.railscarma.com/wp-content/cache/min/1/wp-content/plugins/elementor/assets/lib/font-awesome/css/solid.min.css?ver=1775058247' media='all' /><link data-minify="1" rel='stylesheet' id='elementor-icons-fa-regular-css' href='https://www.railscarma.com/wp-content/cache/min/1/wp-content/plugins/elementor/assets/lib/font-awesome/css/regular.min.css?ver=1775058247' media='all' /><link data-minify="1" rel="stylesheet" href="https://www.railscarma.com/wp-content/cache/min/1/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css?ver=1775058246"><link data-minify="1" href="https://www.railscarma.com/wp-content/cache/min/1/widget-awards/css/diamond.min.css?ver=1775058246" rel="stylesheet"><link rel='stylesheet' id='widget-icon-list-css' href='https://www.railscarma.com/wp-content/plugins/elementor/assets/css/widget-icon-list.min.css?ver=3.34.1' media='all' /><link rel='stylesheet' id='widget-image-css' href='https://www.railscarma.com/wp-content/plugins/elementor/assets/css/widget-image.min.css?ver=3.34.1' media='all' /><link rel='stylesheet' id='widget-testimonial-css' href='https://www.railscarma.com/wp-content/plugins/elementor/assets/css/widget-testimonial.min.css?ver=3.34.1' media='all' /><link rel='stylesheet' id='owl.carousel-css' href='https://www.railscarma.com/wp-content/cache/background-css/1/www.railscarma.com/wp-content/plugins/related-post/assets/front/css/owl.carousel.min.css?ver=6.9.4&wpr_t=1775081309' media='all' /><link data-minify="1" rel='stylesheet' id='related-post-css' href='https://www.railscarma.com/wp-content/cache/min/1/wp-content/plugins/related-post/assets/front/css/related-post.css?ver=1775058258' media='all' /><link data-minify="1" rel='stylesheet' id='cookie-law-info-table-css' href='https://www.railscarma.com/wp-content/cache/background-css/1/www.railscarma.com/wp-content/cache/min/1/wp-content/plugins/cookie-law-info/legacy/public/css/cookie-law-info-table.css?ver=1775058246&wpr_t=1775081309' media='all' /></noscript></body> </html> <!-- This website is like a Rocket, isn't it? Performance optimized by WP Rocket. Learn more: https://wp-rocket.me - Debug: cached@1775081309 -->