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"> 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 src="https://www.railscarma.com/wp-includes/images/spinner.gif" alt="caricatore"></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="af015cdad5"> <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="Charts in Rails" href="https://www.railscarma.com/it/blog/technical-articles/grafici-su-rotaie/?related_post_from=6417"> <picture decoding="async" class="attachment-full size-full wp-post-image"> <source type="image/webp" srcset="https://www.railscarma.com/wp-content/uploads/2010/01/Charts-in-Rails.jpg.webp 800w, https://www.railscarma.com/wp-content/uploads/2010/01/Charts-in-Rails-300x113.jpg.webp 300w, https://www.railscarma.com/wp-content/uploads/2010/01/Charts-in-Rails-768x288.jpg.webp 768w" sizes="(max-width: 800px) 100vw, 800px"/> <img decoding="async" width="800" height="300" src="https://www.railscarma.com/wp-content/uploads/2010/01/Charts-in-Rails.jpg" alt="" srcset="https://www.railscarma.com/wp-content/uploads/2010/01/Charts-in-Rails.jpg 800w, https://www.railscarma.com/wp-content/uploads/2010/01/Charts-in-Rails-300x113.jpg 300w, https://www.railscarma.com/wp-content/uploads/2010/01/Charts-in-Rails-768x288.jpg 768w" sizes="(max-width: 800px) 100vw, 800px"/> </picture> </a> </div> <a class="title post_title" title="Charts in Rails" href="https://www.railscarma.com/it/blog/technical-articles/grafici-su-rotaie/?related_post_from=6417"> Grafici in Rails </a> </div> <div class="item"> <div class="thumb post_thumb"> <a title="Deploying Rails Application using Capistrano and Phusion Passenger" href="https://www.railscarma.com/it/blog/technical-articles/deploying-rails-application-using-capistrano-and-phusion-passenger/?related_post_from=6418"> <picture loading="lazy" decoding="async" class="attachment-full size-full wp-post-image"> <source type="image/webp" srcset="https://www.railscarma.com/wp-content/uploads/2010/01/Deploying-Rails-Application-using-Capistrano-and-Phusion-Passenger.jpg.webp 800w, https://www.railscarma.com/wp-content/uploads/2010/01/Deploying-Rails-Application-using-Capistrano-and-Phusion-Passenger-300x113.jpg.webp 300w, https://www.railscarma.com/wp-content/uploads/2010/01/Deploying-Rails-Application-using-Capistrano-and-Phusion-Passenger-768x288.jpg.webp 768w" sizes="auto, (max-width: 800px) 100vw, 800px"/> <img loading="lazy" decoding="async" width="800" height="300" src="https://www.railscarma.com/wp-content/uploads/2010/01/Deploying-Rails-Application-using-Capistrano-and-Phusion-Passenger.jpg" alt="" srcset="https://www.railscarma.com/wp-content/uploads/2010/01/Deploying-Rails-Application-using-Capistrano-and-Phusion-Passenger.jpg 800w, https://www.railscarma.com/wp-content/uploads/2010/01/Deploying-Rails-Application-using-Capistrano-and-Phusion-Passenger-300x113.jpg 300w, https://www.railscarma.com/wp-content/uploads/2010/01/Deploying-Rails-Application-using-Capistrano-and-Phusion-Passenger-768x288.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px"/> </picture> </a> </div> <a class="title post_title" title="Deploying Rails Application using Capistrano and Phusion Passenger" href="https://www.railscarma.com/it/blog/technical-articles/deploying-rails-application-using-capistrano-and-phusion-passenger/?related_post_from=6418"> Deploying Rails Application using Capistrano and Phusion Passenger </a> </div> <div class="item"> <div class="thumb post_thumb"> <a title="Behavior Driven Development(BDD)/Cucumber" href="https://www.railscarma.com/it/blog/technical-articles/behavior-driven-developmentbddcucumber/?related_post_from=6419"> <picture loading="lazy" decoding="async" class="attachment-full size-full wp-post-image"> <source type="image/webp" srcset="https://www.railscarma.com/wp-content/uploads/2010/01/Behavior-Driven-Development-1.jpg.webp 800w, https://www.railscarma.com/wp-content/uploads/2010/01/Behavior-Driven-Development-1-300x113.jpg.webp 300w, https://www.railscarma.com/wp-content/uploads/2010/01/Behavior-Driven-Development-1-768x288.jpg.webp 768w" sizes="auto, (max-width: 800px) 100vw, 800px"/> <img loading="lazy" decoding="async" width="800" height="300" src="https://www.railscarma.com/wp-content/uploads/2010/01/Behavior-Driven-Development-1.jpg" alt="" srcset="https://www.railscarma.com/wp-content/uploads/2010/01/Behavior-Driven-Development-1.jpg 800w, https://www.railscarma.com/wp-content/uploads/2010/01/Behavior-Driven-Development-1-300x113.jpg 300w, https://www.railscarma.com/wp-content/uploads/2010/01/Behavior-Driven-Development-1-768x288.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px"/> </picture> </a> </div> <a class="title post_title" title="Behavior Driven Development(BDD)/Cucumber" href="https://www.railscarma.com/it/blog/technical-articles/behavior-driven-developmentbddcucumber/?related_post_from=6419"> Behavior Driven Development(BDD)/Cucumber </a> </div> <div class="item"> <div class="thumb post_thumb"> <a title="HAML: HTML Abstraction Markup Language" href="https://www.railscarma.com/it/blog/technical-articles/linguaggio-di-markup-di-astrazione-haml-html/?related_post_from=2291"> <picture loading="lazy" decoding="async" class="attachment-full size-full wp-post-image"> <source type="image/webp" srcset="https://www.railscarma.com/wp-content/uploads/2010/01/HTML-Abstraction-Markup-Language.jpg.webp 800w, https://www.railscarma.com/wp-content/uploads/2010/01/HTML-Abstraction-Markup-Language-300x113.jpg.webp 300w, https://www.railscarma.com/wp-content/uploads/2010/01/HTML-Abstraction-Markup-Language-768x288.jpg.webp 768w" sizes="auto, (max-width: 800px) 100vw, 800px"/> <img loading="lazy" decoding="async" width="800" height="300" src="https://www.railscarma.com/wp-content/uploads/2010/01/HTML-Abstraction-Markup-Language.jpg" alt="" srcset="https://www.railscarma.com/wp-content/uploads/2010/01/HTML-Abstraction-Markup-Language.jpg 800w, https://www.railscarma.com/wp-content/uploads/2010/01/HTML-Abstraction-Markup-Language-300x113.jpg 300w, https://www.railscarma.com/wp-content/uploads/2010/01/HTML-Abstraction-Markup-Language-768x288.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px"/> </picture> </a> </div> <a class="title post_title" title="HAML: HTML Abstraction Markup Language" href="https://www.railscarma.com/it/blog/technical-articles/linguaggio-di-markup-di-astrazione-haml-html/?related_post_from=2291"> HAML: linguaggio di markup di astrazione HTML </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> 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='https://secure.gravatar.com/avatar/6f0c15f10be4ef691ca9b9cd5acde243?s=150&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/6f0c15f10be4ef691ca9b9cd5acde243?s=300&d=mm&r=g 2x' class='avatar avatar-150 photo' height='150' width='150' /></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="Navigazione articoli" data-no-translation-aria-label=""> <span class="screen-reader-text" data-no-translation="" data-trp-gettext="">Navigazione articoli</span> <div class="nav-links"><div class="nav-previous"><a title="Impaginazione in Rails Con la gemma will_paginate" href="https://www.railscarma.com/it/blog/technical-articles/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 title="Protect Your Web Application with Google reCaptcha on Ruby on Rails" href="https://www.railscarma.com/it/blog/technical-articles/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 comment-form-position-below"> <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"><legend class ="comment-form-legend"></legend><div class="comment-form-textarea ast-grid-common-col"><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-grid-common-col ast-width-lg-33 ast-width-md-4 ast-float"><label for="author" class="screen-reader-text">Nome*</label><input id="author" name="author" type="text" value="" placeholder="Nome*" size="30" aria-required='true' autocomplete="name" data-no-translation-placeholder="" /></p> <p class="comment-form-email ast-grid-common-col ast-width-lg-33 ast-width-md-4 ast-float"><label for="email" class="screen-reader-text">Email*</label><input id="email" name="email" type="text" value="" placeholder="Email*" size="30" aria-required='true' autocomplete="email" data-no-translation-placeholder="" /></p> <p class="comment-form-url ast-grid-common-col ast-width-lg-33 ast-width-md-4 ast-float"><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" autocomplete="url" 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> <p class="form-submit"><input name="submit" type="submit" id="submit" class="submit" value="Posta un commento "" data-no-translation-value="" /> <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" 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"> 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 src="https://www.railscarma.com/wp-includes/images/spinner.gif" alt="caricatore"></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="af015cdad5"> <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/uncategorized/test/">test</a> </li> <li> <a href="https://www.railscarma.com/it/blog/understanding-rubys-sort_by-method-a-beginners-guide/">Understanding Ruby’s sort_by Method: A Beginner’s Guide</a> </li> <li> <a href="https://www.railscarma.com/it/blog/top-10-machine-learning-algorithms-to-know/">Top 10 Machine Learning Algorithms to Know in 2025</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/management/">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/industry-insights/">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/mobile-app/">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/news/">Notizia</a> </li> <li class="cat-item cat-item-455"><a href="https://www.railscarma.com/it/categoria/blog/rails-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/technical-articles/">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="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" loading="lazy" /></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 --> <div data-elementor-type="footer" data-elementor-id="39418" class="elementor elementor-39418 elementor-location-footer" data-elementor-post-type="elementor_library"> <section class="elementor-section elementor-top-section elementor-element elementor-element-d806df7 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="d806df7" data-element_type="section"> <div class="elementor-background-overlay"></div> <div class="elementor-container elementor-column-gap-default"> <div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-13911d5" data-id="13911d5" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <section class="elementor-section elementor-inner-section elementor-element elementor-element-f4f8702 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="f4f8702" data-element_type="section"> <div class="elementor-container elementor-column-gap-default"> <div class="elementor-column elementor-col-25 elementor-inner-column elementor-element elementor-element-b67620e" data-id="b67620e" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-0b71aff elementor-widget elementor-widget-heading" data-id="0b71aff" data-element_type="widget" data-widget_type="heading.default"> <div class="elementor-widget-container"> <h2 class="elementor-heading-title elementor-size-default">Navigazione rapida </h2> </div> </div> <div class="elementor-element elementor-element-11b0e91 elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="11b0e91" data-element_type="widget" data-widget_type="divider.default"> <div class="elementor-widget-container"> <div class="elementor-divider"> <span class="elementor-divider-separator"> </span> </div> </div> </div> <div class="elementor-element elementor-element-0e7934e elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list" data-id="0e7934e" data-element_type="widget" data-widget_type="icon-list.default"> <div class="elementor-widget-container"> <ul class="elementor-icon-list-items"> <li class="elementor-icon-list-item"> <a href="/it/chi-siamo/"> <span class="elementor-icon-list-text">Chi siamo</span> </a> </li> <li class="elementor-icon-list-item"> <a href="/it/why-us/"> <span class="elementor-icon-list-text">Perché noi</span> </a> </li> <li class="elementor-icon-list-item"> <a href="/it/our-team/"> <span class="elementor-icon-list-text">La nostra squadra</span> </a> </li> <li class="elementor-icon-list-item"> <a href="/it/careers/"> <span class="elementor-icon-list-text">Carriere</span> </a> </li> <li class="elementor-icon-list-item"> <a href="/it/our-development-workflow/"> <span class="elementor-icon-list-text">Flusso di lavoro di sviluppo</span> </a> </li> <li class="elementor-icon-list-item"> <a href="/it/technology-stack/"> <span class="elementor-icon-list-text">Pila tecnologica</span> </a> </li> <li class="elementor-icon-list-item"> <a href="/it/agile-rails-methodology/"> <span class="elementor-icon-list-text">Metodologia di sviluppo agile</span> </a> </li> <li class="elementor-icon-list-item"> <a href="/it/portafoglio/"> <span class="elementor-icon-list-text">Portafoglio</span> </a> </li> <li class="elementor-icon-list-item"> <a href="/it/casestudies/"> <span class="elementor-icon-list-text">Casi studio</span> </a> </li> <li class="elementor-icon-list-item"> <a href="/it/blog/"> <span class="elementor-icon-list-text">Blog</span> </a> </li> </ul> </div> </div> </div> </div> <div class="elementor-column elementor-col-25 elementor-inner-column elementor-element elementor-element-9a4502b" data-id="9a4502b" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-3c56020 elementor-widget elementor-widget-heading" data-id="3c56020" data-element_type="widget" data-widget_type="heading.default"> <div class="elementor-widget-container"> <h2 class="elementor-heading-title elementor-size-default">I nostri servizi </h2> </div> </div> <div class="elementor-element elementor-element-c754532 elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="c754532" data-element_type="widget" data-widget_type="divider.default"> <div class="elementor-widget-container"> <div class="elementor-divider"> <span class="elementor-divider-separator"> </span> </div> </div> </div> <div class="elementor-element elementor-element-1aa4540 elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list" data-id="1aa4540" data-element_type="widget" data-widget_type="icon-list.default"> <div class="elementor-widget-container"> <ul class="elementor-icon-list-items"> <li class="elementor-icon-list-item"> <a href="/it/ruby-on-rails-consulting/"> <span class="elementor-icon-list-text">Consulenza Ruby On Rails</span> </a> </li> <li class="elementor-icon-list-item"> <a href="/it/sviluppo-di-applicazioni-mobili/"> <span class="elementor-icon-list-text">Sviluppo di app mobili</span> </a> </li> <li class="elementor-icon-list-item"> <a href="/it/assumere-ruby-on-rails-sviluppatore/"> <span class="elementor-icon-list-text">Assumi uno sviluppatore Ruby on Rails</span> </a> </li> <li class="elementor-icon-list-item"> <a href="/it/product-development-services/"> <span class="elementor-icon-list-text">Servizi di sviluppo prodotto</span> </a> </li> <li class="elementor-icon-list-item"> <a href="/it/sviluppo-commerciale-spree/"> <span class="elementor-icon-list-text">Sviluppo del commercio sfrenato</span> </a> </li> <li class="elementor-icon-list-item"> <a href="/it/saas-application-development/"> <span class="elementor-icon-list-text">Sviluppo di applicazioni SaaS</span> </a> </li> <li class="elementor-icon-list-item"> <a href="/it/sviluppo-di-applicazioni-per-binari-personalizzati/"> <span class="elementor-icon-list-text">Sviluppo di applicazioni ROR</span> </a> </li> <li class="elementor-icon-list-item"> <a href="/it/mvp-development/"> <span class="elementor-icon-list-text">Sviluppo MVP</span> </a> </li> </ul> </div> </div> </div> </div> <div class="elementor-column elementor-col-25 elementor-inner-column elementor-element elementor-element-b4446e7" data-id="b4446e7" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-a8da770 elementor-widget elementor-widget-spacer" data-id="a8da770" data-element_type="widget" data-widget_type="spacer.default"> <div class="elementor-widget-container"> <div class="elementor-spacer"> <div class="elementor-spacer-inner"></div> </div> </div> </div> <div class="elementor-element elementor-element-b3490da elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list" data-id="b3490da" data-element_type="widget" data-widget_type="icon-list.default"> <div class="elementor-widget-container"> <ul class="elementor-icon-list-items"> <li class="elementor-icon-list-item"> <a href="/it/devops-services/"> <span class="elementor-icon-list-text">Servizio DevOps</span> </a> </li> <li class="elementor-icon-list-item"> <a href="/it/cloud-hosting-and-migration/"> <span class="elementor-icon-list-text">Hosting e migrazione nel cloud</span> </a> </li> <li class="elementor-icon-list-item"> <a href="/it/api-driven-development-and-mashups/"> <span class="elementor-icon-list-text">Sviluppo basato su API</span> </a> </li> <li class="elementor-icon-list-item"> <a href="/it/rails-upgrade-service-provider/"> <span class="elementor-icon-list-text">Servizio di aggiornamento delle rotaie</span> </a> </li> <li class="elementor-icon-list-item"> <a href="/it/application-support-and-maintenance/"> <span class="elementor-icon-list-text">App Support & Maintainence</span> </a> </li> <li class="elementor-icon-list-item"> <a href="/it/societa-di-sviluppo-mean-stack/"> <span class="elementor-icon-list-text">Sviluppo dello stack MEAN</span> </a> </li> <li class="elementor-icon-list-item"> <a href="/it/societa-di-servizi-di-progettazione-ui-ux/"> <span class="elementor-icon-list-text">Servizi di progettazione UI UX</span> </a> </li> <li class="elementor-icon-list-item"> <a href="/it/servizi-di-sviluppo-mern-stack/"> <span class="elementor-icon-list-text">Sviluppo dello stack MERN</span> </a> </li> </ul> </div> </div> </div> </div> <div class="elementor-column elementor-col-25 elementor-inner-column elementor-element elementor-element-e2e7d44" data-id="e2e7d44" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-01325a5 elementor-widget elementor-widget-heading" data-id="01325a5" data-element_type="widget" data-widget_type="heading.default"> <div class="elementor-widget-container"> <h2 class="elementor-heading-title elementor-size-default">Informazioni di contatto </h2> </div> </div> <div class="elementor-element elementor-element-bd71833 elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="bd71833" data-element_type="widget" data-widget_type="divider.default"> <div class="elementor-widget-container"> <div class="elementor-divider"> <span class="elementor-divider-separator"> </span> </div> </div> </div> <div class="elementor-element elementor-element-bd7c446 elementor-widget elementor-widget-text-editor" data-id="bd7c446" data-element_type="widget" data-widget_type="text-editor.default"> <div class="elementor-widget-container"> <i class="fa fa-angle-double-right" style="color: #b71c1c; font-size: 16px; margin-right: 10px;" aria-hidden="true"></i>sales@railscarma.com </div> </div> <div class="elementor-element elementor-element-e12e9dd elementor-widget elementor-widget-text-editor" data-id="e12e9dd" data-element_type="widget" data-widget_type="text-editor.default"> <div class="elementor-widget-container"> <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) </div> </div> <div class="elementor-element elementor-element-a7b3e7c elementor-widget elementor-widget-text-editor" data-id="a7b3e7c" data-element_type="widget" data-widget_type="text-editor.default"> <div class="elementor-widget-container"> <i class="fa fa-angle-double-right" style="color: #b71c1c; font-size: 16px; margin-right: 10px;" aria-hidden="true"></i>+91 70120 98783 (IND) </div> </div> <div class="elementor-element elementor-element-a6b542a e-grid-align-left e-grid-align-mobile-center elementor-shape-rounded elementor-grid-0 elementor-widget elementor-widget-social-icons" data-id="a6b542a" data-element_type="widget" data-widget_type="social-icons.default"> <div class="elementor-widget-container"> <div class="elementor-social-icons-wrapper elementor-grid"> <span class="elementor-grid-item"> <a class="elementor-icon elementor-social-icon elementor-social-icon-facebook elementor-repeater-item-9ed515a" href="https://www.facebook.com/RailsCarma" target="_blank"> <span class="elementor-screen-only">Facebook</span> <i class="fab fa-facebook"></i> </a> </span> <span class="elementor-grid-item"> <a class="elementor-icon elementor-social-icon elementor-social-icon-twitter elementor-repeater-item-7229e49" href="https://twitter.com/railscarma" target="_blank"> <span class="elementor-screen-only">Twitter</span> <i class="fab fa-twitter"></i> </a> </span> <span class="elementor-grid-item"> <a class="elementor-icon elementor-social-icon elementor-social-icon-linkedin elementor-repeater-item-1e6765e" href="https://www.linkedin.com/company/railscarma/" target="_blank"> <span class="elementor-screen-only">Linkedin</span> <i class="fab fa-linkedin"></i> </a> </span> <span class="elementor-grid-item"> <a class="elementor-icon elementor-social-icon elementor-social-icon-behance elementor-repeater-item-15288d5" href="https://www.behance.net/railscarma" target="_blank"> <span class="elementor-screen-only">Behance</span> <i class="fab fa-behance"></i> </a> </span> <span class="elementor-grid-item"> <a class="elementor-icon elementor-social-icon elementor-social-icon-dribbble elementor-repeater-item-66326d2" href="https://dribbble.com/railscarma" target="_blank"> <span class="elementor-screen-only">Dribbling</span> <i class="fab fa-dribbble"></i> </a> </span> <span class="elementor-grid-item"> <a class="elementor-icon elementor-social-icon elementor-social-icon-check-square elementor-repeater-item-25855ac" href="https://www.provenexpert.com/railscarma-ruby-on-rails-development-company/" target="_blank"> <span class="elementor-screen-only">Check-square</span> <i class="fas fa-check-square"></i> </a> </span> <span class="elementor-grid-item"> <a class="elementor-icon elementor-social-icon elementor-social-icon-globe elementor-repeater-item-2f7d1f1" href="https://clutch.co/profile/railscarma#summary" target="_blank"> <span class="elementor-screen-only">Globe</span> <i class="fas fa-globe"></i> </a> </span> <span class="elementor-grid-item"> <a class="elementor-icon elementor-social-icon elementor-social-icon-globe elementor-repeater-item-9eaa0e0" href="https://upcity.com/profiles/railscarma" target="_blank"> <span class="elementor-screen-only">Globe</span> <i class="fas fa-globe"></i> </a> </span> </div> </div> </div> </div> </div> </div> </section> <section class="elementor-section elementor-inner-section elementor-element elementor-element-e9b0a1a elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="e9b0a1a" data-element_type="section"> <div class="elementor-container elementor-column-gap-default"> <div class="elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-8903b37" data-id="8903b37" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-95114b7 elementor-widget elementor-widget-html" data-id="95114b7" data-element_type="widget" data-widget_type="html.default"> <div class="elementor-widget-container"> <div class="footlocations"> <div class="tooltip"> <picture> <source type="image/webp" srcset="/wp-content/uploads/2021/09/DXB.png.webp"/> <img src="/wp-content/uploads/2021/09/DXB.png" alt="Dubai" width="30" height="20"/> </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> <source type="image/webp" srcset="https://www.railscarma.com/wp-content/uploads/2021/09/usa.jpg.webp"/> <img src="https://www.railscarma.com/wp-content/uploads/2021/09/usa.jpg" alt="Stati Uniti d'America" width="30" height="20"/> </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> <source type="image/webp" srcset="https://www.railscarma.com/wp-content/uploads/2021/09/usa.jpg.webp"/> <img src="https://www.railscarma.com/wp-content/uploads/2021/09/usa.jpg" alt="Stati Uniti d'America" width="30" height="20"/> </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> <source type="image/webp" srcset="https://www.railscarma.com/wp-content/uploads/2021/09/usa.jpg.webp"/> <img src="https://www.railscarma.com/wp-content/uploads/2021/09/usa.jpg" alt="Stati Uniti d'America" width="30" height="20"/> </picture> <a href="https://www.railscarma.com/it/ruby-on-rails-development-consulting-dallas/">Dallas, USA</a> <span class="tooltiptext">3333 Lee Parkway, Ste 600, Dallas, TX 75219 Stati Uniti</span> </div> <div class="tooltip"> <picture> <source type="image/webp" srcset="https://www.railscarma.com/wp-content/uploads/2021/09/qatar.jpg.webp"/> <img src="https://www.railscarma.com/wp-content/uploads/2021/09/qatar.jpg" alt="Qatar" width="30" height="20"/> </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> <source type="image/webp" srcset="https://www.railscarma.com/wp-content/uploads/2021/09/india.jpg.webp"/> <img src="https://www.railscarma.com/wp-content/uploads/2021/09/india.jpg" alt="India" width="30" height="20"/> </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> </div> </div> </div> </div> </section> </div> </div> </div> </section> <section class="elementor-section elementor-top-section elementor-element elementor-element-9d93032 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="9d93032" 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-71c1b8e" data-id="71c1b8e" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-006bd8a elementor-widget elementor-widget-text-editor" data-id="006bd8a" data-element_type="widget" data-widget_type="text-editor.default"> <div class="elementor-widget-container"> Copyright © 2024 – 2025 <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> <div class="elementor-element elementor-element-8cb545a elementor-widget elementor-widget-text-editor" data-id="8cb545a" data-element_type="widget" data-widget_type="text-editor.default"> <div class="elementor-widget-container"> <a href="https://www.railscarma.com/it/privacy-policy/">Politica sulla riservatezza. </a><a href="https://www.railscarma.com/it/termini-di-utilizzo/">Termini di utilizzo.</a><a href="https://www.railscarma.com/it/mappa-del-sito/"> Mappa del sito</a> </div> </div> </div> </div> </div> </section> </div> </div><!-- #page --> <template id="tp-language" data-tp-language="it_IT"></template><!--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">We use cookies on our website to give you the most relevant experience by remembering your preferences and repeat visits. By clicking “ACCEPT ALL”, you consent to the use of ALL the cookies. However, you may visit "Cookie Settings" to provide a controlled consent.</div><div class="cli-bar-btn_container"><a role='button' class="cli_settings_button" style="margin:0px 10px 0px 5px">Cookie Settings</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">ACCEPT ALL</a></div></div></span></div><div id="cookie-law-info-again" style="display:none" data-nosnippet="true"><span id="cookie_hdr_showagain">Manage consent</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.8.7)--> <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.8.7)--> <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="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/it_IT.png" width="18" height="12" alt="it_IT" title="Italian">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="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/en_US.png" width="18" height="12" alt="en_US" title="English">English </a> <a href="https://www.railscarma.com/ja/ブログ/technical-articles/learning-the-fundamentals-of-nokogiri-gem/" title="Japanese"> <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">Japanese </a> <a href="https://www.railscarma.com/de/blog/technical-articles/erlernen-der-grundlagen-von-nokogiri-gem/" title="German"> <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">German </a> <a href="https://www.railscarma.com/fr/blog/technical-articles/apprendre-les-bases-de-la-gemme-nokogiri/" title="French"> <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">French </a> <a href="https://www.railscarma.com/es/blog/technical-articles/learning-the-fundamentals-of-nokogiri-gem/" title="Spanish"> <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">Spanish </a> <a href="https://www.railscarma.com/sv/blogg/technical-articles/lara-dig-grunderna-i-nokogiri-gem/" title="Swedish"> <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">Swedish </a> <a href="#" class="trp-floater-ls-disabled-language trp-ls-disabled-language" onclick="event.preventDefault()"><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">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"></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="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/en_US.png" width="18" height="12" alt="en_US" title="English"> 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="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/en_US.png" width="18" height="12" alt="en_US" title="English"> English </div> <div class="trp-ald-popup-select" id="ja" data-trp-ald-selected-language = "ja"> <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"> Japanese </div> <div class="trp-ald-popup-select" id="de_DE" data-trp-ald-selected-language = "de_DE"> <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"> German </div> <div class="trp-ald-popup-select" id="fr_FR" data-trp-ald-selected-language = "fr_FR"> <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"> French </div> <div class="trp-ald-popup-select" id="es_ES" data-trp-ald-selected-language = "es_ES"> <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"> Spanish </div> <div class="trp-ald-popup-select" id="it_IT" data-trp-ald-selected-language = "it_IT"> <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"> Italian </div> <div class="trp-ald-popup-select" id="sv_SE" data-trp-ald-selected-language = "sv_SE"> <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"> Swedish </div> </div> </div> </div> <div class="trp_ald_button"> <a href="https://www.railscarma.com" id="trp_ald_popup_change_language"></a> </div> </div> <a id="trp_ald_x_button_and_textarea" href="#"> <span id="trp_ald_x_button"></span><span id="trp_ald_x_button_textarea"></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"></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="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/en_US.png" width="18" height="12" alt="en_US" title="English"> 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="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/images/flags/en_US.png" width="18" height="12" alt="en_US" title="English"> English </div> <div class="trp-ald-popup-select" id="ja" data-trp-ald-selected-language="ja"> <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"> Japanese </div> <div class="trp-ald-popup-select" id="de_DE" data-trp-ald-selected-language="de_DE"> <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"> German </div> <div class="trp-ald-popup-select" id="fr_FR" data-trp-ald-selected-language="fr_FR"> <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"> French </div> <div class="trp-ald-popup-select" id="es_ES" data-trp-ald-selected-language="es_ES"> <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"> Spanish </div> <div class="trp-ald-popup-select" id="it_IT" data-trp-ald-selected-language="it_IT"> <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"> Italian </div> <div class="trp-ald-popup-select" id="sv_SE" data-trp-ald-selected-language="sv_SE"> <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"> 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"></a> </div> <div id="trp_ald_no_text_popup_x_button_and_textarea"> <a id="trp_ald_no_text_popup_x_button"></a><span id="trp_ald_no_text_popup_x_button_textarea"></span></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.15 --> <div class="ht-ctc ht-ctc-chat ctc-analytics ctc_wp_desktop style-3 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; " data-no-translation="" data-trp-gettext="">Scrivici su 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-no_number="" data-settings="{"number":"917012098783","pre_filled":"Ciao","dis_m":"show","dis_d":"show","css":"display: none; cursor: pointer; z-index: 99999999;","pos_d":"position: fixed; top: 15px; right: 15px;","pos_m":"position: fixed; bottom: 10px; left: 10px;","schedule":"no","se":150,"ani":"no-animations","url_target_d":"_blank","ga":"yes","fb":"yes","g_init":"default","g_an_event_name":"chat: {number}","pixel_event_name":"Click to Chat by HoliThemes"}" ></span> <link rel='stylesheet' id='widget-image-css' href='https://www.railscarma.com/wp-content/plugins/elementor/assets/css/widget-image.min.css?ver=3.26.5' 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.26.5' media='all' /> <link rel='stylesheet' id='owl.carousel-css' href='https://www.railscarma.com/wp-content/plugins/related-post/assets/front/css/owl.carousel.min.css?ver=6.7.1' media='all' /> <link rel='stylesheet' id='related-post-css' href='https://www.railscarma.com/wp-content/plugins/related-post/assets/front/css/related-post.css?ver=6.7.1' media='all' /> <link rel='stylesheet' id='cookie-law-info-table-css' href='https://www.railscarma.com/wp-content/plugins/cookie-law-info/legacy/public/css/cookie-law-info-table.css?ver=3.2.8' 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},"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","alt","content"],"gettranslationsnonceregular":"0c28a24cad","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]"]}; </script> <script src="https://www.railscarma.com/wp-content/plugins/translatepress-multilingual/assets/js/trp-translate-dom-changes.js?ver=2.9.3" id="trp-dynamic-translator-js"></script> <script src="https://www.railscarma.com/wp-includes/js/comment-reply.min.js?ver=6.7.1" id="comment-reply-js" async data-wp-strategy="async"></script> <script id="astra-theme-js-js-extra"> var astra = {"break_point":"921","isRtl":"","is_scroll_to_id":"","is_scroll_to_top":"","is_header_footer_builder_active":"1","responsive_cart_click":"flyout"}; </script> <script src="https://www.railscarma.com/wp-content/themes/astra/assets/js/minified/frontend.min.js?ver=4.8.10" id="astra-theme-js-js"></script> <script id="ht_ctc_app_js-js-extra"> var ht_ctc_chat_var = {"number":"917012098783","pre_filled":"Ciao","dis_m":"show","dis_d":"show","css":"display: none; cursor: pointer; z-index: 99999999;","pos_d":"position: fixed; top: 15px; right: 15px;","pos_m":"position: fixed; bottom: 10px; left: 10px;","schedule":"no","se":"150","ani":"no-animations","url_target_d":"_blank","ga":"yes","fb":"yes","g_init":"default","g_an_event_name":"chat: {number}","pixel_event_name":"Click to Chat by HoliThemes"}; var ht_ctc_variables = {"g_an_event_name":"chat: {number}","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_3"],"g_an_param_1":{"key":"number","value":"{number}"},"g_an_param_2":{"key":"title","value":"{title}"},"g_an_param_3":{"key":"url","value":"{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}"}}; </script> <script src="https://www.railscarma.com/wp-content/plugins/click-to-chat-for-whatsapp/new/inc/assets/js/app.js?ver=4.15" id="ht_ctc_app_js-js"></script> <script src="https://www.railscarma.com/wp-content/plugins/astra-portfolio/assets/vendor/js/min/magnific-popup.min.js?ver=1.12.0" id="astra-portfolio-lightbox-js"></script> <script src="https://www.railscarma.com/wp-includes/js/dist/vendor/react.min.js?ver=18.3.1" id="react-js"></script> <script src="https://www.railscarma.com/wp-includes/js/dist/vendor/react-dom.min.js?ver=18.3.1" id="react-dom-js"></script> <script src="https://www.railscarma.com/wp-includes/js/dist/escape-html.min.js?ver=6561a406d2d232a6fbd2" id="wp-escape-html-js"></script> <script src="https://www.railscarma.com/wp-includes/js/dist/element.min.js?ver=cb762d190aebbec25b27" id="wp-element-js"></script> <script src="https://www.railscarma.com/wp-includes/js/dist/hooks.min.js?ver=4d63a3d491d11ffd8ac6" id="wp-hooks-js"></script> <script src="https://www.railscarma.com/wp-includes/js/dist/i18n.min.js?ver=5e580eb46a90c2b997e6" id="wp-i18n-js"></script> <script id="wp-i18n-js-after"> wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); </script> <script src="https://www.railscarma.com/wp-includes/js/dist/dom-ready.min.js?ver=f77871ff7694fffea381" id="wp-dom-ready-js"></script> <script id="portfolio-front-block-script-js-extra"> var columnClass = {"1":"astra-portfolio-col-md-12","2":"astra-portfolio-col-md-6","3":"astra-portfolio-col-md-4","4":"astra-portfolio-col-md-3"}; var astraPortfolioData = {"apiUrl":"https:\/\/www.railscarma.com\/it\/wp-json\/wp\/v2\/astra-portfolio"}; </script> <script src="https://www.railscarma.com/wp-content/plugins/astra-portfolio/dist/fscript.js?ver=1.12.0" id="portfolio-front-block-script-js"></script> <script id="wpcf7-redirect-script-js-extra"> var wpcf7_redirect_forms = {"35655":{"page_id":"0","external_url":"","use_external_url":"","open_in_new_tab":"","http_build_query":"","http_build_query_selectively":"","http_build_query_selectively_fields":"","delay_redirect":"0","after_sent_script":"","thankyou_page_url":""},"32472":{"page_id":"32482","external_url":"","use_external_url":"","open_in_new_tab":"","http_build_query":"","http_build_query_selectively":"","http_build_query_selectively_fields":"","delay_redirect":"0","after_sent_script":"","thankyou_page_url":"https:\/\/www.railscarma.com\/it\/feedback-thank-you\/"},"32462":{"page_id":"0","external_url":"","use_external_url":"","open_in_new_tab":"","http_build_query":"","http_build_query_selectively":"","http_build_query_selectively_fields":"","delay_redirect":"0","after_sent_script":"","thankyou_page_url":""},"32434":{"page_id":"0","external_url":"","use_external_url":"","open_in_new_tab":"","http_build_query":"","http_build_query_selectively":"","http_build_query_selectively_fields":"","delay_redirect":"0","after_sent_script":"","thankyou_page_url":""},"4":{"page_id":"","external_url":"","use_external_url":"","open_in_new_tab":"","http_build_query":"","http_build_query_selectively":"","http_build_query_selectively_fields":"","delay_redirect":"","after_sent_script":"","thankyou_page_url":""}}; </script> <script src="https://www.railscarma.com/wp-content/plugins/cf7-redirection/js/wpcf7-redirect-script.js" id="wpcf7-redirect-script-js"></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"></script> <script src="https://www.railscarma.com/wp-includes/js/dist/autop.min.js?ver=9fb50649848277dd318d" id="wp-autop-js"></script> <script src="https://www.railscarma.com/wp-includes/js/dist/vendor/wp-polyfill.min.js?ver=3.15.0" id="wp-polyfill-js"></script> <script src="https://www.railscarma.com/wp-includes/js/dist/blob.min.js?ver=9113eed771d446f4a556" id="wp-blob-js"></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"></script> <script src="https://www.railscarma.com/wp-includes/js/dist/deprecated.min.js?ver=e1f84915c5e8ae38964c" id="wp-deprecated-js"></script> <script src="https://www.railscarma.com/wp-includes/js/dist/dom.min.js?ver=93117dfee2692b04b770" id="wp-dom-js"></script> <script src="https://www.railscarma.com/wp-includes/js/dist/is-shallow-equal.min.js?ver=e0f9f1d78d83f5196979" id="wp-is-shallow-equal-js"></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":"2025-01-16 18:27:00+0000","generator":"GlotPress\/4.0.1","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"}} ); </script> <script src="https://www.railscarma.com/wp-includes/js/dist/keycodes.min.js?ver=034ff647a54b018581d3" id="wp-keycodes-js"></script> <script src="https://www.railscarma.com/wp-includes/js/dist/priority-queue.min.js?ver=9c21c957c7e50ffdbf48" id="wp-priority-queue-js"></script> <script src="https://www.railscarma.com/wp-includes/js/dist/compose.min.js?ver=85f0708cd2e6b26addeb" id="wp-compose-js"></script> <script src="https://www.railscarma.com/wp-includes/js/dist/private-apis.min.js?ver=4b858962c15c2c7a135f" id="wp-private-apis-js"></script> <script src="https://www.railscarma.com/wp-includes/js/dist/redux-routine.min.js?ver=a0a172871afaeb261566" id="wp-redux-routine-js"></script> <script src="https://www.railscarma.com/wp-includes/js/dist/data.min.js?ver=7c62e39de0308c73d50c" id="wp-data-js"></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 } ); } )(); </script> <script src="https://www.railscarma.com/wp-includes/js/dist/html-entities.min.js?ver=2cd3358363e0675638fb" id="wp-html-entities-js"></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":"2025-01-16 18:27:00+0000","generator":"GlotPress\/4.0.1","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"}} ); </script> <script src="https://www.railscarma.com/wp-includes/js/dist/a11y.min.js?ver=3156534cc54473497e14" id="wp-a11y-js"></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":"2025-01-16 18:27:00+0000","generator":"GlotPress\/4.0.1","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"}} ); </script> <script src="https://www.railscarma.com/wp-includes/js/dist/rich-text.min.js?ver=4021b9e4e9ef4d3cd868" id="wp-rich-text-js"></script> <script src="https://www.railscarma.com/wp-includes/js/dist/shortcode.min.js?ver=b7747eee0efafd2f0c3b" id="wp-shortcode-js"></script> <script src="https://www.railscarma.com/wp-includes/js/dist/warning.min.js?ver=ed7c8b0940914f4fe44b" id="wp-warning-js"></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":"2025-01-16 18:27:00+0000","generator":"GlotPress\/4.0.1","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"}} ); </script> <script src="https://www.railscarma.com/wp-includes/js/dist/blocks.min.js?ver=8474af4b6260126fa879" id="wp-blocks-js"></script> <script src="https://www.railscarma.com/wp-includes/js/dist/url.min.js?ver=e87eb76272a3a08402d2" 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":"2025-01-16 18:27:00+0000","generator":"GlotPress\/4.0.1","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"it"},"You are probably offline.":["Sei probabilmente offline."],"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."],"An unknown error occurred.":["Si \u00e8 verificato un errore sconosciuto."]}},"comment":{"reference":"wp-includes\/js\/dist\/api-fetch.js"}} ); </script> <script src="https://www.railscarma.com/wp-includes/js/dist/api-fetch.min.js?ver=d387b816bc1ed2042e28" 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( "4222eb826b" ); 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"; </script> <script id="render-block-script-js-extra"> var frontend_global_data = {"base_url":"https:\/\/www.railscarma.com","nonce":"4222eb826b","ajaxurl":"https:\/\/www.railscarma.com\/wp-admin\/admin-ajax.php","rating_nonce":"8a21923f59","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":"<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" data-name=\"Layer 1\" viewBox=\"0 0 382.31 446.56\"><defs><linearGradient id=\"a\" x1=\"118.66\" y1=\"270.6\" x2=\"393.33\" y2=\"112.03\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0\" stop-color=\"#2db8b7\"\/><stop offset=\"1\" stop-color=\"#3062af\"\/><\/linearGradient><\/defs><path 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\"\/><path 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\"\/><path 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)\"\/><\/svg>"}}; </script> <script src="https://www.railscarma.com/wp-content/plugins/wp-post-author/assets/dist/awpa_frontend.build.js?ver=3.6.2" id="render-block-script-js"></script> <script src="https://www.railscarma.com/wp-content/plugins/duracelltomi-google-tag-manager/dist/js/gtm4wp-form-move-tracker.js?ver=1.20.3" id="gtm4wp-form-move-tracker-js"></script> <script id="astra-addon-js-js-extra"> var astraAddon = {"sticky_active":"1","svgIconClose":"<span class=\"ast-icon icon-close\"><svg viewBox=\"0 0 512 512\" aria-hidden=\"true\" role=\"img\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" width=\"18px\" height=\"18px\">\n <path d=\"M71.029 71.029c9.373-9.372 24.569-9.372 33.942 0L256 222.059l151.029-151.03c9.373-9.372 24.569-9.372 33.942 0 9.372 9.373 9.372 24.569 0 33.942L289.941 256l151.03 151.029c9.372 9.373 9.372 24.569 0 33.942-9.373 9.372-24.569 9.372-33.942 0L256 289.941l-151.029 151.03c-9.373 9.372-24.569 9.372-33.942 0-9.372-9.373-9.372-24.569 0-33.942L222.059 256 71.029 104.971c-9.372-9.373-9.372-24.569 0-33.942z\" \/>\n <\/svg><\/span>","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":"1","component_limit":"10","is_header_builder_active":"1"}; </script> <script src="https://www.railscarma.com/wp-content/uploads/astra-addon/astra-addon-678b6863988cf8-05565009.js?ver=3.9.1" id="astra-addon-js-js"></script> <script src="https://www.railscarma.com/wp-content/plugins/wp-post-author/assets/dist/single_post_star.build.js?ver=3.6.2" id="awpa-single-rating-variation-frontend-js"></script> <script src="https://www.railscarma.com/wp-content/plugins/wp-post-author/assets/dist/author_post_star.build.js?ver=3.6.2" id="awpa-author-rating-variation-frontend-js"></script> <script src="https://www.railscarma.com/wp-content/plugins/related-post//assets/front/js/owl.carousel.min.js?ver=6.7.1" id="owl.carousel-js"></script> <script src="https://www.railscarma.com/wp-content/plugins/elementor-pro/assets/js/webpack-pro.runtime.min.js?ver=3.25.5" id="elementor-pro-webpack-runtime-js"></script> <script src="https://www.railscarma.com/wp-content/plugins/elementor/assets/js/webpack.runtime.min.js?ver=3.26.5" id="elementor-webpack-runtime-js"></script> <script src="https://www.railscarma.com/wp-content/plugins/elementor/assets/js/frontend-modules.min.js?ver=3.26.5" id="elementor-frontend-modules-js"></script> <script id="elementor-pro-frontend-js-before"> var ElementorProFrontendConfig = {"ajaxurl":"https:\/\/www.railscarma.com\/wp-admin\/admin-ajax.php","nonce":"887648cfe0","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"}}; </script> <script src="https://www.railscarma.com/wp-content/plugins/elementor-pro/assets/js/frontend.min.js?ver=3.25.5" id="elementor-pro-frontend-js"></script> <script src="https://www.railscarma.com/wp-includes/js/jquery/ui/core.min.js?ver=1.13.3" id="jquery-ui-core-js"></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"}; </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.26.5","is_static":false,"experimentalFeatures":{"additional_custom_breakpoints":true,"e_swiper_latest":true,"e_nested_atomic_repeaters":true,"e_onboarding":true,"e_css_smooth_scroll":true,"theme_builder_v2":true,"home_screen":true,"landing-pages":true,"nested-elements":true,"editor_v2":true,"link-in-bio":true,"floating-buttons":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":"625f09cb37"},"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"}}; </script> <script src="https://www.railscarma.com/wp-content/plugins/elementor/assets/js/frontend.min.js?ver=3.26.5" id="elementor-frontend-js"></script> <script id="elementor-frontend-js-after"> 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 ); }); </script> <script src="https://www.railscarma.com/wp-content/plugins/elementor-pro/assets/js/elements-handlers.min.js?ver=3.25.5" id="pro-elements-handlers-js"></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> </body> </html>