<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Luis Porras</title>
    <description>The latest articles on DEV Community by Luis Porras (@lporras).</description>
    <link>https://dev.to/lporras</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F168705%2F456c7490-bdf9-47e0-841f-76ff594f0133.png</url>
      <title>DEV Community: Luis Porras</title>
      <link>https://dev.to/lporras</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lporras"/>
    <language>en</language>
    <item>
      <title>FreeShow: The Open Source Presentation App Your Church Needs</title>
      <dc:creator>Luis Porras</dc:creator>
      <pubDate>Mon, 06 Apr 2026 17:34:11 +0000</pubDate>
      <link>https://dev.to/lporras/freeshow-the-open-source-presentation-app-your-church-needs-mo0</link>
      <guid>https://dev.to/lporras/freeshow-the-open-source-presentation-app-your-church-needs-mo0</guid>
      <description>&lt;h2&gt;
  
  
  Serving My Church Through Code
&lt;/h2&gt;

&lt;p&gt;Ever since I joined &lt;a href="https://www.instagram.com/comunidadfamiliareal/" rel="noopener noreferrer"&gt;Comunidad Familia Real&lt;/a&gt;, I've always had a deep desire to serve. Over time, I've been able to do that through the audiovisual team and currently as the leader of our worship band.&lt;/p&gt;

&lt;p&gt;But I also wanted to contribute from my talent as a software developer. And I finally found the perfect way to do both.&lt;/p&gt;

&lt;h2&gt;
  
  
  Discovering FreeShow
&lt;/h2&gt;

&lt;p&gt;If you've ever been part of a church tech team, you know the struggle: most presentation software for worship is either expensive, proprietary, or clunky. That's why I was thrilled when I discovered &lt;a href="https://freeshow.app" rel="noopener noreferrer"&gt;FreeShow&lt;/a&gt; — a &lt;strong&gt;free and open source&lt;/strong&gt; presentation app designed specifically for churches and live events.&lt;/p&gt;

&lt;p&gt;FreeShow lets you handle everything your church needs in one place:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scripture display&lt;/strong&gt; during sermons&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Song lyrics&lt;/strong&gt; with real-time live display&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Images and slides&lt;/strong&gt; for announcements&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instrumental audio&lt;/strong&gt; playback&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Welcome videos&lt;/strong&gt; and media&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stage display&lt;/strong&gt; for musicians and speakers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the best part? It's completely free. No subscriptions, no licenses, no limitations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why FreeShow Stands Out
&lt;/h2&gt;

&lt;p&gt;Here's what makes FreeShow special compared to other church presentation tools:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;FreeShow&lt;/th&gt;
&lt;th&gt;ProPresenter&lt;/th&gt;
&lt;th&gt;EasyWorship&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Price&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$399+&lt;/td&gt;
&lt;td&gt;$199+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open Source&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-platform&lt;/td&gt;
&lt;td&gt;Windows, Mac, Linux&lt;/td&gt;
&lt;td&gt;Windows, Mac&lt;/td&gt;
&lt;td&gt;Windows only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bible integration&lt;/td&gt;
&lt;td&gt;Built-in&lt;/td&gt;
&lt;td&gt;Built-in&lt;/td&gt;
&lt;td&gt;Built-in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Live lyrics&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MIDI support&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NDI output&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How We Use It at Our Church
&lt;/h2&gt;

&lt;p&gt;At Comunidad Familia Real, we started implementing FreeShow to support our weekly services. Here's how we use it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;During the sermon&lt;/strong&gt; — We display Scripture passages on screen so the congregation can follow along&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Worship time&lt;/strong&gt; — Live song lyrics are projected in real time as our band plays&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Welcome and announcements&lt;/strong&gt; — Videos and image slides before and between services&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instrumental background&lt;/strong&gt; — Ambient music during prayer and reflection moments&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The transition was smooth, and our team picked it up quickly. The interface is intuitive enough that even volunteers with no tech background can operate it.&lt;/p&gt;

&lt;h2&gt;
  
  
  From User to Contributor
&lt;/h2&gt;

&lt;p&gt;I liked FreeShow so much that I decided to contribute back to the project. I'm excited to share that &lt;strong&gt;my first Pull Request was accepted&lt;/strong&gt; and is available in the latest version of FreeShow!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ChurchApps/FreeShow/pulls?q=author%3Alporras" rel="noopener noreferrer"&gt;View my PR on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's something deeply satisfying about using your professional skills to serve your community AND contribute to a project that helps churches around the world.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Your Church Should Try FreeShow
&lt;/h2&gt;

&lt;p&gt;If your church is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Paying for expensive presentation software&lt;/strong&gt; — FreeShow does what you need, for free&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Using PowerPoint or Google Slides&lt;/strong&gt; for worship — FreeShow is purpose-built for church services&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Looking for something that "just works"&lt;/strong&gt; — it's lightweight, fast, and easy to set up&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Running on different operating systems&lt;/strong&gt; — it works on Windows, Mac, and Linux&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Give it a try. You have nothing to lose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Download FreeShow at &lt;a href="https://freeshow.app" rel="noopener noreferrer"&gt;freeshow.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Import your song library or create new songs directly in the app&lt;/li&gt;
&lt;li&gt;Add your Bible translations&lt;/li&gt;
&lt;li&gt;Set up your output screens&lt;/li&gt;
&lt;li&gt;You're ready for Sunday!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The &lt;a href="https://freeshow.app/docs" rel="noopener noreferrer"&gt;FreeShow documentation&lt;/a&gt; is a great place to learn the basics, &lt;a href="https://www.youtube.com/@theGarryBjr" rel="noopener noreferrer"&gt;Garry Bjr's YouTube channel&lt;/a&gt; has excellent tutorials and walkthroughs, and the community on &lt;a href="https://github.com/ChurchApps/FreeShow" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; is welcoming and active.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contribute!
&lt;/h2&gt;

&lt;p&gt;FreeShow is open source and welcomes contributions. Whether you're a developer, designer, translator, or just someone who wants to help improve the documentation — there's a place for you.&lt;/p&gt;

&lt;p&gt;Check out the &lt;a href="https://github.com/ChurchApps/FreeShow" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt; to get started.&lt;/p&gt;




&lt;p&gt;I'm grateful for the opportunities to serve and keep growing as a developer. Technology can be a powerful tool for our communities — and open source makes it accessible to everyone.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Have you used FreeShow or a similar tool at your church? I'd love to hear about your experience in the comments!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>node</category>
      <category>electron</category>
      <category>church</category>
    </item>
    <item>
      <title>BibleQL: A GraphQL API for the Bible</title>
      <dc:creator>Luis Porras</dc:creator>
      <pubDate>Mon, 06 Apr 2026 17:20:35 +0000</pubDate>
      <link>https://dev.to/lporras/bibleql-a-graphql-api-for-the-bible-2geg</link>
      <guid>https://dev.to/lporras/bibleql-a-graphql-api-for-the-bible-2geg</guid>
      <description>&lt;h2&gt;
  
  
  Why I Built BibleQL
&lt;/h2&gt;

&lt;p&gt;I've always wanted a simple, developer-friendly way to access Bible text programmatically. Most existing APIs are either proprietary, limited in translations, or use REST endpoints that make it hard to fetch exactly the data you need.&lt;/p&gt;

&lt;p&gt;That's why I created &lt;strong&gt;BibleQL&lt;/strong&gt; — a GraphQL API that lets you query Bible verses and passages across &lt;strong&gt;43 public domain translations in 31 languages&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is BibleQL?
&lt;/h2&gt;

&lt;p&gt;BibleQL is an open-source GraphQL API built with &lt;strong&gt;Ruby on Rails 8.1&lt;/strong&gt; and &lt;strong&gt;PostgreSQL&lt;/strong&gt;. It provides a single flexible endpoint where you can query exactly the Bible data you need — no more, no less.&lt;/p&gt;

&lt;p&gt;Here's what a query looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight graphql"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;passage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;translation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"eng-web"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reference&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"John 3:16"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;reference&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;translationName&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;verses&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;bookName&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;chapter&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;verse&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And you get back exactly what you asked for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"passage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"reference"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"John 3:16"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"For God so loved the world, that he gave his one and only Son, that whoever believes in him should not perish, but have eternal life."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"translationName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"World English Bible"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"verses"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"bookName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"John"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"chapter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"verse"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"For God so loved the world, that he gave his one and only Son, that whoever believes in him should not perish, but have eternal life."&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;43 Bible translations&lt;/strong&gt; in 31 languages (all public domain)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible passage lookup&lt;/strong&gt; — single verses, ranges, and multi-ranges (e.g., &lt;code&gt;"Matthew 25:31-33,46"&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Localized book names&lt;/strong&gt; — query using book names in the translation's language (e.g., &lt;code&gt;"Mateo 28:18-20"&lt;/code&gt; for Spanish, &lt;code&gt;"Lucas 3:1-10"&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full-text search&lt;/strong&gt; across all verses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verse of the Day&lt;/strong&gt; — a curated daily verse for any translation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Random verse&lt;/strong&gt; — get a random verse filtered by testament or specific books&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bible index&lt;/strong&gt; — browse the full structural hierarchy of any translation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language discovery&lt;/strong&gt; — list all available languages with their translations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive Playground&lt;/strong&gt; — try the API right in your browser at &lt;a href="https://bibleql.org/playground" rel="noopener noreferrer"&gt;&lt;code&gt;/playground&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Supported Reference Formats
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;passage&lt;/code&gt; query understands many reference formats:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Single verse&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"John 3:16"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verse range&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"John 3:16-18"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multiple ranges&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"Matthew 25:31-33,46"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full chapter&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"Genesis 1"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-chapter&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"Romans 12:1,3-4 &amp;amp; 13:2-4"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Localized names&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;"Mateo 28:18-20"&lt;/code&gt;, &lt;code&gt;"Lucas 3:1-10"&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Client Libraries
&lt;/h2&gt;

&lt;p&gt;To make it even easier to get started, I've built client SDKs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ruby:&lt;/strong&gt; &lt;a href="https://github.com/lporras/bibleql-ruby" rel="noopener noreferrer"&gt;bibleql-ruby&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js:&lt;/strong&gt; &lt;a href="https://github.com/lporras/bibleql-js" rel="noopener noreferrer"&gt;bibleql-js&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Examples:&lt;/strong&gt; &lt;a href="https://github.com/lporras/bibleql-example" rel="noopener noreferrer"&gt;bibleql-example&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Tech Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ruby 4.0 / Rails 8.1&lt;/strong&gt; — the latest and greatest&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL&lt;/strong&gt; — reliable and performant&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;graphql-ruby&lt;/strong&gt; — mature GraphQL implementation for Ruby&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Key authentication&lt;/strong&gt; with environment-aware prefixes (&lt;code&gt;bql_live_&lt;/code&gt; / &lt;code&gt;bql_test_&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limiting&lt;/strong&gt; via Rack::Attack (100 req/min per IP, 1,000 req/day per API key)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker + Kamal&lt;/strong&gt; for deployment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Actions CI/CD&lt;/strong&gt; — security scans, linting, and tests on every PR&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It Out
&lt;/h2&gt;

&lt;p&gt;The API is live at &lt;strong&gt;&lt;a href="https://bibleql.org" rel="noopener noreferrer"&gt;https://bibleql.org&lt;/a&gt;&lt;/strong&gt;. You can explore it interactively using the &lt;a href="https://bibleql.org/playground" rel="noopener noreferrer"&gt;Playground&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To get an API key, visit the &lt;a href="https://bibleql.org/api-keys/request/new" rel="noopener noreferrer"&gt;API Key Request page&lt;/a&gt; and submit a request.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking for Contributors!
&lt;/h2&gt;

&lt;p&gt;This is where I need &lt;strong&gt;your&lt;/strong&gt; help. BibleQL is fully open source and I'd love for this to be a community-driven project. Whether you're a seasoned Rails developer or just getting started with open source, there's room for you.&lt;/p&gt;

&lt;p&gt;Here are some areas where contributions would be especially welcome:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;More Bible versions&lt;/strong&gt; — this is a big one! Currently all 43 translations are public domain, but I'd love to expand the API with widely-used copyrighted versions like &lt;strong&gt;NVI&lt;/strong&gt; (Nueva Version Internacional), &lt;strong&gt;RVR1960&lt;/strong&gt; (Reina-Valera 1960), &lt;strong&gt;NIV&lt;/strong&gt;, &lt;strong&gt;ESV&lt;/strong&gt;, and others. If you have experience navigating Bible text licensing — working with publishers, understanding API usage rights, or securing distribution agreements — I'd really appreciate your guidance. This is uncharted territory for me and any help figuring out the licensing path would be invaluable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New query types&lt;/strong&gt; — ideas for useful queries the API doesn't support yet&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client libraries&lt;/strong&gt; — SDKs for Python, Go, Java, or any other language&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation&lt;/strong&gt; — improve guides, add tutorials, or write usage examples&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bug fixes and improvements&lt;/strong&gt; — check the issues tab for open tasks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend apps&lt;/strong&gt; — build something cool on top of the API!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check out the &lt;a href="https://github.com/lporras/bibleql" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt; and the &lt;a href="https://github.com/lporras/bibleql/blob/main/CONTRIBUTING.md" rel="noopener noreferrer"&gt;Contributing Guide&lt;/a&gt; to get started.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get in Touch
&lt;/h2&gt;

&lt;p&gt;If you have questions, ideas, or just want to chat about the project, feel free to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open an &lt;a href="https://github.com/lporras/bibleql/issues" rel="noopener noreferrer"&gt;issue on GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Star the repo if you find it useful&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I believe technology can be a powerful tool for making Scripture more accessible to everyone. Let's build this together.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;BibleQL is open source. Bible translations included via &lt;a href="https://github.com/seven1m/open-bibles" rel="noopener noreferrer"&gt;open-bibles&lt;/a&gt; are Public Domain or Creative Commons licensed.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>bible</category>
      <category>opensource</category>
      <category>graphql</category>
    </item>
    <item>
      <title>Usa el poder de Sidekiq Jobs con CronJobs</title>
      <dc:creator>Luis Porras</dc:creator>
      <pubDate>Mon, 05 May 2025 14:43:28 +0000</pubDate>
      <link>https://dev.to/lporras/usa-el-poder-de-sidekiq-jobs-con-cronjobs-2jo9</link>
      <guid>https://dev.to/lporras/usa-el-poder-de-sidekiq-jobs-con-cronjobs-2jo9</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/webdox/corre-tus-tareas-recurrentes-con-sidekiq-3nj1" class="crayons-story__hidden-navigation-link"&gt;Corre tus tareas recurrentes con Sidekiq&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/webdox"&gt;
            &lt;img alt="WebdoxCLM logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.dev.to%2Fdynamic%2Fimage%2Fwidth%3D90%2Cheight%3D90%2Cfit%3Dcover%2Cgravity%3Dauto%2Cformat%3Dauto%2Fhttps%253A%252F%252Fdev-to-uploads.s3.amazonaws.com%252Fuploads%252Forganization%252Fprofile_image%252F1415%252F2c163ddb-5577-49e5-9a66-9cb94a7f8ad2.png" class="crayons-logo__image"&gt;
          &lt;/a&gt;

          &lt;a href="/lporras" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F168705%2F456c7490-bdf9-47e0-841f-76ff594f0133.png" alt="lporras profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/lporras" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Luis Porras
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Luis Porras
                
              
              &lt;div id="story-author-preview-content-720640" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/lporras" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F168705%2F456c7490-bdf9-47e0-841f-76ff594f0133.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Luis Porras&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/webdox" class="crayons-story__secondary fw-medium"&gt;WebdoxCLM&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/webdox/corre-tus-tareas-recurrentes-con-sidekiq-3nj1" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 7 '21&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/webdox/corre-tus-tareas-recurrentes-con-sidekiq-3nj1" id="article-link-720640"&gt;
          Corre tus tareas recurrentes con Sidekiq
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ruby"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ruby&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/rails"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;rails&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/tutorial"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;tutorial&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/redis"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;redis&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/webdox/corre-tus-tareas-recurrentes-con-sidekiq-3nj1" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;11&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/webdox/corre-tus-tareas-recurrentes-con-sidekiq-3nj1#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              2&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>ruby</category>
      <category>rails</category>
      <category>tutorial</category>
      <category>redis</category>
    </item>
    <item>
      <title>Corre tus tareas recurrentes con Sidekiq</title>
      <dc:creator>Luis Porras</dc:creator>
      <pubDate>Mon, 07 Jun 2021 16:18:11 +0000</pubDate>
      <link>https://dev.to/webdox/corre-tus-tareas-recurrentes-con-sidekiq-3nj1</link>
      <guid>https://dev.to/webdox/corre-tus-tareas-recurrentes-con-sidekiq-3nj1</guid>
      <description>&lt;p&gt;En Webdox utilizamos &lt;strong&gt;&lt;a href="https://github.com/mperham/sidekiq" rel="noopener noreferrer"&gt;Sidekiq&lt;/a&gt;&lt;/strong&gt; como nuestra plataforma para procesar tareas asíncronas.  &lt;strong&gt;Sidekiq&lt;/strong&gt; utiliza hilos (threads) para manejar varias tareas al mismo tiempo en un mismo proceso.&lt;/p&gt;

&lt;p&gt;Tenemos muchas tareas que ejecutamos de forma asíncrona con Sidekiq, por ejemplo: El envío de notificaciones por correo, la reindexación de contratos, la generación masiva de contratos y el inicio de la firma electrónica de cada contrato masivo, etc&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sidekiq&lt;/strong&gt; se puede usar de forma gratuita y de forma paga.  Cuando usamos la forma gratuita hay ciertas funcionalidades que no se incluyen y una de estas es ejecutar CRON JOBS.  Con esta funcionalidad podríamos tomar una tarea de Sidekiq y ejecutarla recurrentemente cada cierto tiempo con &lt;a href="https://www.hostinger.es/tutoriales/cron-job" rel="noopener noreferrer"&gt;Cron jobs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Afortunadamente existen Gemas que funcionan como plugins de Sidekiq y en Webdox utilizamos una para ejecutar tareas recurrentes de forma gratuita, su nombre es &lt;strong&gt;&lt;a href="https://github.com/Moove-it/sidekiq-scheduler" rel="noopener noreferrer"&gt;Sidekiq Scheduler&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A continuación un pequeño tutorial de cómo utilizar Sidekiq Scheduler&lt;/p&gt;

&lt;h2&gt;
  
  
  Instalación y Configuración
&lt;/h2&gt;

&lt;p&gt;Agregamos la gema en nuestro Gemfile&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Gemfile&lt;/span&gt;
&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;'sidekiq-scheduler'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;y Ejecutamos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bundle install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Creamos un Worker de Sidekiq el cual se ejecutará cada cierto tiempo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;hello_world_worker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;

&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'sidekiq-scheduler'&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HelloWorldWorker&lt;/span&gt;
  &lt;span class="kp"&gt;include&lt;/span&gt; &lt;span class="no"&gt;Sidekiq&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Worker&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;perform&lt;/span&gt;
    &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s1"&gt;'Hello world'&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para configurar la periodicidad del Worker modificamos el archivo de configuración de Sidekiq, un apartado de Scheduler:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# config/sidekiq.yml&lt;/span&gt;

&lt;span class="na"&gt;:schedule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;hello_world&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cron&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*'&lt;/span&gt;   &lt;span class="c1"&gt;# Runs once per minute&lt;/span&gt;
    &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;HelloWorldWorker&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y corremos Sidekiq:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bundle &lt;span class="nb"&gt;exec &lt;/span&gt;sidekiq &lt;span class="nt"&gt;-C&lt;/span&gt; config/sidekiq.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Una vez iniciado Sidekiq veremos como se imprime "Hello world" cada minuto.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2021-06-07T15:54:38.710Z 62465 TID-ownzi9r98 INFO: Running in ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin20]
2021-06-07T15:54:38.710Z 62465 TID-ownzi9r98 INFO: See LICENSE and the LGPL-3.0 for licensing details.
2021-06-07T15:54:38.710Z 62465 TID-ownzi9r98 INFO: Upgrade to Sidekiq Pro for more features and support: http://sidekiq.org
2021-06-07T15:54:38.723Z 62465 TID-ownzi9r98 INFO: Loading Schedule
2021-06-07T15:54:38.723Z 62465 TID-ownzi9r98 INFO: Schedule empty! Set Sidekiq.schedule
2021-06-07T15:54:38.724Z 62465 TID-ownzi9r98 INFO: Schedules Loaded
2021-06-07T15:54:38.734Z 62465 TID-ownzi9r98 INFO: Reloading Schedule
2021-06-07T15:54:38.734Z 62465 TID-ownzi9r98 INFO: Loading Schedule
2021-06-07T15:54:38.790Z 62465 TID-ownzi9r98 INFO: Scheduling hello_world {"cron"=&amp;gt;"0 * * * * *", "class"=&amp;gt;"HelloWorldWorker", "queue"=&amp;gt;"default"}
2021-06-07T15:54:38.791Z 62465 TID-ownzi9r98 INFO: Schedules Loaded
2021-06-07T15:54:38.791Z 62465 TID-ownzi9r98 INFO: Starting processing, hit Ctrl-C to stop
2021-06-07T15:59:37.940Z 62990 TID-ov0v1hmpo HelloWorldWorker JID-4a465f9e9646157552de7f5c INFO: start
Hello world
2021-06-07T15:59:37.940Z 62990 TID-ov0v1hmpo HelloWorldWorker JID-4a465f9e9646157552de7f5c INFO: done: 0.0 sec
2021-06-07T15:59:37.940Z 62990 TID-ov0v1hmpo HelloWorldWorker JID-64dc6b6cb06ebf580c3faae6 INFO: start
Hello world
2021-06-07T15:59:37.940Z 62990 TID-ov0v1hmpo HelloWorldWorker JID-64dc6b6cb06ebf580c3faae6 INFO: done: 0.0 sec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Además tenemos la opción de visualizar las tareas recurrentes en el panel de administración de Sidekiq si realizamos la siguiente configuración:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# config.ru&lt;/span&gt;

&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'sidekiq/web'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'sidekiq-scheduler/web'&lt;/span&gt;

&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="no"&gt;Sidekiq&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Web&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmsluy07gqr7th4o4tvxu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmsluy07gqr7th4o4tvxu.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por último recomendamos utilizar la página &lt;a href="https://crontab.guru/" rel="noopener noreferrer"&gt;CronTabGurú&lt;/a&gt; para cuando necesitemos configurar la periodicidad de las tareas recurrentes con la sintaxis de Cron Jobs.&lt;/p&gt;

&lt;p&gt;Tener en cuenta que la sintaxis de cron jobs que utiliza Sidekiq Scheduler tiene una sección extra en la parte de adelante la cual nos permite configurar los segundos.&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>rails</category>
      <category>tutorial</category>
      <category>redis</category>
    </item>
  </channel>
</rss>
