<?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: Franklin Strube</title>
    <description>The latest articles on Forem by Franklin Strube (@fstrube).</description>
    <link>https://forem.com/fstrube</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%2F2805290%2Fd76b4e8b-17f5-4916-b101-90f4f6c1e3e8.jpeg</url>
      <title>Forem: Franklin Strube</title>
      <link>https://forem.com/fstrube</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/fstrube"/>
    <language>en</language>
    <item>
      <title>Free 5-Part Laravel Introduction Series</title>
      <dc:creator>Franklin Strube</dc:creator>
      <pubDate>Wed, 04 Feb 2026 17:03:35 +0000</pubDate>
      <link>https://forem.com/fstrube/free-5-part-laravel-introduction-series-12bj</link>
      <guid>https://forem.com/fstrube/free-5-part-laravel-introduction-series-12bj</guid>
      <description>&lt;p&gt;If you're looking to get into app development, &lt;a href="https://laravel.com" rel="noopener noreferrer"&gt;Laravel&lt;/a&gt; is a great framework that has just about every component you need: models, controllers, auth, background queues, web sockets / broadcasting, and more. There are a lot of resources out there for learning Laravel, and even their &lt;a href="https://laravel.com/docs" rel="noopener noreferrer"&gt;docs&lt;/a&gt; are top-tier. &lt;/p&gt;

&lt;p&gt;Last year, I put together a free five-part series on my blog that introduces Laravel to new developers. It goes a little deeper than the docs, and includes tips for troubleshooting some common errors that may hinder a beginner.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://franklinstrube.com/blog/how-to-laravel-blog-project-setup" rel="noopener noreferrer"&gt;How to Build a Blog with Laravel - Part 1 - Project Setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://franklinstrube.com/blog/how-to-laravel-blog-database-stuff" rel="noopener noreferrer"&gt;How to Build a Blog with Laravel - Part 2 - Database Stuff&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://franklinstrube.com/blog/how-to-laravel-blog-controllers-and-routing" rel="noopener noreferrer"&gt;How to Build a Blog with Laravel - Part 3 - Controllers and Routing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://franklinstrube.com/blog/how-to-laravel-blog-authentication-fortify" rel="noopener noreferrer"&gt;How to Build a Blog with Laravel - Part 4 - Authentication with Fortify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://franklinstrube.com/blog/how-to-laravel-blog-frontend-picocss" rel="noopener noreferrer"&gt;How to Build a Blog with Laravel - Part 5 - Frontend with PicoCSS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hopefully these articles can help you if you're a beginner and want to give Laravel a try!&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Are you working from home? Chances are you're doing it wrong.</title>
      <dc:creator>Franklin Strube</dc:creator>
      <pubDate>Mon, 19 Jan 2026 07:23:23 +0000</pubDate>
      <link>https://forem.com/fstrube/are-you-working-from-home-chances-are-youre-doing-it-wrong-38i5</link>
      <guid>https://forem.com/fstrube/are-you-working-from-home-chances-are-youre-doing-it-wrong-38i5</guid>
      <description>&lt;p&gt;In a recent blog about &lt;a href="https://franklinstrube.com/blog/benefits-of-coworking-in-a-remote-culture" rel="noopener noreferrer"&gt;the benefits of co-working&lt;/a&gt;, I outline seven reasons why you should get out of the house and co-work with friends, family, or even strangers.&lt;/p&gt;

</description>
      <category>workplace</category>
      <category>productivity</category>
      <category>nomad</category>
    </item>
    <item>
      <title>Is Omarchy Any Good...?</title>
      <dc:creator>Franklin Strube</dc:creator>
      <pubDate>Mon, 19 Jan 2026 06:59:24 +0000</pubDate>
      <link>https://forem.com/fstrube/is-omarchy-any-good-3069</link>
      <guid>https://forem.com/fstrube/is-omarchy-any-good-3069</guid>
      <description>&lt;p&gt;In case you've been living under a rock, you've probably heard the buzz about &lt;a href="https://omarchy.org" rel="noopener noreferrer"&gt;Omarcy Linux&lt;/a&gt; (the new-ish Linux distro that is the brainchild of &lt;a href="https://37signals.com" rel="noopener noreferrer"&gt;37signals&lt;/a&gt; co-founder, &lt;a href="https://dhh.dk/" rel="noopener noreferrer"&gt;David Heinemeier Hansson&lt;/a&gt;). I've been slowly rolling it out across my home systems, and blogging as I go.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the good parts of Omarchy?
&lt;/h2&gt;

&lt;p&gt;First and foremost, the look-and-feel of the operating system is superb. You can really tell that the team behind the project have spent a good deal of time on making things minimal yet robust.&lt;/p&gt;

&lt;p&gt;All aspects of the operating system are accessed primarily by keyboard shortcuts (and mouse clicks in just a few cases). I like this, especially because I do a lot of work on a laptop.&lt;/p&gt;

&lt;p&gt;Being based on &lt;a href="https://archlinux.org/" rel="noopener noreferrer"&gt;Arch Linux&lt;/a&gt; means you have thousands upon thousands of software applications at your fingertips. I've been able to install development environments, docker containers, and retro games without any problems.&lt;/p&gt;

&lt;p&gt;I've found that Omarchy can breathe new life into old hardware. The desktop environment runs on very minimal resources. Window management is snappy, and as long as you're not running resource-intensive applications then you're fine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's talk tiling window managers...
&lt;/h2&gt;

&lt;p&gt;I know, they're kind of a polarizing topic. It's a first for me, but now that I'm used to the keyboard shortcuts it feels pretty natural. I think if you have a large monitor it makes a difference, especially when working with multiple windows. &lt;/p&gt;

&lt;p&gt;One thing that I think would be nice is the ability to hide a window without closing the application. It would be a helpful way to manage your screen real-estate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where does Omarchy fall short?
&lt;/h2&gt;

&lt;p&gt;So far I'm zero-for-two on running the Omarchy update tool. First one bricked my desktop, and I had to restore from backups. Second &lt;em&gt;nearly&lt;/em&gt; bricked my laptop. I had to login from a bootable USB and &lt;code&gt;arch-chroot&lt;/code&gt; then reinstall the Linux kernel.&lt;/p&gt;

&lt;h2&gt;
  
  
  The verdict
&lt;/h2&gt;

&lt;p&gt;Despite some rough edges, Omarchy is a compelling experiment in thoughtful operating system design. It feels opinionated in a good way: focused, fast, and built for people who live on their keyboards and value simplicity. If you enjoy tinkering, don’t mind getting your hands a little dirty when things go sideways, and want a Linux environment that feels both modern and intentional, Omarchy is well worth trying.&lt;/p&gt;

&lt;p&gt;You can read more about my Omarchy journey over at &lt;a href="https://franklinstrube.com" rel="noopener noreferrer"&gt;franklinstrube.com&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://franklinstrube.com/blog/omarchy-begins" rel="noopener noreferrer"&gt;Omarchy Begins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://franklinstrube.com/blog/omarchy-on-old-hardware" rel="noopener noreferrer"&gt;Omarchy on Old Hardware&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://franklinstrube.com/blog/omarchy-acer-c720-chromebook" rel="noopener noreferrer"&gt;Omarchy on an Acer C720 Chromebook&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>omarchy</category>
      <category>linux</category>
      <category>archlinux</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Introducing Frak.js: Simple, Scriptable Code Deployments</title>
      <dc:creator>Franklin Strube</dc:creator>
      <pubDate>Tue, 13 Jan 2026 03:42:07 +0000</pubDate>
      <link>https://forem.com/fstrube/introducing-frakjs-simple-scriptable-code-deployments-1g6l</link>
      <guid>https://forem.com/fstrube/introducing-frakjs-simple-scriptable-code-deployments-1g6l</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/frakjs/frak" rel="noopener noreferrer"&gt;Frak.js&lt;/a&gt; is a rewrite of an internal tool we’ve relied on at work for years, rebuilt from the ground up with a single goal: make server administration simple, repeatable, and boring in the best way possible.&lt;/p&gt;

&lt;p&gt;At its core, &lt;strong&gt;Frak.js&lt;/strong&gt; uses two battle-tested tools you already trust:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;ssh&lt;/code&gt;&lt;/strong&gt; for running commands on remote machines&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;rsync&lt;/code&gt;&lt;/strong&gt; for efficiently copying files to those machines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No agents. No background daemons. No magic.&lt;/p&gt;

&lt;p&gt;Getting started is intentionally boring:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @frakjs/frak init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it. No global installs, no configuration rabbit holes. You’re up and running in seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Frak.js Exists
&lt;/h2&gt;

&lt;p&gt;Most deployment and server management tools fall into one of two categories:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Too heavy&lt;/strong&gt; — full configuration management systems that require learning an ecosystem, installing agents, and maintaining state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Too ad hoc&lt;/strong&gt; — shell scripts and one-off commands that work until they don’t, then slowly drift into chaos.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Frak.js&lt;/strong&gt; sits intentionally in the middle.&lt;/p&gt;

&lt;p&gt;It assumes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You’re comfortable with SSH access&lt;/li&gt;
&lt;li&gt;You want explicit control over what runs and where&lt;/li&gt;
&lt;li&gt;You don’t want to reinvent the same deployment scripts for every project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Frak.js&lt;/strong&gt; doesn’t try to model your infrastructure. It helps you &lt;em&gt;operate it&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works (Conceptually)
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;Frak.js&lt;/strong&gt; workflow typically looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Define what files should be synced to a remote server&lt;/li&gt;
&lt;li&gt;Define what commands should run before or after that sync&lt;/li&gt;
&lt;li&gt;Execute the workflow against one or more servers&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Under the hood:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;rsync&lt;/code&gt;&lt;/strong&gt; handles file transfers efficiently&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SSH&lt;/strong&gt; executes commands remotely&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frak.js&lt;/strong&gt; coordinates the order, structure, and repeatability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is a clear, auditable process that can live alongside your codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Case 1: Hobby Projects and Side Projects
&lt;/h2&gt;

&lt;p&gt;If you’ve ever deployed a personal project by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SCP’ing files manually&lt;/li&gt;
&lt;li&gt;SSH’ing in and running commands by memory&lt;/li&gt;
&lt;li&gt;Hoping you didn’t forget a step&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Frak.js is for you.&lt;/p&gt;

&lt;p&gt;With a simple configuration, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sync your app to a VPS&lt;/li&gt;
&lt;li&gt;Restart services&lt;/li&gt;
&lt;li&gt;Run migrations or setup scripts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes deploying a hobby project feel intentional instead of fragile—without introducing heavyweight tooling that feels disproportionate to the project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Case 2: Raspberry Pi and Home Servers
&lt;/h2&gt;

&lt;p&gt;Raspberry Pi setups are notorious for being:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manually configured&lt;/li&gt;
&lt;li&gt;Poorly documented&lt;/li&gt;
&lt;li&gt;Hard to reproduce after “just one more tweak”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Frak.js works well here because it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requires nothing running on the Pi except SSH&lt;/li&gt;
&lt;li&gt;Lets you codify setup steps and updates&lt;/li&gt;
&lt;li&gt;Makes it easy to manage multiple devices consistently&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you’re running a home media server, a Pi-hole, or a small cluster of devices, Frak.js gives you a repeatable way to apply changes without turning your home lab into a snowflake.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Case 3: Production Environments
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Frak.js&lt;/strong&gt; was born out of real production usage, and it shows.&lt;/p&gt;

&lt;p&gt;For small teams or focused services, it can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deploy application updates&lt;/li&gt;
&lt;li&gt;Run controlled administrative commands&lt;/li&gt;
&lt;li&gt;Serve as a transparent alternative to opaque CI/CD magic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because it relies on SSH and rsync, it integrates cleanly into existing security models and operational practices. There’s no black box—just clear steps you can reason about and debug.&lt;/p&gt;

&lt;h2&gt;
  
  
  Built to Be Understandable
&lt;/h2&gt;

&lt;p&gt;One of the guiding principles behind Frak.js is &lt;strong&gt;clarity over cleverness&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You should be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read a Frak.js configuration and understand exactly what will happen&lt;/li&gt;
&lt;li&gt;Run it locally without special infrastructure&lt;/li&gt;
&lt;li&gt;Trust that it’s doing only what you told it to do&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s not trying to replace Kubernetes, Terraform, or Ansible. It’s for the space where those tools feel like too much—and where shell scripts feel like too little.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Next
&lt;/h2&gt;

&lt;p&gt;Frak.js is still evolving, but its foundation is deliberately simple. If you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deploy code over SSH&lt;/li&gt;
&lt;li&gt;Manage small-to-medium servers&lt;/li&gt;
&lt;li&gt;Value explicit, repeatable workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…then &lt;strong&gt;Frak.js&lt;/strong&gt; may already fit naturally into how you work.&lt;/p&gt;

&lt;p&gt;More documentation, examples, and real-world workflows are coming soon.&lt;/p&gt;

&lt;p&gt;See &lt;a href="https://github.com/frakjs/frak" rel="noopener noreferrer"&gt;github.com/frakjs/frak&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Always Version-Control Your Lock Files</title>
      <dc:creator>Franklin Strube</dc:creator>
      <pubDate>Thu, 24 Jul 2025 21:08:12 +0000</pubDate>
      <link>https://forem.com/fstrube/always-version-control-your-lock-files-k88</link>
      <guid>https://forem.com/fstrube/always-version-control-your-lock-files-k88</guid>
      <description>&lt;p&gt;It misses the whole point of version-control if you're not adding your lock files (&lt;code&gt;yarn.lock&lt;/code&gt;, &lt;code&gt;package-lock.json&lt;/code&gt;, or &lt;code&gt;composer.lock&lt;/code&gt;) to your repos. Think about it this way: there should be as few steps as possible between &lt;code&gt;git checkout&lt;/code&gt; and a fully functional version of your app. It's totally acceptable to defer version-controlling lock files until a release is published, but whatever your version-control strategy, it should include the lock files, for sure.&lt;/p&gt;

&lt;p&gt;The same goes for build assets in &lt;code&gt;public/build&lt;/code&gt; or similar location. If you're doing the build in a CI/CD pipeline, that's fine. Just make sure there is a "source of truth" and an audit trail that verifies the assets are authentic. Version-controlling with &lt;code&gt;git&lt;/code&gt; is the perfect way to do it.&lt;/p&gt;

&lt;p&gt;So remove &lt;code&gt;yarn.lock&lt;/code&gt; from &lt;code&gt;.gitignore&lt;/code&gt;, and don't look back.&lt;/p&gt;

</description>
      <category>git</category>
      <category>javascript</category>
      <category>php</category>
      <category>devops</category>
    </item>
    <item>
      <title>🔐 Securing Data at Rest and In Transit: A Practical Overview</title>
      <dc:creator>Franklin Strube</dc:creator>
      <pubDate>Fri, 11 Jul 2025 02:30:38 +0000</pubDate>
      <link>https://forem.com/fstrube/securing-data-at-rest-and-in-transit-a-practical-overview-3fpg</link>
      <guid>https://forem.com/fstrube/securing-data-at-rest-and-in-transit-a-practical-overview-3fpg</guid>
      <description>&lt;p&gt;Computer security is slippery—vulnerabilities exist from firmware to frontend. If you’re storing or moving sensitive data, your best bet is a layered approach. Here’s how to think about securing data &lt;strong&gt;at rest&lt;/strong&gt; and &lt;strong&gt;in transit&lt;/strong&gt; in real-world systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  💾 Data at Rest
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Data at rest&lt;/strong&gt; lives in databases, disk storage, backups, etc.&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Encrypt everything&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use AES-256 or similar.&lt;/li&gt;
&lt;li&gt;Full-disk encryption + field-level encryption where needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ &lt;strong&gt;Tighten access control&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Least privilege for users and systems.&lt;/li&gt;
&lt;li&gt;Enforce RBAC or ABAC.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ &lt;strong&gt;Protect your keys&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use a key vault (e.g., HashiCorp Vault, AWS KMS).&lt;/li&gt;
&lt;li&gt;Rotate regularly. Don’t hardcode secrets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ &lt;strong&gt;Log and monitor&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Track who’s reading/writing sensitive data.&lt;/li&gt;
&lt;li&gt;Set alerts on anomalies.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌐 Data in Transit
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Data in transit&lt;/strong&gt; flows over networks—between clients, services, APIs.&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;TLS everywhere&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use TLS 1.2+ with strong ciphers.&lt;/li&gt;
&lt;li&gt;Validate certs. Avoid self-signed in prod.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ &lt;strong&gt;End-to-end encryption&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Especially for messaging/P2P apps.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ &lt;strong&gt;Secure internal communication&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use VPNs, service meshes, or zero-trust networking.&lt;/li&gt;
&lt;li&gt;Don't blindly trust internal IPs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ &lt;strong&gt;Defend the app layer&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Input validation, CSRF/XSS protection, rate limiting.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧱 TL;DR: Defense in Depth Wins
&lt;/h2&gt;

&lt;p&gt;You won’t stop every attack. But you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Minimize the blast radius 🔥&lt;/li&gt;
&lt;li&gt;Detect problems early 🔍&lt;/li&gt;
&lt;li&gt;Make breaches expensive and noisy 💸&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Security isn't a checkbox—it's a mindset.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Want the full post? Head on over to &lt;a href="https://franklinstrube.com/blog/security-how-to-keep-data-safe-at-rest-and-in-transit" rel="noopener noreferrer"&gt;franklinstrube.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>data</category>
    </item>
    <item>
      <title>The AI Surge: How Large Language Models Are Transforming the Way We Code</title>
      <dc:creator>Franklin Strube</dc:creator>
      <pubDate>Tue, 08 Jul 2025 06:20:59 +0000</pubDate>
      <link>https://forem.com/fstrube/the-ai-surge-how-large-language-models-are-transforming-the-way-we-code-2fk8</link>
      <guid>https://forem.com/fstrube/the-ai-surge-how-large-language-models-are-transforming-the-way-we-code-2fk8</guid>
      <description>&lt;p&gt;Artificial Intelligence (or Large Language Models, if we're being specific) are all the rage these days. What started as a novelty—AI generating poems, jokes, or essays—has rapidly evolved into a transformative force in software development. Not only can AI write fluent, coherent English, it can now write code at a blistering pace.&lt;/p&gt;

&lt;p&gt;Gone are the days of scouring Stack Overflow for the right snippet. Today, developers are pairing up with machines that understand natural language, anticipate intent, and fill in the blanks—literally—as they type. Editors like &lt;a href="https://cursor.com" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt;, &lt;a href="https://windsurf.com/" rel="noopener noreferrer"&gt;Windsurf&lt;/a&gt;, and &lt;a href="https://www.anthropic.com/claude-code" rel="noopener noreferrer"&gt;Claude&lt;/a&gt; are leading the charge, offering autocomplete on steroids. They predict what you’ll write next—sometimes before you’ve even thought of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Auto-Complete to Co-Creation
&lt;/h2&gt;

&lt;p&gt;Traditional autocomplete tools simply finished off function names or suggested common syntax patterns. But tools built on LLMs (like GPT-4, Claude, or proprietary models from Anthropic and Google) go several steps further. They're context-aware, project-savvy, and increasingly capable of:&lt;/p&gt;

&lt;p&gt;🔨 Refactoring legacy code&lt;br&gt;&lt;br&gt;
🚨 Writing tests with minimal prompts&lt;br&gt;&lt;br&gt;
🐞 Debugging errors and suggesting fixes&lt;br&gt;&lt;br&gt;
📝 Translating code between languages&lt;br&gt;&lt;br&gt;
📚 Explaining code to junior developers&lt;br&gt;&lt;br&gt;
🔥 Prototyping entire features from a description&lt;/p&gt;

&lt;p&gt;It's not just autocomplete anymore—it's co-creation. The best tools feel less like assistants and more like collaborative partners.&lt;/p&gt;

&lt;h2&gt;
  
  
  The New Development Workflow
&lt;/h2&gt;

&lt;p&gt;Let’s face it: most developers today don’t write code line-by-line from memory. They Google. They copy-paste. They iterate. Now, with LLMs baked into their editors, the cycle becomes even faster. You describe what you want—sometimes vaguely—and the AI offers a complete, executable solution.&lt;/p&gt;

&lt;p&gt;Need a REST API endpoint in &lt;strong&gt;Express.js&lt;/strong&gt;? Describe it in plain English, and it’s done. Want a &lt;strong&gt;SQL query&lt;/strong&gt; to handle a gnarly recursive relationship? The AI has likely seen thousands and will generate one instantly. Even the initial drafts of pull requests are being written by machines.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations and a Word of Caution
&lt;/h2&gt;

&lt;p&gt;Of course, this isn’t a silver bullet. AI-generated code can still be buggy, inefficient, or even insecure. The LLM doesn’t “understand” code the way a human does—it mimics patterns it has seen before. Blind trust in its output can be risky.&lt;/p&gt;

&lt;p&gt;That’s why human oversight, testing, and code review are more essential than ever. Think of AI as a junior dev with infinite energy and no ego—great at suggesting ideas, not so great at making judgment calls.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Next?
&lt;/h2&gt;

&lt;p&gt;As LLMs become more tightly integrated into IDEs and CI/CD pipelines, the nature of software development will continue to shift. Writing code will look more like designing systems and expressing intent—and less like grinding through syntax and boilerplate.&lt;/p&gt;

&lt;p&gt;It’s an exciting time to be a developer. The tools we use are becoming more powerful, more contextual, and more conversational. We're not just writing code anymore—we're collaborating with machines that can help us think faster, build smarter, and dream bigger.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>coding</category>
      <category>programming</category>
    </item>
    <item>
      <title>Dopamine-Driven Development: Why That "It Works!" Moment Feels So Good</title>
      <dc:creator>Franklin Strube</dc:creator>
      <pubDate>Fri, 06 Jun 2025 02:25:02 +0000</pubDate>
      <link>https://forem.com/fstrube/dopamine-driven-development-why-that-it-works-moment-feels-so-good-50kj</link>
      <guid>https://forem.com/fstrube/dopamine-driven-development-why-that-it-works-moment-feels-so-good-50kj</guid>
      <description>&lt;p&gt;✅ Identify the challenge&lt;br&gt;
✅ Write code&lt;br&gt;
✅ It works!&lt;br&gt;
🧠 Brain reward system activated&lt;br&gt;
🚀 Confidence skyrockets&lt;/p&gt;

&lt;p&gt;This is Dopamine-Driven Development. &lt;/p&gt;

&lt;p&gt;If you've ever felt a rush of excitement when your code finally works—congratulations, you've experienced &lt;strong&gt;Dopamine-Driven Development&lt;/strong&gt; (3D). It's that unmistakable high when a feature clicks into place, the test turns green, or a clever one-liner does exactly what you hoped. For many developers, these little victories are what keep the momentum going day to day.&lt;/p&gt;

&lt;p&gt;Software engineering is often framed as logical, analytical work. But behind the scenes, it’s a deeply emotional experience. When we face down a bug, a blank screen, or a complex architectural problem, we’re not just engaging our brains—we’re triggering our reward system. Every time we overcome a challenge, dopamine gets released, reinforcing the behavior. That’s why even small wins, like successfully refactoring a function or improving performance by 2%, can feel disproportionately satisfying.&lt;/p&gt;

&lt;p&gt;Of course, this can cut both ways. The pursuit of that dopamine hit can lead to shortcuts, like skipping documentation or ignoring edge cases just to see something “working.” That's where discipline and balance come in—acknowledging the value of these feel-good moments, but also remembering to pair them with sustainable practices like testing, reviewing, and planning.&lt;/p&gt;

&lt;p&gt;Dopamine-Driven Development isn't a bad thing—it’s one of the quiet motivators that keeps us curious, engaged, and pushing through the hard parts. So go ahead, celebrate that passing test. Just don’t forget to delete all those console.logs 😎.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>JavaScript is so redundant</title>
      <dc:creator>Franklin Strube</dc:creator>
      <pubDate>Tue, 03 Jun 2025 02:39:28 +0000</pubDate>
      <link>https://forem.com/fstrube/javascript-is-so-redundant-3fd4</link>
      <guid>https://forem.com/fstrube/javascript-is-so-redundant-3fd4</guid>
      <description>&lt;p&gt;Why are there so many JavaScript build tools? &lt;a href="https://gulpjs.com/" rel="noopener noreferrer"&gt;Gulp&lt;/a&gt;, &lt;a href="https://gruntjs.com/" rel="noopener noreferrer"&gt;Grunt&lt;/a&gt;, &lt;a href="https://webpack.js.org/" rel="noopener noreferrer"&gt;Webpack&lt;/a&gt;, &lt;a href="https://laravel-mix.com/" rel="noopener noreferrer"&gt;Laravel Mix&lt;/a&gt;, &lt;a href="https://rollupjs.org/" rel="noopener noreferrer"&gt;Rollup.js&lt;/a&gt;, and now &lt;a href="https://vite.dev" rel="noopener noreferrer"&gt;Vite&lt;/a&gt;. And these are just the ones that I've worked with. Haven't we solved this problem? And why build a new tool? Why not improve existing tools?&lt;/p&gt;

&lt;p&gt;I think about predecessors like &lt;a href="https://www.gnu.org/software/make/" rel="noopener noreferrer"&gt;GNU Make&lt;/a&gt;. Sure, it's old, but it's tried and true. The invocation is consistent and has been for years: &lt;code&gt;make [command]&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;How different would the world be if the Node.js ecosystem adopted Make as the preferred mechanism for running scripts, instead of &lt;code&gt;npm run [command]&lt;/code&gt;? I guess we'd be seeing a lot more &lt;code&gt;Makefile&lt;/code&gt;'s around.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>rant</category>
    </item>
    <item>
      <title>I built a Markdown editor and preview tool in 2025 with NO Copilot</title>
      <dc:creator>Franklin Strube</dc:creator>
      <pubDate>Thu, 13 Mar 2025 02:15:22 +0000</pubDate>
      <link>https://forem.com/fstrube/i-built-a-markdown-editor-and-preview-tool-in-2025-with-no-copilot-5eac</link>
      <guid>https://forem.com/fstrube/i-built-a-markdown-editor-and-preview-tool-in-2025-with-no-copilot-5eac</guid>
      <description>&lt;p&gt;It's 2025 and the year of vibe coding. You reach for your favorite AI and let it run wild while you chill in between prompts. If I were a smart man, I would jump on the bandwagon. But for some reason I'm lagging behind on this one.&lt;/p&gt;

&lt;p&gt;I recently started a side project (&lt;a href="https://slickpdf.com" rel="noopener noreferrer"&gt;slickpdf.com&lt;/a&gt;), and was able to launch it completely without AI. Full stack, no AI was used in the creation of the project. Not that this is an accomplishment or anything. Honestly, it's more of a confession. AI greatly reduces overhead, especially when starting from scratch. I could've had Copilot scaffold my landing page, or asked ChatGPT to flesh out my app UI using &lt;a href="https://primevue.org/" rel="noopener noreferrer"&gt;PrimeVue&lt;/a&gt;. These steps would've saved me hours of work. But no, instead I opted for the hand-written approach of yesteryear. True, it's thrilling, and I like the control of knowing that I wrote and inspected every line of code. But I'm left to wonder how much faster I can ship with a little sprinkle of the AI pixie dust.&lt;/p&gt;

&lt;p&gt;Anyways, don't forget what you're capable of without AI. Remember that it's a tool to make you better at something you're already good at. It augments your existing skills.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to convert Markdown to PDF</title>
      <dc:creator>Franklin Strube</dc:creator>
      <pubDate>Mon, 24 Feb 2025 04:36:14 +0000</pubDate>
      <link>https://forem.com/fstrube/how-to-convert-markdown-to-pdf-29b4</link>
      <guid>https://forem.com/fstrube/how-to-convert-markdown-to-pdf-29b4</guid>
      <description>&lt;p&gt;There are a million and one document formats out there that all seem to do one thing or another. However, I've found that simplicity is key. You want something that is simple to read under-the-hood, but predictable when presented on screen. &lt;/p&gt;

&lt;h2&gt;
  
  
  Avoid classic word-processors like MS Word
&lt;/h2&gt;

&lt;p&gt;Document formats like MS Word are risky because, while universal, they are subject to things like text re-flow, especially when opened in different environments (either the fonts are missing or don't work, or your word processor renders the content differently compared to mine). &lt;/p&gt;

&lt;h2&gt;
  
  
  PDFs are known for being consistent
&lt;/h2&gt;

&lt;p&gt;PDF is a bullet-proof format when it comes to display, and when created properly, it embeds fonts so that it will always be rendered perfectly on any machine. However, PDF documents under-the-hood aren't quite that readable by human eyes.&lt;/p&gt;

&lt;h1&gt;
  
  
  Markdown is a simple text-based format
&lt;/h1&gt;

&lt;p&gt;Enter Markdown. Markdown is a format that is human-readable. Paragraphs are simply lines of text. Headings begin with a single #-sign or more. Bold text is surrounded by stars like &lt;strong&gt;**this**&lt;/strong&gt;. It's just easy on the eyes.&lt;/p&gt;

&lt;h1&gt;
  
  
  Markdown to PDF is a powerful workflow
&lt;/h1&gt;

&lt;p&gt;Typically, Markdown is converted to HTML in order to be formatted for the web. This is great, but what if you're not serving the Markdown via a browser? If you're a student, you may be required to turn in a PDF of your assignment. What if you want to generate a PDF so you can publish a book? By writing your documents in Markdown and converting them to PDF, you get the ease of writing text plus the ubiquity of displaying a PDF. It's a great workflow for publishing printable media.&lt;/p&gt;

&lt;h1&gt;
  
  
  How do you convert Markdown to PDF?
&lt;/h1&gt;

&lt;p&gt;There are a handful of excellent command-line tools, and &lt;a href="https://pandoc.org/" rel="noopener noreferrer"&gt;Pandoc&lt;/a&gt; comes to mind. It is not just a one-trick pony, too. With Pandoc you can convert between many different formats.&lt;/p&gt;

&lt;p&gt;Another option is to go with a purpose-built tool, like &lt;a href="https://slickpdf.com" rel="noopener noreferrer"&gt;SlickPDF&lt;/a&gt;. I built &lt;a href="https://slickpdf.com" rel="noopener noreferrer"&gt;slickpdf.com&lt;/a&gt; for the very purpose of going from Markdown to PDF. &lt;a href="https://app.slickpdf.com" rel="noopener noreferrer"&gt;Give it a try!&lt;/a&gt;. It uses &lt;a href="https://marked.js.org/" rel="noopener noreferrer"&gt;marked.js&lt;/a&gt; under the hood, and presents a live preview rendered on a Letter-size (8.5 in. x 11 in.) page.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2F9z9dpznuuil1j8o1b98d.png" class="article-body-image-wrapper"&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%2Farticles%2F9z9dpznuuil1j8o1b98d.png" alt="Image description" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;So the next time you need to publish a PDF either for school, or for work, or just for fun, consider writing it in Markdown. You'll get the ease of "just typing" and a beautiful end product.&lt;/p&gt;

</description>
      <category>markdown</category>
      <category>pdf</category>
    </item>
    <item>
      <title>Think about all the greats that came before you.</title>
      <dc:creator>Franklin Strube</dc:creator>
      <pubDate>Mon, 17 Feb 2025 17:51:40 +0000</pubDate>
      <link>https://forem.com/fstrube/think-about-all-the-greats-that-came-before-you-e77</link>
      <guid>https://forem.com/fstrube/think-about-all-the-greats-that-came-before-you-e77</guid>
      <description>&lt;p&gt;I think often about the course of history in computing, and find myself in awe of our accomplishments as a community. It's innovation at a rapid pace, to say the least.&lt;/p&gt;

&lt;p&gt;Have you ever wondered just how much is possible due to the work those that came before you? Think about something as seemingly mundane as text encoding. The &lt;a href="https://www.youtube.com/watch?v=MijmeoH9LT4" rel="noopener noreferrer"&gt;design of Unicode&lt;/a&gt; is something of genius.&lt;/p&gt;

&lt;p&gt;Or take, for instance, the PDF. A document format that pre-dates the rise of the Internet and still thrives to this day. The &lt;a href="https://opensource.adobe.com/dc-acrobat-sdk-docs/pdfstandards/pdfreference1.7old.pdf" rel="noopener noreferrer"&gt;PDF reference&lt;/a&gt; is itself a PDF. How meta is that?!&lt;/p&gt;

&lt;p&gt;This is why I love building in public. Because it connects people accross the world through a common interest in improving the status quo. So, maybe on this holiday, think of one thing you take for granted in the computing space and dig a little bit into its history. You may find inspiration along the way.&lt;/p&gt;

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

</description>
      <category>history</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
