<?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>Forem: Mati Palak</title>
    <description>The latest articles on Forem by Mati Palak (@palak).</description>
    <link>https://forem.com/palak</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%2F613173%2Fec8bb5e9-19d9-49fa-897c-2d5f96819366.jpg</url>
      <title>Forem: Mati Palak</title>
      <link>https://forem.com/palak</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/palak"/>
    <language>en</language>
    <item>
      <title>Rails Built-in Rate Limiting: A Deep Dive</title>
      <dc:creator>Mati Palak</dc:creator>
      <pubDate>Sun, 03 Aug 2025 14:23:12 +0000</pubDate>
      <link>https://forem.com/palak/rails-built-in-rate-limiting-a-deep-dive-h71</link>
      <guid>https://forem.com/palak/rails-built-in-rate-limiting-a-deep-dive-h71</guid>
      <description>&lt;p&gt;Ruby on Rails 7.2 introduces a powerful, built-in rate limiting mechanism directly into Action Controller. This eliminates the need for third-party gems like &lt;a href="https://github.com/rack/rack-attack" rel="noopener noreferrer"&gt;&lt;code&gt;rack-attack&lt;/code&gt;&lt;/a&gt; for many common use cases, offering a first-party, integrated solution for protecting your application from abuse.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the Rails rate limiter works?
&lt;/h2&gt;

&lt;p&gt;At its core, the Rails rate limiter allows you to define how many requests a client (by default, an IP address) can make to specific controller actions within a set time window. If the client exceeds this rate, Rails automatically returns a &lt;strong&gt;429 Too Many Requests&lt;/strong&gt; HTTP response. You can also configure a custom response if needed.&lt;/p&gt;

&lt;p&gt;Here’s a simple example of how to use it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class SessionsController &amp;lt; ApplicationController
  rate_limit to: 10, within: 3.minutes, only: :create
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This configuration limits each unique IP address to 10 calls to the create action (e.g., for login attempts) within a three-minute window.&lt;/p&gt;

&lt;h2&gt;
  
  
  Customization options
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;rate_limit&lt;/code&gt; method is highly flexible, offering several options for tailoring its behavior to your specific needs:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- to:&lt;/strong&gt; The maximum number of requests allowed within the defined time window.&lt;br&gt;
&lt;strong&gt;- within:&lt;/strong&gt; The duration of the time window for the rate limit.&lt;br&gt;
&lt;strong&gt;- only:&lt;/strong&gt; Specifies the controller actions to which the rate limit should be applied.&lt;br&gt;
&lt;strong&gt;- except:&lt;/strong&gt; Specifies the controller actions to exclude from the rate limit.&lt;br&gt;
&lt;strong&gt;- by:&lt;/strong&gt; A lambda that defines a custom key for rate limiting. By default, this is &lt;code&gt;request.remote_ip&lt;/code&gt;. You can use it to limit based on, for example, a &lt;code&gt;current_user.id&lt;/code&gt; or a &lt;code&gt;domain&lt;/code&gt;.&lt;br&gt;
&lt;strong&gt;- with:&lt;/strong&gt; A lambda for custom handling when the limit is exceeded. Instead of the default &lt;strong&gt;429 Too Many Requests&lt;/strong&gt; response, you could, for instance, redirect the user.&lt;br&gt;
&lt;strong&gt;- store:&lt;/strong&gt; Allows you to specify a different cache store for the rate limiting data, which is crucial for scaling. By default, it uses &lt;code&gt;config.action_controller.cache_store&lt;/code&gt;.&lt;br&gt;
&lt;strong&gt;- name:&lt;/strong&gt; Useful for defining multiple, separate rate limits within the same controller.&lt;/p&gt;

&lt;p&gt;Here are some practical examples of these customization options:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Custom grouping logic: Limit based on user ID
rate_limit to: 100, within: 1.hour, by: -&amp;gt; { current_user.id }

# Custom response when the limit is exceeded
rate_limit to: 5, within: 1.minute, with: -&amp;gt; { redirect_to login_path, alert: "Too many attempts." }

# Using a Redis cache store for distributed rate limiting
RATE_LIMIT_STORE = ActiveSupport::Cache::RedisCacheStore.new(url: ENV["REDIS_URL"])
rate_limit to: 10, within: 3.minutes, store: RATE_LIMIT_STORE
Under the Hood: Source Code Insights
The rate_limit method isn't magic; it's implemented efficiently using existing Rails infrastructure.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;rate_limit&lt;/code&gt; method itself is a class method defined in &lt;code&gt;ActionController::RateLimiting::ClassMethods&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It sets up a &lt;code&gt;before_action&lt;/code&gt; callback. This callback triggers a private method, &lt;code&gt;rate_limiting&lt;/code&gt;, before the specified controller actions are executed.&lt;/p&gt;

&lt;p&gt;The request counter is incremented and stored using Rails’ &lt;code&gt;ActiveSupport::Cache&lt;/code&gt;. The default cache store is determined by &lt;code&gt;config.action_controller.cache_store&lt;/code&gt;, but, as shown above, you can override it per controller or action.&lt;/p&gt;

&lt;p&gt;Cache keys are generated by combining the controller path, an optional name (if specified), and the value returned by the by block (e.g., an IP address or user ID). For example, a cache key might look like &lt;code&gt;rate-limit:sessions:create:192.168.0.1&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If the count of requests exceeds the to threshold, Rails will either respond with a 429 status or execute your custom &lt;strong&gt;with:&lt;/strong&gt; callback.&lt;/p&gt;

&lt;p&gt;Here’s a simplified look at the core implementation from &lt;code&gt;action_controller/metal/rate_limiting.rb&lt;/code&gt;: &lt;a href="https://github.com/rails/rails/blob/main/actionpack/lib/action_controller/metal/rate_limiting.rb" rel="noopener noreferrer"&gt;Link to source code&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def rate_limit(to:, within:, by: -&amp;gt; { request.remote_ip }, with: -&amp;gt; { head :too_many_requests }, store: cache_store, name: nil, **options)
  before_action -&amp;gt; { rate_limiting(to: to, within: within, by: by, with: with, store: store, name: name) }, **options
end

private

def rate_limiting(to:, within:, by:, with:, store:, name:)
  # Constructing a unique cache key based on controller, optional name, and the 'by' value
  cache_key = ["rate-limit", controller_path, name, instance_exec(&amp;amp;by)].compact.join(":")
  # Atomically increments the counter in the cache store and sets an expiration time
  count = store.increment(cache_key, 1, expires_in: within)
  # If the count exceeds the limit, execute the 'with' callback
  if count &amp;amp;&amp;amp; count &amp;gt; to
    instance_exec(&amp;amp;with)
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How &lt;code&gt;store.increment&lt;/code&gt; works with Redis?
&lt;/h2&gt;

&lt;p&gt;When &lt;code&gt;ActiveSupport::Cache::RedisCacheStore&lt;/code&gt; is used as the store, the &lt;code&gt;store.increment(cache_key, 1, expires_in: within)&lt;/code&gt; method directly leverages Redis's atomic &lt;code&gt;INCR&lt;/code&gt; command combined with an &lt;code&gt;EXPIRE&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;Atomic incrementing: The &lt;code&gt;INCR&lt;/code&gt; command atomically increases the integer value stored at the given key. If the key doesn't exist, Redis creates it and sets its initial value to 1. This guarantees thread-safe and reliable counting, even under high concurrency.&lt;/p&gt;

&lt;p&gt;Automatic expiration: The expires_in: option tells Rails to set a &lt;strong&gt;Time-To-Live (TTL)&lt;/strong&gt; for the key. Redis's &lt;code&gt;EXPIRE&lt;/code&gt; command is used to automatically delete the key after the specified duration (e.g., 3 minutes). This effectively resets the counter for the next time window.&lt;/p&gt;

&lt;p&gt;Atomicity and safety: The atomicity of &lt;code&gt;INCR&lt;/code&gt; in Redis ensures that even if multiple web or worker processes hit the same key simultaneously, the counters remain consistent and reliable.&lt;/p&gt;

&lt;p&gt;This mechanism ensures that each "limit key" (e.g., an IP address or user ID) gets its own independent counter in Redis, which increments with each request, is safely reset after the time window, and is automatically cleaned up for memory efficiency. If more requests arrive after a key has expired, the counter starts fresh at one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Client IP resolution: &lt;code&gt;request.remote_ip&lt;/code&gt; vs. &lt;code&gt;request.ip&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;By default, the Rails rate limiter uses &lt;code&gt;request.remote_ip&lt;/code&gt; to identify the client. This is crucial for accurate rate limiting, especially when your application is behind a proxy or CDN like &lt;strong&gt;Cloudflare&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here's a breakdown of the two methods for obtaining a client's IP in Rails:&lt;br&gt;
&lt;strong&gt;- request.ip:&lt;/strong&gt; This method originates from Rack. It retrieves the IP address without advanced logic, often returning the address of the last proxy (e.g., Cloudflare, load balancer) rather than the actual client's IP. If your server is behind a CDN or proxy, this method is more likely to give you the intermediary's IP.&lt;br&gt;
&lt;strong&gt;- request.remote_ip:&lt;/strong&gt; This is a Rails-specific method that leverages the &lt;code&gt;ActionDispatch::RemoteIp&lt;/code&gt; middleware. It intelligently inspects and interprets HTTP headers like &lt;code&gt;X-Forwarded-For&lt;/code&gt; and &lt;code&gt;Client-IP&lt;/code&gt;, considering a list of trusted proxies (which you can configure). It aims to determine the "most probable" client IP address by bypassing known proxy/CDN addresses. It also incorporates logic to detect IP spoofing, offering a more robust and accurate client IP.&lt;/p&gt;
&lt;h2&gt;
  
  
  Cloudflare and &lt;code&gt;request.remote_ip&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;When using Cloudflare, your server typically sees Cloudflare's IP addresses, not the end-user's actual IP. Cloudflare sends the original client's IP in the &lt;code&gt;CF-Connecting-IP&lt;/code&gt; header and adds its own IPs to &lt;code&gt;X-Forwarded-For&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To ensure &lt;code&gt;request.remote_ip&lt;/code&gt; accurately identifies the client behind Cloudflare, you must configure trusted proxies in your Rails application. In &lt;code&gt;config/environments/production.rb&lt;/code&gt;, you would add Cloudflare's CIDR IP ranges:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;config.action_dispatch.trusted_proxies = [
  # Cloudflare IP CIDR list – see: https://www.cloudflare.com/ips/
  IPAddr.new('173.245.48.0/20'),
  # ... and so on for all Cloudflare ranges
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alternatively, you can use the &lt;a href="https://github.com/modosc/cloudflare-rails" rel="noopener noreferrer"&gt;&lt;code&gt;cloudflare-rails gem&lt;/code&gt;&lt;/a&gt;, which automatically updates the trusted proxy list and ensures both &lt;code&gt;request.ip&lt;/code&gt; and &lt;code&gt;request.remote_ip&lt;/code&gt; behave correctly.&lt;/p&gt;

&lt;p&gt;For production environments behind Cloudflare or any other reverse proxy, configuring &lt;code&gt;trusted_proxies&lt;/code&gt; and relying on &lt;code&gt;request.remote_ip&lt;/code&gt; is essential for the rate limiter to function as intended.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advantages of built-in rate limiting
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;- First-party:&lt;/strong&gt; No need for additional gems or external dependencies for standard rate limiting, simplifying your &lt;strong&gt;Gemfile&lt;/strong&gt; and reducing potential conflicts.&lt;br&gt;
&lt;strong&gt;- Declarative:&lt;/strong&gt; Offers a simple and expressive API directly within your controllers, making it easy to understand and implement.&lt;br&gt;
&lt;strong&gt;- Flexible:&lt;/strong&gt; Provides extensive customization options with by: and with: for custom grouping logic and response handling.&lt;br&gt;
&lt;strong&gt;- Cache-backed:&lt;/strong&gt; Leverages Rails' &lt;code&gt;ActiveSupport::Cache&lt;/code&gt;, enabling scalability with support for distributed cache stores like Redis, Memcached or Solid Cache.&lt;br&gt;
&lt;strong&gt;- Multiple limits:&lt;/strong&gt; You can apply different rate limits to different actions or define multiple, distinct limits within the same controller using the name: option.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations and considerations
&lt;/h2&gt;

&lt;p&gt;While powerful, the built-in rate limiter has a few considerations:&lt;br&gt;
&lt;strong&gt;- Dependency on Rails cache:&lt;/strong&gt; The rate limiter is ineffective if caching is not enabled or properly configured. For example, in development mode, you might need to run &lt;code&gt;rails dev:cache&lt;/code&gt; or ensure a cache directory (like &lt;code&gt;tmp/cache&lt;/code&gt;) exists for file_store caching to function. A common pitfall is the rate limiter silently failing if the cache store isn't operational.&lt;br&gt;
&lt;strong&gt;- Per-process cache (default):&lt;/strong&gt; With certain cache stores (like MemoryStore), rate limits are not shared between server processes. For production deployments, you must use a shared, centralized cache store to ensure consistent rate limiting across all your application instances.&lt;br&gt;
&lt;strong&gt;- Testing gotchas:&lt;/strong&gt; If your test suite uses a persistent or memory-backed cache store, rate limits might not reset between tests, potentially leading to flaky or unexpected test failures. Be mindful of cache clearing in your test setup.&lt;br&gt;
&lt;strong&gt;- Non-distributed by default:&lt;/strong&gt; For global rate limits that span your entire infrastructure (e.g., limiting requests across all microservices), you'll need to explicitly configure a common, shared backing cache.&lt;/p&gt;

&lt;h2&gt;
  
  
  Anecdote: The mystery of the non-working rate limiter
&lt;/h2&gt;

&lt;p&gt;During my initial implementation, I encountered a frustrating debugging session that perfectly illustrates one of the system’s key dependencies. I tested it locally by hammering the endpoint with dozens of requests, expecting to see 429 errors after the second request. But nothing happened, every request succeeded, and I couldn’t trigger the rate limit no matter how many requests I sent.&lt;br&gt;
After checking and rechecking my code, examining the source implementation, and even adding logging to verify the rate limiting code was executing, I finally discovered the issue: my local development environment didn’t have caching enabled.&lt;br&gt;
Rails needs a functional cache store to persist the request counters. Without the &lt;code&gt;tmp/caching-dev.txt&lt;/code&gt; file, the cache store was effectively a no-op, so every increment operation was silently discarded. The rate limiter was running, but it couldn’t count anything! A simple &lt;code&gt;rails dev:cache&lt;/code&gt; command immediately fixed the issue, and suddenly my rate limits worked perfectly. This experience taught me to always verify cache store functionality before debugging rate limiting logic – it’s the foundation everything else depends on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Rails built-in rate limiting feature provides an easy, first-class, and expressive way to protect your application from various forms of abuse directly within your controllers. It's an ideal solution for most typical scenarios, offering high configurability and leveraging Rails' established caching infrastructure for scalability.&lt;/p&gt;

&lt;p&gt;For more complex or unusual policies, such as global quotas across multiple services, sophisticated "burst" algorithms, or advanced whitelisting, more specialized third-party libraries or external solutions (like those provided by CDNs or reverse proxies) might still be required. However, for most application-level rate limiting needs, the new Rails feature is a significant and welcome improvement.&lt;/p&gt;

&lt;p&gt;Have you tried the built-in Rails rate limiter in your applications? How does it compare to other solutions you've used? I'd love to hear your experiences!&lt;/p&gt;

</description>
      <category>rails</category>
      <category>ruby</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>What I learned while building ActiveRubyist</title>
      <dc:creator>Mati Palak</dc:creator>
      <pubDate>Fri, 30 May 2025 19:04:20 +0000</pubDate>
      <link>https://forem.com/palak/what-i-learned-while-building-activerubyist-5h9l</link>
      <guid>https://forem.com/palak/what-i-learned-while-building-activerubyist-5h9l</guid>
      <description>&lt;p&gt;Back in July 2024, I published my last post on this blog. Since then, I’ve been quiet — at least here. Behind the scenes, I’ve been busy building something I’ve wanted for a long time: a dedicated platform for Ruby developers to stay up to date, share resources, and connect.&lt;/p&gt;

&lt;p&gt;That platform is &lt;a href="https://activerubyist.com" rel="noopener noreferrer"&gt;ActiveRubyist.com&lt;/a&gt;, and in this post, I’ll walk you through what it’s become, how it started, what I’ve learned from building it solo — and where it’s heading next.&lt;/p&gt;

&lt;h2&gt;
  
  
  From idea to working product
&lt;/h2&gt;

&lt;p&gt;The idea for ActiveRubyist was born around mid-2023. I was starting a new job and found myself wishing for a central place to keep up with news, tutorials, blog posts, and tools from the Ruby and Rails ecosystem.&lt;/p&gt;

&lt;p&gt;The first version of ActiveRubyist was extremely simple — it pulled content from a handful of RSS feeds and presented them in a basic interface. I built it using Ruby on Rails 7.0, PostgreSQL as the database, and Tailwind CSS with a pre-made theme that I lightly customized. It was deployed on Hetzner using &lt;a href="https://www.hatchbox.io/" rel="noopener noreferrer"&gt;Hatchbox&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Then, life happened. My new job demanded most of my attention, and the project sat idle for several months. But in fall 2024, I returned to it with fresh motivation and a desire to bring it to the next level.&lt;/p&gt;

&lt;p&gt;By then, Rails 8 had been released, along with a new deployment tool: &lt;a href="https://github.com/basecamp/kamal" rel="noopener noreferrer"&gt;Kamal&lt;/a&gt;. It felt like the right moment to modernize the app and explore what the latest version of Rails had to offer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical stack and development choices
&lt;/h2&gt;

&lt;p&gt;Working with Ruby and Rails has never felt better. Rails has evolved into a full-stack framework that allows you to build powerful applications without constantly reaching for third-party tools or JavaScript-heavy solutions.&lt;/p&gt;

&lt;p&gt;ActiveRubyist is now a &lt;strong&gt;Progressive Web App (PWA)&lt;/strong&gt; with Hotwire-based interactivity. For authentication, I use &lt;a href="https://github.com/heartcombo/devise" rel="noopener noreferrer"&gt;&lt;code&gt;devise&lt;/code&gt;&lt;/a&gt;, and for real-time notifications, &lt;a href="https://github.com/excid3/noticed" rel="noopener noreferrer"&gt;&lt;code&gt;noticed&lt;/code&gt;&lt;/a&gt;. Where possible, I lean into default Rails features: for background jobs, I use &lt;a href="https://github.com/rails/solid_queue" rel="noopener noreferrer"&gt;Solid Queue&lt;/a&gt; instead of Sidekiq, keeping everything aligned with the Rails way.&lt;/p&gt;

&lt;p&gt;This project also became a playground. I tried out new gems, explored new APIs, and dove into areas I rarely get to touch at work — from performance tuning to monitoring production errors. One unexpected challenge? Dealing with spam bots registering fake accounts. I quickly integrated Cloudflare Turnstille - a verification tool to replace CAPTCHAs, which worked surprisingly well.&lt;/p&gt;

&lt;p&gt;In short: this app became not just a project, but a real-world sandbox. And real-world problems always teach you more than toy apps ever can.&lt;/p&gt;

&lt;h2&gt;
  
  
  No community? No problem (yet)
&lt;/h2&gt;

&lt;p&gt;One thing I haven’t focused on - yet — is building a user base or community around the project. ActiveRubyist isn’t promoted, doesn’t have a social media presence, and doesn’t even collect emails.&lt;/p&gt;

&lt;p&gt;But there is one integration that’s live and active: &lt;strong&gt;every blog post on dev.to tagged with &lt;code&gt;ruby&lt;/code&gt; is automatically aggregated and displayed&lt;/strong&gt; on the &lt;a href="https://activerubyist.com/posts" rel="noopener noreferrer"&gt;ActiveRubyist posts page&lt;/a&gt;. So if you’re blogging about Ruby here, you’re already contributing to the platform — thank you!&lt;/p&gt;

&lt;p&gt;Down the line, I’d love to create ways for users to submit content, recommend resources, and maybe even form local or topic-based groups. But for now, this remains a personal, ongoing project.&lt;/p&gt;

&lt;h2&gt;
  
  
  The most important lessons
&lt;/h2&gt;

&lt;p&gt;Over the past year, I’ve learned more than I ever expected — not just about Rails, but about product building in general.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Build for production early.&lt;/strong&gt; The sooner your app is running in production, the sooner you’ll hit the kinds of issues that never show up locally — real-world traffic, bot attacks, caching quirks, performance bottlenecks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep things boring (and stable).&lt;/strong&gt; Using default Rails solutions like Solid Queue instead of external dependencies reduces friction and increases focus. I spend less time configuring and more time shipping.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;End-to-end ownership is invaluable.&lt;/strong&gt; From infrastructure and deploys to user experience and error monitoring, I now understand how much goes into running even a small app — and how satisfying it is to see it work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most of all, I gained confidence: that I can take an idea, build it, deploy it, and iterate on it without waiting for permission, a team, or a perfect plan.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where ActiveRubyist is heading next
&lt;/h2&gt;

&lt;p&gt;Today, ActiveRubyist is more than just a news aggregator. It now includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Community groups&lt;/li&gt;
&lt;li&gt;Event creation and discovery&lt;/li&gt;
&lt;li&gt;Calendar with map integration&lt;/li&gt;
&lt;li&gt;Ticket generation for events&lt;/li&gt;
&lt;li&gt;Support for user-submitted RSS feeds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Users can already submit their own feed sources, which are summarized and linked directly to the original articles. This keeps credit where it's due, while still surfacing great content in one place.&lt;/p&gt;

&lt;p&gt;I’m currently working on &lt;strong&gt;external platform integration&lt;/strong&gt;: the idea is to allow event organizers to post once on ActiveRubyist and have their events sync across other calendars and platforms.&lt;/p&gt;

&lt;p&gt;Beyond that, I plan to return to blogging more regularly. I want to share what I’m learning — not just about Ruby and Rails, but about the full lifecycle of building and maintaining software as a solo developer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;This past year wasn’t a break from coding — it was a deep dive into independent development, platform design, and production responsibility. I built something I wanted to use, learned from every mistake along the way, and still have a long roadmap ahead.&lt;/p&gt;

&lt;p&gt;If you’d like to see where the project goes next, feel free to check out &lt;a href="https://activerubyist.com" rel="noopener noreferrer"&gt;activerubyist.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;And if you’re writing Ruby content on dev.to — your posts are already on the site. 😉&lt;/p&gt;

&lt;p&gt;Got feedback, questions, or just want to say hi? Drop a comment below or reach out. I'm always happy to connect with fellow Rubyists!&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>rails</category>
      <category>devjournal</category>
      <category>programming</category>
    </item>
    <item>
      <title>The Role of Mentorship: How mentors played a crucial role in my development and success.</title>
      <dc:creator>Mati Palak</dc:creator>
      <pubDate>Wed, 31 Jul 2024 16:20:47 +0000</pubDate>
      <link>https://forem.com/palak/the-role-of-mentorship-how-mentors-played-a-crucial-role-in-my-development-and-success-11j1</link>
      <guid>https://forem.com/palak/the-role-of-mentorship-how-mentors-played-a-crucial-role-in-my-development-and-success-11j1</guid>
      <description>&lt;h2&gt;
  
  
  Understanding Mentorship
&lt;/h2&gt;

&lt;p&gt;Mentorship is a supportive relationship where an experienced individual (mentor) shares their knowledge, guidance, and advice with a less experienced person (mentee). This kind of relationship can play a crucial role in helping the mentee navigate personal or professional challenges, set and achieve goals, and foster development and success.&lt;/p&gt;

&lt;p&gt;Mentorship can be divided into two main categories: direct and indirect mentoring. Direct mentoring involves a one-on-one relationship where the mentor provides personalized advice, feedback, and support. This can occur face-to-face, via video calls, or through regular written communication. Indirect mentoring, on the other hand, relies on learning from someone without their direct involvement, by observing their actions, consuming their content (such as books, blogs, or videos), and applying their methods and principles to your own context.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Mentorship Experience
&lt;/h2&gt;

&lt;p&gt;In my journey, I didn’t have a direct mentor. Instead, I learned a great deal through indirect mentoring by observing and following the work of experts in my field. One figure who significantly impacted my development is &lt;a href="https://www.youtube.com/@SupeRails" rel="noopener noreferrer"&gt;Jaroslav Shmarov&lt;/a&gt;, a YouTube content creator. Through his videos, I learned invaluable lessons that I applied to my own work. Eventually, I had the pleasure of meeting Jaroslav in person at a conference.&lt;/p&gt;

&lt;p&gt;Having a mentor, even indirectly, can significantly accelerate the learning process and highlight crucial areas for growth. While there is an abundance of material available on the internet, many people lack a structured path that guides them step-by-step. Mentors help provide a roadmap, eliminate unnecessary distractions, and focus on what truly matters.&lt;/p&gt;

&lt;p&gt;As I gained more experience, I felt a strong desire to give back to the community. I volunteered as a mentor at &lt;a href="//firstrubyfriend.org"&gt;firstrubyfriend.org&lt;/a&gt;, where I help budding programmers start their journeys. Initially, I wondered why people would dedicate their time to mentoring others for free. Now, I understand that it's a mix of altruism and personal development. Mentoring offers a deep sense of satisfaction and allows me to repay the support I once received. Additionally, teaching others forces me to stay up-to-date and well-organized, which also benefits my own knowledge.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding a Mentor
&lt;/h2&gt;

&lt;p&gt;Finding a mentor for Ruby developers can significantly accelerate your learning curve and provide valuable guidance. Here are some great resources to consider:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Online Platforms and Communities&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;LinkedIn&lt;br&gt;
Utilize LinkedIn to connect with experienced Ruby developers. Join relevant groups and participate in discussions to meet potential mentors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Meetup&lt;br&gt;
Search for local or virtual meetups related to Ruby programming. These meetups often have experienced developers who might be open to mentoring.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reddit&lt;br&gt;
Join subreddits like &lt;a href="https://www.reddit.com/r/ruby" rel="noopener noreferrer"&gt;r/ruby&lt;/a&gt; and &lt;a href="https://www.reddit.com/r/learnprogramming/" rel="noopener noreferrer"&gt;r/learnprogramming&lt;/a&gt;. Participating in discussions can help you connect with potential mentors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ruby User Groups (RUGs)&lt;br&gt;
Many cities have Ruby User Groups that meet regularly. These groups can be a great way to meet experienced Ruby developers. Check out the official list of RUGs on the Ruby website.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Professional and Networking&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Conferences and Workshops&lt;br&gt;
Attend Ruby conferences and workshops. These events are excellent opportunities to meet experienced developers who might be open to mentorship.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open Source Contributions&lt;br&gt;
Contributing to open source projects is a great way to meet experienced developers who can mentor you. Platforms like GitHub are essential for finding Ruby projects to contribute to.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lastly, don't be afraid to reach out directly. Whether it's through a social media platform, a professional network, or in person at a conference, many experienced developers are open to mentoring if you show genuine interest and enthusiasm.&lt;/p&gt;

&lt;p&gt;In conclusion, mentorship—whether direct or indirect—plays a crucial role in personal and professional development. It offers guidance, support, and a clear path forward. I encourage everyone to seek out mentors and consider sharing their knowledge by mentoring others. It's a rewarding experience that benefits both the mentor and the mentee.&lt;/p&gt;

&lt;p&gt;Do you have a mentor or someone you look up to? Share your experiences in the comments below!&lt;/p&gt;

</description>
      <category>career</category>
      <category>learning</category>
      <category>beginners</category>
      <category>ruby</category>
    </item>
    <item>
      <title>Learning to Program: The resources and methods I used to teach myself coding.</title>
      <dc:creator>Mati Palak</dc:creator>
      <pubDate>Mon, 01 Jul 2024 22:58:56 +0000</pubDate>
      <link>https://forem.com/palak/learning-to-program-the-resources-and-methods-i-used-to-teach-myself-coding-5ajb</link>
      <guid>https://forem.com/palak/learning-to-program-the-resources-and-methods-i-used-to-teach-myself-coding-5ajb</guid>
      <description>&lt;p&gt;Hello everyone! Today, I want to share my journey in the world of programming. Changing careers can often be a significant challenge, but with the right resources and learning methods, it is achievable. Here are some of the most effective and popular methods for learning programming, along with my experiences with them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Effective and Popular Methods for Learning Programming
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;- Online Courses:&lt;/strong&gt; Structured and often very comprehensive, allowing you to learn at your own pace. Platforms like Udemy, Coursera, and edX offer courses ranging from beginner to advanced levels, often taught by industry experts.&lt;br&gt;
&lt;strong&gt;- Interactive Coding Platforms:&lt;/strong&gt; Websites offering interactive exercises and projects for practice, such as Codecademy, freeCodeCamp, and SoloLearn. These platforms allow you to learn by doing, which is incredibly effective.&lt;br&gt;
&lt;strong&gt;- Books:&lt;/strong&gt; Traditional sources of knowledge that provide in-depth theoretical understanding. Although less interactive, they are excellent sources of detailed information and best practices.&lt;br&gt;
&lt;strong&gt;- YouTube Tutorials:&lt;/strong&gt; Free resources that offer visual and practical tips on various programming topics.&lt;br&gt;
&lt;strong&gt;- Coding Bootcamps:&lt;/strong&gt; Intensive, short-term training programs that cover a lot of material in a short time. These can be more expensive options but provide quick and comprehensive preparation for a career in programming.&lt;br&gt;
&lt;strong&gt;- Participating in Open Source Projects:&lt;/strong&gt; Getting involved in open-source projects to gain real-world experience. This is a great way to get hands-on experience and collaborate with other programmers.&lt;br&gt;
&lt;strong&gt;- Engaging with the Community:&lt;/strong&gt; Participating in programming communities through forums, social media, and meetups to get support and make connections. Platforms like Stack Overflow, Reddit, and local meetups can be extremely helpful.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Journey and the Resources I Used
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Online Courses&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Arkademy - "From Zero to Apps"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://courses.arkademy.dev/" rel="noopener noreferrer"&gt;Arkademy Courses by Arkency&lt;/a&gt;&lt;br&gt;
Description: This was the first course I took. Unfortunately, it is no longer available. It was quite basic and better suited for those who already have some programming background and want to learn Ruby on Rails through practical examples. It helped me understand fundamental concepts and the mindset of a programmer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Codecademy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://www.codecademy.com/search?query=ruby" rel="noopener noreferrer"&gt;Codecademy&lt;/a&gt;&lt;br&gt;
Description: Realizing I needed a solid foundation, I turned to Codecademy. Their interactive approach helped me understand the basics of Ruby and Rails through hands-on tasks. The step-by-step exercises and immediate feedback were very motivating.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Udemy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://www.udemy.com/course/the-complete-ruby-on-rails-developer-course" rel="noopener noreferrer"&gt;The Complete Ruby on Rails Developer Course&lt;/a&gt;&lt;br&gt;
Link: &lt;a href="https://www.udemy.com/course/ruby-on-rails-6-learn-20-gems-build-an-e-learning-platform" rel="noopener noreferrer"&gt;Ruby on Rails 6: Learn 20+ Gems &amp;amp; Build an e-Learning Platform&lt;/a&gt;&lt;br&gt;
Description: Udemy offers a vast array of programming courses. These two courses, in particular, helped me develop my skills in Ruby on Rails.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. SupeRails&lt;/strong&gt; by &lt;a class="mentioned-user" href="https://dev.to/superails"&gt;@superails&lt;/a&gt; &lt;br&gt;
Links: &lt;a href="https://superails.com/" rel="noopener noreferrer"&gt;SupeRails&lt;/a&gt; platform, &lt;a href="https://blog.corsego.com/" rel="noopener noreferrer"&gt;blog&lt;/a&gt;, &lt;a href="https://www.youtube.com/@SupeRails" rel="noopener noreferrer"&gt;youtube channel&lt;/a&gt;&lt;br&gt;
Description: Yaroslav's platform and YouTube channel are fantastic resources. He explains everything step-by-step and often debugs live, which helped me understand common problems and their solutions. Regularly updated content and the ability to see real debugging processes were very valuable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Books&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The Ruby Way by Hal Fulton&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Description: This book provided me with a deeper understanding of Ruby principles and best practices. It’s a comprehensive guide to the language, containing many examples and detailed explanations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Design Patterns in Ruby by Russ Olsen&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Description: I learned how to write more efficient and maintainable code by applying design patterns in Ruby. This book helped me understand how to structure code in a more advanced way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Polish Resources
&lt;/h2&gt;

&lt;p&gt;As a native Polish speaker, I also used several resources in my native language and the best one is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GrubyKurs&lt;/strong&gt; by &lt;a class="mentioned-user" href="https://dev.to/rafalpiekara"&gt;@rafalpiekara&lt;/a&gt; &lt;br&gt;
Link: &lt;a href="https://grubykurs.pl/" rel="noopener noreferrer"&gt;GrubyKurs&lt;/a&gt;&lt;br&gt;
Description: This is a complete course designed for absolute beginners. It offers a full learning path, community support through Discord, and a newsletter that proved very helpful during recruitment interviews. Rafał publishes new materials and supports his students, creating a friendly learning environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Importance of Knowing English
&lt;/h2&gt;

&lt;p&gt;It’s worth noting that most high-quality programming resources are available in English. When I started learning programming, I struggled with English. Over time, improving my language skills was crucial for accessing better materials and understanding programming concepts. This experience showed me the importance of being open to learning new languages and skills, as they can significantly impact our careers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Learning programming took me about a year, after which I landed an internship that opened the doors to my career as a programmer. My journey to becoming a programmer was full of challenges, but with perseverance and the right resources, I achieved my goal. If you are considering a similar path, I highly recommend exploring different learning methods and finding those that work best for you. Remember, every minute spent learning and practicing brings you closer to realizing your dreams. Good luck!&lt;/p&gt;

</description>
      <category>career</category>
      <category>learning</category>
      <category>beginners</category>
      <category>ruby</category>
    </item>
    <item>
      <title>Choosing Ruby: What made me choose Ruby as my primary programming language.</title>
      <dc:creator>Mati Palak</dc:creator>
      <pubDate>Fri, 21 Jun 2024 16:05:11 +0000</pubDate>
      <link>https://forem.com/palak/choosing-ruby-what-made-me-choose-ruby-as-my-primary-programming-language-b9g</link>
      <guid>https://forem.com/palak/choosing-ruby-what-made-me-choose-ruby-as-my-primary-programming-language-b9g</guid>
      <description>&lt;p&gt;Choosing a programming language can be a daunting task for many developers. There are countless options available, but Ruby continues to attract a loyal following. Why? Ruby is beloved for its readability, elegance, and simplicity. It’s a language that allows developers to write concise and intuitive code, leading to faster and more enjoyable application development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Do People Choose Ruby?
&lt;/h2&gt;

&lt;p&gt;Developers choose Ruby for several compelling reasons:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Readable and Intuitive Code:&lt;/strong&gt; Ruby was designed with the goal of maximising code readability. The philosophy that "programming should be enjoyable" best describes this language. Ruby's syntax is close to natural language, making the code easy to understand even for those who aren't experienced programmers.&lt;br&gt;
&lt;strong&gt;- Ruby on Rails Framework:&lt;/strong&gt; One of the most popular tools for rapid web application development, Rails makes building applications simpler with ready-to-use libraries and structures. For many developers, it’s a game-changer that allows quick transition from concept to a working application.&lt;br&gt;
&lt;strong&gt;- Active Community:&lt;/strong&gt; Ruby boasts a large and active ecosystem, meaning plenty of available resources, tutorials, and pre-built solutions. The Ruby community is known for supporting newcomers and actively backing open-source projects.&lt;br&gt;
&lt;strong&gt;- Wide Range of Applications:&lt;/strong&gt; Ruby is used by both startups and large corporations alike. From web applications to DevOps tools, and even automation and testing—Ruby has a broad array of applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Examples of Applications Using Ruby
&lt;/h2&gt;

&lt;p&gt;Ruby and Ruby on Rails have been employed to develop many well-known applications, such as:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Basecamp:&lt;/strong&gt; A project management tool that became one of the first high-profile Ruby on Rails applications, gaining massive popularity for its simplicity and effectiveness.&lt;br&gt;
&lt;strong&gt;- GitHub:&lt;/strong&gt; A platform for hosting and reviewing code. GitHub has become the collaboration center for millions of developers worldwide.&lt;br&gt;
&lt;strong&gt;- Shopify:&lt;/strong&gt; A popular e-commerce platform enabling entrepreneurs to set up online stores quickly and easily.&lt;br&gt;
&lt;strong&gt;- Airbnb:&lt;/strong&gt; A short-term rental platform that started its journey with Ruby on Rails. This framework helped Airbnb swiftly develop features and scale globally.&lt;br&gt;
&lt;strong&gt;- SoundCloud:&lt;/strong&gt; A music sharing platform that uses Ruby on Rails to handle vast amounts of data and user interactions.&lt;br&gt;
&lt;strong&gt;- Hulu:&lt;/strong&gt; A popular streaming service offering a wide range of movies and TV shows.&lt;br&gt;
&lt;strong&gt;- Zendesk:&lt;/strong&gt; A customer service tool also built using Ruby.&lt;br&gt;
&lt;strong&gt;- Hey:&lt;/strong&gt; A modern email platform created by the makers of Basecamp.&lt;br&gt;
&lt;strong&gt;- Dribbble:&lt;/strong&gt; A social platform for graphic designers and creative professionals to showcase their work.&lt;br&gt;
&lt;strong&gt;- Kickstarter:&lt;/strong&gt; A crowdfunding platform that helps creators gather funds for their projects.&lt;br&gt;
&lt;strong&gt;- Heroku:&lt;/strong&gt; A platform-as-a-service (PaaS) offering cloud app hosting.&lt;br&gt;
&lt;strong&gt;- Coinbase:&lt;/strong&gt; A popular cryptocurrency exchange.&lt;br&gt;
&lt;strong&gt;- Cookpad:&lt;/strong&gt; A social recipe-sharing service.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ruby is NOT Dead!
&lt;/h2&gt;

&lt;p&gt;Every so often, rumours surface in the developer community about the "downfall" of a particular language. However, if you visit &lt;a href="//isrubydead.com"&gt;isrubydead.com&lt;/a&gt;, you’ll quickly see that Ruby is very much alive! With robust community support and new tools like Hotwire, Ruby remains one of the top programming languages. In reality, Ruby is continuously evolving, gaining new technologies that enhance its functionality and performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Journey to Choosing Ruby
&lt;/h2&gt;

&lt;p&gt;My journey with Ruby began quite by accident. While scrolling through Instagram, I came across the profile of &lt;a class="mentioned-user" href="https://dev.to/andrzejkrzywda"&gt;@andrzejkrzywda&lt;/a&gt; At that time, Andrzej was regularly sharing stories about programming, business, and, of course, Ruby. His insights and enthusiasm piqued my interest.&lt;/p&gt;

&lt;p&gt;Andrzej encouraged learning Ruby and offered a course titled "From zero to first application." I decided to give it a shot and enrolled in the course (I'll discuss the course and my learning process in a separate post). This course turned out to be a perfect fit, providing me with solid foundations and guidance on building my first application.&lt;/p&gt;

&lt;p&gt;I wanted to create web applications, and Ruby, along with Ruby on Rails, was the ideal tool for that. Thanks to its readable syntax and the powerful capabilities of the Rails framework, I quickly managed to build my first applications, reaffirming my choice. Ruby also allowed me to focus on real business problems, avoiding overly complex technical implementations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Choosing a programming language always depends on individual needs and goals. For me, Ruby turned out to be the best choice, especially for web application development. The buzz around Hotwire further solidified my belief that Ruby is a language of the future. If you're looking for simplicity, elegance, and powerful tools for building your projects, Ruby is worth a shot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For me, it was a bullseye, but I'm curious about your opinions!&lt;/strong&gt;&lt;br&gt;
Do you use Ruby? What are your experiences with this language? Maybe you have other favourite programming languages? Share your thoughts in the comments! Your feedback is invaluable, and I'd love to hear about your experiences and perspectives.&lt;/p&gt;

&lt;p&gt;Mati&lt;/p&gt;

</description>
      <category>career</category>
      <category>learning</category>
      <category>beginners</category>
      <category>ruby</category>
    </item>
    <item>
      <title>The Reason Behind My Career Change: Why I Decided to Leave My Previous Job and Pursue Programming</title>
      <dc:creator>Mati Palak</dc:creator>
      <pubDate>Thu, 13 Jun 2024 17:28:14 +0000</pubDate>
      <link>https://forem.com/palak/the-reason-behind-my-career-change-why-i-decided-to-leave-my-previous-job-and-pursue-programming-5bm7</link>
      <guid>https://forem.com/palak/the-reason-behind-my-career-change-why-i-decided-to-leave-my-previous-job-and-pursue-programming-5bm7</guid>
      <description>&lt;p&gt;Changing careers is a significant decision, and it's rarely an easy one. Many people find themselves at a crossroads, questioning their current job and wondering if there's something more fulfilling out there. There are several common reasons why individuals decide to change careers and venture into the world of programming:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lack of Job Satisfaction:&lt;/strong&gt; Many people feel unfulfilled in their current roles and seek a career that aligns more closely with their passions and interests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better Opportunities:&lt;/strong&gt; The tech industry offers numerous opportunities for growth, innovation, and financial stability, attracting those looking for a more promising future.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desire for Flexibility:&lt;/strong&gt; Programming can offer flexible working conditions, including remote work, which is appealing to many.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intellectual Challenge:&lt;/strong&gt; For those who love problem-solving and continuous learning, programming provides an intellectually stimulating environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While these reasons can be compelling, making a career change is not easy. It requires a lot of dedication, learning new skills, and sometimes starting from scratch. This journey demands resilience, patience, and a willingness to face and overcome challenges.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Personal Journey
&lt;/h2&gt;

&lt;p&gt;For me, the decision to change careers was driven by a need for significant changes in my life. After my divorce, I realized that I needed to reevaluate my path and find something that would bring me true satisfaction and allow me to grow.&lt;/p&gt;

&lt;p&gt;In my previous jobs, I often felt a lack of fulfillment. The work I was doing did not offer the opportunities for personal and professional development that I craved. I knew I had to make a change, but I wasn't sure what direction to take. My previous career paths had left me feeling stagnant, with no real prospects for growth or advancement. I wanted more from my professional life and needed to find a field that would challenge me and allow me to evolve.&lt;/p&gt;

&lt;p&gt;Interestingly, my passion for technology started at a young age. As a teenager, I used to upload simple websites to the internet using FTP. Although my family thought I would become a builder, it wasn't until years later that I discovered my true calling: building applications. This realization was both a surprise and a revelation. The idea of constructing something new and innovative, even if it was digital, resonated deeply with me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Programming?
&lt;/h2&gt;

&lt;p&gt;Choosing programming, and specifically Ruby, as my new career path was a decision born out of this rediscovered passion. Programming offered me the creative outlet I was looking for, and the ability to build something from scratch gave me a sense of accomplishment that I hadn't found in my previous roles.&lt;/p&gt;

&lt;p&gt;Ruby, in particular, stood out to me because of its elegant syntax and supportive community. The language's focus on simplicity and productivity made it an ideal choice for someone like me, who was diving into a new field and needed a language that was both powerful and accessible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overcoming Challenges
&lt;/h2&gt;

&lt;p&gt;The journey hasn't been without its challenges. Learning to code and transitioning into a new industry required a lot of hard work and perseverance. There were times when I doubted my decision and wondered if I had made a mistake. The learning curve was steep, and the field of programming can be overwhelming for a newcomer.&lt;/p&gt;

&lt;p&gt;However, I was fortunate to have the support of mentors and the programming community. Their guidance and encouragement played a crucial role in my development. They helped me navigate the complexities of coding and provided invaluable advice on how to advance in my new career.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding Fulfillment
&lt;/h2&gt;

&lt;p&gt;Today, I can say with confidence that making the switch to programming was one of the best decisions I've ever made. I now have a career that not only challenges me intellectually but also provides a sense of purpose and fulfillment. The satisfaction of solving complex problems and creating functional, elegant solutions is unparalleled.&lt;/p&gt;

&lt;h2&gt;
  
  
  Giving Back
&lt;/h2&gt;

&lt;p&gt;Now, it's time for me to give back to the community that has supported me throughout this journey. I owe a debt of gratitude to the mentors, colleagues, and friends who have helped me along the way. Through this blog, I hope to repay that debt by sharing my experiences and insights, and by helping others who are considering or undergoing a similar transition.&lt;/p&gt;

&lt;h2&gt;
  
  
  Join the Conversation
&lt;/h2&gt;

&lt;p&gt;If you're reading this and contemplating a career change, I encourage you to reflect on what truly fulfills you and where your passions lie. What are the reasons driving your desire for change? I'd love to hear your thoughts and experiences. Share your story in the comments below, and let's engage in a meaningful discussion about career changes, programming, and personal growth.&lt;/p&gt;

&lt;p&gt;Stay tuned for more posts, and don't hesitate to leave comments or questions. I look forward to connecting with you!&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

&lt;p&gt;Mati&lt;/p&gt;

</description>
      <category>career</category>
      <category>learning</category>
      <category>watercooler</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Welcome to My Journey: From Career Change to Ruby Developer</title>
      <dc:creator>Mati Palak</dc:creator>
      <pubDate>Thu, 06 Jun 2024 08:27:59 +0000</pubDate>
      <link>https://forem.com/palak/welcome-to-my-journey-from-career-change-to-ruby-developer-1a3e</link>
      <guid>https://forem.com/palak/welcome-to-my-journey-from-career-change-to-ruby-developer-1a3e</guid>
      <description>&lt;p&gt;Hello everyone and welcome to my blog! I’m thrilled to have you here as I share my journey of changing careers and becoming a Ruby developer. This blog will cover various topics related to my experiences, the lessons I’ve learned, and tips for anyone looking to embark on a similar path.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to Expect
&lt;/h2&gt;

&lt;p&gt;In the upcoming posts, I’ll be discussing a range of topics, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Reason Behind My Career Change:&lt;/strong&gt; Why I decided to leave my previous job and pursue programming.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choosing Ruby:&lt;/strong&gt; What made me choose Ruby as my primary programming language.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learning to Program:&lt;/strong&gt; The resources and methods I used to teach myself coding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Role of Mentorship:&lt;/strong&gt; How mentors played a crucial role in my development and success.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conference Highlights:&lt;/strong&gt; My experience meeting tech celebrities at a conference on my first day of employment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Overcoming Challenges:&lt;/strong&gt; How I handled being laid off and quickly found a new job.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Career Growth:&lt;/strong&gt; Doubling my salary as a junior developer and the strategies that helped me achieve this.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embracing Opportunities:&lt;/strong&gt; The importance of recognizing and seizing opportunities as they come.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m excited to share more about my journey, the technical challenges I encounter, and the strategies that help me overcome them. Whether you’re considering a career change or are already on your path to becoming a developer, I hope my experiences and insights will inspire and guide you.&lt;/p&gt;

&lt;p&gt;Thank you for reading, and I look forward to embarking on this adventure together. Stay tuned for more posts!&lt;/p&gt;

&lt;p&gt;Feel free to leave comments or questions below. I’d love to hear from you and engage in meaningful discussions about career changes, programming, and everything in between.&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

&lt;p&gt;Mati&lt;/p&gt;

</description>
      <category>career</category>
      <category>learning</category>
      <category>watercooler</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
