diff --git a/.gitkeep b/.gitkeep deleted file mode 100644 index e69de29..0000000 --- a/.gitkeep +++ /dev/null diff --git a/2025/.gitkeep b/2025/.gitkeep deleted file mode 100644 index e69de29..0000000 --- a/2025/.gitkeep +++ /dev/null diff --git a/2025/05/.gitkeep b/2025/05/.gitkeep deleted file mode 100644 index e69de29..0000000 --- a/2025/05/.gitkeep +++ /dev/null diff --git a/2025/05/example.md b/2025/05/example.md deleted file mode 100644 index 13883b9..0000000 --- a/2025/05/example.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Example Blog Post" -date: "2025-05-15" -author: "Jason Poage" ---- - -# Welcome to My Blog - -This is a sample blog post written in **Markdown**. - -## Features - -- Easy to write -- Converts to clean HTML -- Supports **bold**, *italic*, and `inline code` - -## Code Example - -```js -console.log("Hello, world!"); -``` diff --git a/2025/06/.gitkeep b/2025/06/.gitkeep deleted file mode 100644 index e69de29..0000000 --- a/2025/06/.gitkeep +++ /dev/null diff --git a/2025/06/fzf-with-fd-and-beyond.md b/2025/06/fzf-with-fd-and-beyond.md deleted file mode 100644 index 67d7840..0000000 --- a/2025/06/fzf-with-fd-and-beyond.md +++ /dev/null @@ -1,90 +0,0 @@ -# Why You Might Use `fzf` with `fd`—and Beyond - -At first glance, `fzf` looks like a simple fuzzy finder for your terminal. You type part of a string, and it finds the best matches in a list. That alone is powerful—but not enough. To use `fzf` effectively, you need to feed it good data. That’s where tools like `fd` come in. - -## The Role of `fd`: Clean Input for Better Output - -`fd` is a modern replacement for `find`. It's faster, more intuitive, and designed to work well with other command-line tools. While `fzf` handles fuzzy selection, `fd` generates the list of items you can select from. This separation of concerns is critical. - -Compare: - -```bash -fzf -```` - -This opens `fzf` with no input. It waits for something to search. You can type, but it does nothing useful. - -Now: - -```bash -fd . | fzf -``` - -`fd` recursively lists all files from the current directory. `fzf` then allows you to quickly pick the one you want. Together, they create an interactive file navigation system that’s faster and more flexible than a GUI. - -## Real World: Beyond File Navigation - -The power of `fzf` extends far beyond picking files: - -### 1. **Git Workflow Enhancement** - -```bash -git checkout $(git branch | fzf) -``` - -Quickly switch branches without remembering exact names. - -### 2. **Command History Search** - -```bash -history | fzf -``` - -Find a previously used command without paging through history. - -### 3. **Process Management** - -```bash -ps aux | fzf | awk '{print $2}' | xargs kill -``` - -Fuzzy-select a process to kill without manually finding the PID. - -### 4. **SSH Host Selection** - -```bash -cat ~/.ssh/known_hosts | cut -d',' -f1 | fzf | xargs ssh -``` - -Choose a remote host to connect to from your known SSH entries. - -### 5. **Running Scripts** - -```bash -ls ~/scripts | fzf | xargs -I{} bash ~/scripts/{} -``` - -Select a script to execute from a collection. - -### 6. **Systemd Service Control** - -```bash -systemctl list-units --type=service --all | fzf | awk '{print $1}' | xargs systemctl restart -``` - -Interactively restart a systemd service. - -## Why Pairing Matters - -`fzf` alone is an interface. What makes it useful is your data source. The better your source list, the more powerful your workflow. `fd`, `git`, `ps`, `ls`, `systemctl`, and even `cat` can be used as upstream providers to create dynamic, contextual interfaces with minimal overhead. - -Use `fzf` as a control mechanism: a selector for lists you define. Then pipe the output into whatever action you want to take. - -## Summary - -* `fzf` is a universal interface for selecting from a list. -* `fd` is a fast, modern file generator—perfect as input to `fzf`. -* The pairing allows efficient, focused file management. -* Outside of files, `fzf` improves speed, clarity, and precision in virtually every shell task involving lists. - -If you ever find yourself repeating grep or `cat` into `awk` to get a list just to copy and paste something—consider using `fzf` instead. diff --git a/drafts/nix-home-manager/CouplingVsDeCoupling.md b/drafts/nix-home-manager/CouplingVsDeCoupling.md deleted file mode 100644 index 8ea872a..0000000 --- a/drafts/nix-home-manager/CouplingVsDeCoupling.md +++ /dev/null @@ -1,60 +0,0 @@ -# Coupling vs Decoupling - -File structure of Nix-Config is lightly different from home-manager, because of the way the modules have to be imported. - -BTRFS is an optimal way I have found to organized nix-config into subvolumes. - -This can seem overwhelming at first. Don't obsess over the file stucture. It's best to have everything working first in one large file. Refactor as you go and start to get a feel for what should be a modules and what shouldn't be. - -You may not want to follow the same file hierarchy as me, everyone has different requirements. - -It's important to maintain a seperation of concerns. Configure everything with home manager. Retain the mind set that everything belongs in home-manager. It can be easy to get overwhelmed with what should go where, unless you are already very experienced and knowledgable with Linux. If you cannot make a nix-expression work for you in home-manager, that is a good time to explore adding it as part of the global nix-config. - -## NixOS - -- .git-crypt/ -- files/ -- hosts/ -- @modules/ (global space) -- @overlays/ (global space) -- secrets/ -- users/ - - home-manager/ - - @modules/ (global space) - - systemd/ - - @overlays/ (global space) - - @flakes/ (global space) - - systemd/ (user space) - - modules/ - - nixpkgs/ - - flakes/ -- .gitattributes -- .gitignore -- boot.nix -- configuration.nix -- hardware-configuration.nix -- environment.nix -- networking.nix -- packages.nix -- programs.nix -- security.nix -- services.nix -- systemd.nix -- usres.nix -- version.nix - -## Home Manager - -- @flakes/ (global space) -- @modules/ (global space) -- nixpkgs/ (user space) -- overlays/ (user space) -- systemd/ (user space) - - modules/ (user space) -- dotfiles.nix -- home-manager.nix -- home.nix -- packages.nix -- programs.nx -- sessionVariables.nix -- version.nix diff --git a/drafts/nixos/01.md b/drafts/nixos/01.md deleted file mode 100644 index e69de29..0000000 --- a/drafts/nixos/01.md +++ /dev/null diff --git a/pages/about.md b/pages/about.md new file mode 100644 index 0000000..b9e7966 --- /dev/null +++ b/pages/about.md @@ -0,0 +1,61 @@ +--- +## About Jason Poage / My Journey +--- + +### Introduction & Professional Summary + +Hello! I'm **Jason Poage**, a passionate and self-driven **software developer** based in Panama City, Florida. My journey into programming began at age 12, sparking a lifelong dedication to understanding complex systems and building robust solutions. I possess a strong foundation in **backend development, web technologies, and Linux systems**, and I'm adept at handling frontend work to deliver comprehensive web applications. I'm constantly exploring new ways to enhance efficiency and create impactful tools. + +--- + +### The Early Spark & Foundational Skills + +My fascination with technology began early. By age 12, I was already diving into **HTML, CSS, and JavaScript**, quickly expanding my skillset to include **PHP and MySQL**. In high school, I completed an entire web design course in just two weeks, spending the rest of the year assisting classmates and pursuing personal coding projects. This early self-driven approach laid the groundwork for my continuous learning journey. + +My early explorations included developing extensions for **phpBB and PHP-Fusion**, which evolved into building my own **content management systems and discussion boards** from scratch. This hands-on experience instilled a deep understanding of core web development principles, leading me to explore **functional programming, RESTful APIs, MVC paradigms**, and modern frameworks like **React, Express, and Node.js**. + +--- + +### Deep Dive into Systems & Linux Proficiency + +My technical curiosity extends deeply into operating systems and system administration. I've been actively using and exploring **Linux since age 16**, gaining **extensive practical experience** with various distributions including **Fedora, Debian, Arch Linux, Gentoo, Slackware, Ubuntu, and most recently, NixOS**. My **strong understanding** spans critical areas such as **file systems (Btrfs, Ext4), file permissions, logical volume management, PAM, Kerberos, SSSD, and Access Control Lists (ACLs)**. I'm also **highly proficient with Git** for version control. + +I particularly enjoy optimizing my development environment, which includes extensive use of the terminal. I love writing **shell scripts** to automate tasks and boost productivity, and I rely on tools like **tmux** to manage my workflows efficiently. + +While my primary focus is on web technologies and Linux, I also have experience with **Python** and have experimented with languages like **Clojure**, always eager to expand my toolkit and find the right solution for the problem at hand. + +--- + +### Beyond the Keyboard: Problem-Solving and Collaboration + +My passion for technology extends beyond writing code; I'm equally driven by the challenge of solving problems, improving processes, and fostering effective collaboration. These are values I've consistently brought to my academic and personal projects. + +For instance, in a project management class, I noticed team disorganization was hindering our progress. I proactively developed clear templates and introduced a role-based system that empowered everyone to self-assign tasks. This simple change fostered transparency and minimized micromanagement, leading to a remarkably smooth and efficient project completion that almost seemed to come together on its own. + +I also find immense satisfaction in helping others learn. I often prioritized assisting classmates who were struggling with complex topics like computer programming and SQL. Confidently leveraging my own efficiency and time management, I provided one-on-one tutoring, and it was incredibly rewarding to see their competence grow and their dependency reduce over time. + +Another memorable experience was during an Internet of Things course. I quickly realized the textbook examples were dysfunctional due to outdated libraries. Rather than just pointing out the problem, I took the initiative to debug and resolve these issues. I then shared my solutions, not only helping my classmates implement fixes but also assisting the professor in understanding and teaching the corrected labs, significantly improving the course experience for everyone involved. + +--- + +### Educational Journey & Continuous Learning + +My academic path has evolved with my passion for technology. While I initially earned an **Associate in Arts (AA) degree** with a focus on business, preparing me for an accounting program I ultimately chose not to pursue, my true calling in computer science became clear. + +I am currently pursuing an **Associate in Science (AS) degree in Software and Database Development**, a program perfectly aligned with my interests. Additionally, I am fulfilling the requirements to matriculate into **Florida State University's Bachelor of Science (BS) in Computer Science program**. This focused educational journey, combined with my extensive self-taught background, fuels my continuous growth as a software developer. I've consistently made the **Dean's List** and was invited into the **Phi Theta Kappa honor society**, reflecting my commitment to academic excellence. + +--- + +### Connecting & Contact + +I'm always open to discussing new projects, sharing insights, or exploring collaboration opportunities. Feel free to connect with me through my contact page or reach out via my professional social media: + +Link to LinkedIn Profile + +Link to GitHub Profile + + + + + +I look forward to connecting with you! diff --git a/pages/projects.md b/pages/projects.md new file mode 100644 index 0000000..c10b6b2 --- /dev/null +++ b/pages/projects.md @@ -0,0 +1,27 @@ +# My Projects + +Here you'll find a selection of my personal and academic projects, showcasing my skills in backend development, web technologies, and system administration. Each project represents a unique challenge and an opportunity to build robust, efficient, and user-centric solutions. + +--- + +### Project Title 1: _e.g., RESTful API for E-commerce_ + +A robust backend API built for an e-commerce platform, handling user authentication, product management, and order processing. + +**Technologies:** Node.js, Express.js, PostgreSQL, JWT, Docker +**My Role:** Designed the database schema, developed all API endpoints, implemented authentication middleware, and containerized the application with Docker. + +[View Code (GitHub)]([Link to GitHub Repo]) + +--- + +### Project Title 2: _e.g., Custom Content Management System_ + +A lightweight, custom CMS built from scratch, allowing users to create, edit, and publish dynamic web content. + +**Technologies:** PHP, MySQL, HTML, CSS, JavaScript +**My Role:** Developed the MVC architecture, implemented CRUD operations for content, and designed a responsive user interface. + +--- + +Stay tuned for more projects as I continue to build and explore new technologies! diff --git a/pages/tools.md b/pages/tools.md new file mode 100644 index 0000000..3334858 --- /dev/null +++ b/pages/tools.md @@ -0,0 +1,75 @@ +# My Developer Toolkit + +Welcome to my digital workbench. This page offers a glimpse into the essential tools and technologies that power my daily work, from crafting robust backend systems to fine-tuning frontend experiences and navigating the depths of Linux. My philosophy is to choose the right tool for the job, prioritizing efficiency, reliability, and the joy of building. + +--- + +## Core Development Environment + +These are the foundational tools that shape my coding experience: + +- **Visual Studio Code (VS Code):** My go-to IDE. Its marketplace, debugging capabilities, and Git integration make it indispensable. Highly customizable. + +- **Vim:** Beyond graphical editors, the terminal is my true home, and **Vim** is my steadfast companion within it. I extensively use Vim for its unparalleled efficiency and power as a text editor. Its modal editing paradigm and keyboard-driven interface allow for incredibly fast and precise code manipulation once mastered. I've configured my Vim environment with a carefully selected set of plugins and custom keybindings to optimize my workflow for development and system administration, enabling me to stay productive without ever leaving the terminal. + +- **Tmux:** Terminal multiplexer enabling multiple shell sessions, session persistence, and pane management. Boosts command-line productivity. + +- **Shell Scripting (Bash/Zsh):** Used for automating tasks and system configuration. Core productivity tool. + +- **Git:** Daily version control. Proficient with branches, commits, rebases, and collaboration workflows. + +--- + +## Backend & Database Technologies + +Strong foundation in backend systems and data persistence: + +- **Node.js:** Runtime for building scalable network applications. Used with Express.js for APIs. + +- **Express.js:** Minimalist web framework for Node.js. Ideal for RESTful services. + +- **PHP:** Legacy and ongoing use. Early web dev experience. + +- **MySQL:** Relational database. Skilled in schema design, querying, and optimization. + +- **PostgreSQL:** Preferred for complex data handling and feature-rich projects. + +- **Amazon Web Services (AWS):** Used for deployment, cloud services, and infrastructure management. + +--- + +## Frontend & Web Technologies + +Capable of delivering full-stack solutions: + +- **React:** Component-based JavaScript library for building user interfaces. + +- **HTML/CSS/JavaScript:** Core web stack. Strong understanding of structure, styling, and interactivity. + +--- + +## Operating Systems & System Administration + +Deep systems knowledge and command-line fluency: + +- **Linux (NixOS, Fedora, Debian, Arch Linux, Gentoo, Slackware, Ubuntu):** Long-time user across distributions. Daily driver: **NixOS** for its declarative configuration and reproducibility. + +- **File Systems (Btrfs, Ext4):** Experienced with data integrity, snapshots (Btrfs), and standard Ext4 usage. + +- **System Concepts:** Proficient with: + - File permissions + - Logical Volume Management (LVM) + - PAM + - Kerberos + - SSSD + - Access Control Lists (ACLs) + +--- + +## Other Languages & Exploration + +Continual exploration to expand tool proficiency: + +- **Python:** Used for scripting, automation, and tasks beyond Bash’s scope. Leverages libraries and strong documentation. + +- **Clojure:** Functional programming exposure. Explored for its concurrency model and paradigm shift benefits. diff --git a/posts/.gitkeep b/posts/.gitkeep new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/posts/.gitkeep diff --git a/posts/2025/.gitkeep b/posts/2025/.gitkeep new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/posts/2025/.gitkeep diff --git a/posts/2025/05/.gitkeep b/posts/2025/05/.gitkeep new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/posts/2025/05/.gitkeep diff --git a/posts/2025/05/example.md b/posts/2025/05/example.md new file mode 100644 index 0000000..13883b9 --- /dev/null +++ b/posts/2025/05/example.md @@ -0,0 +1,21 @@ +--- +title: "Example Blog Post" +date: "2025-05-15" +author: "Jason Poage" +--- + +# Welcome to My Blog + +This is a sample blog post written in **Markdown**. + +## Features + +- Easy to write +- Converts to clean HTML +- Supports **bold**, *italic*, and `inline code` + +## Code Example + +```js +console.log("Hello, world!"); +``` diff --git a/posts/2025/06/.gitkeep b/posts/2025/06/.gitkeep new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/posts/2025/06/.gitkeep diff --git a/posts/2025/06/fzf-with-fd-and-beyond.md b/posts/2025/06/fzf-with-fd-and-beyond.md new file mode 100644 index 0000000..67d7840 --- /dev/null +++ b/posts/2025/06/fzf-with-fd-and-beyond.md @@ -0,0 +1,90 @@ +# Why You Might Use `fzf` with `fd`—and Beyond + +At first glance, `fzf` looks like a simple fuzzy finder for your terminal. You type part of a string, and it finds the best matches in a list. That alone is powerful—but not enough. To use `fzf` effectively, you need to feed it good data. That’s where tools like `fd` come in. + +## The Role of `fd`: Clean Input for Better Output + +`fd` is a modern replacement for `find`. It's faster, more intuitive, and designed to work well with other command-line tools. While `fzf` handles fuzzy selection, `fd` generates the list of items you can select from. This separation of concerns is critical. + +Compare: + +```bash +fzf +```` + +This opens `fzf` with no input. It waits for something to search. You can type, but it does nothing useful. + +Now: + +```bash +fd . | fzf +``` + +`fd` recursively lists all files from the current directory. `fzf` then allows you to quickly pick the one you want. Together, they create an interactive file navigation system that’s faster and more flexible than a GUI. + +## Real World: Beyond File Navigation + +The power of `fzf` extends far beyond picking files: + +### 1. **Git Workflow Enhancement** + +```bash +git checkout $(git branch | fzf) +``` + +Quickly switch branches without remembering exact names. + +### 2. **Command History Search** + +```bash +history | fzf +``` + +Find a previously used command without paging through history. + +### 3. **Process Management** + +```bash +ps aux | fzf | awk '{print $2}' | xargs kill +``` + +Fuzzy-select a process to kill without manually finding the PID. + +### 4. **SSH Host Selection** + +```bash +cat ~/.ssh/known_hosts | cut -d',' -f1 | fzf | xargs ssh +``` + +Choose a remote host to connect to from your known SSH entries. + +### 5. **Running Scripts** + +```bash +ls ~/scripts | fzf | xargs -I{} bash ~/scripts/{} +``` + +Select a script to execute from a collection. + +### 6. **Systemd Service Control** + +```bash +systemctl list-units --type=service --all | fzf | awk '{print $1}' | xargs systemctl restart +``` + +Interactively restart a systemd service. + +## Why Pairing Matters + +`fzf` alone is an interface. What makes it useful is your data source. The better your source list, the more powerful your workflow. `fd`, `git`, `ps`, `ls`, `systemctl`, and even `cat` can be used as upstream providers to create dynamic, contextual interfaces with minimal overhead. + +Use `fzf` as a control mechanism: a selector for lists you define. Then pipe the output into whatever action you want to take. + +## Summary + +* `fzf` is a universal interface for selecting from a list. +* `fd` is a fast, modern file generator—perfect as input to `fzf`. +* The pairing allows efficient, focused file management. +* Outside of files, `fzf` improves speed, clarity, and precision in virtually every shell task involving lists. + +If you ever find yourself repeating grep or `cat` into `awk` to get a list just to copy and paste something—consider using `fzf` instead. diff --git a/posts/drafts/nix-home-manager/CouplingVsDeCoupling.md b/posts/drafts/nix-home-manager/CouplingVsDeCoupling.md new file mode 100644 index 0000000..8ea872a --- /dev/null +++ b/posts/drafts/nix-home-manager/CouplingVsDeCoupling.md @@ -0,0 +1,60 @@ +# Coupling vs Decoupling + +File structure of Nix-Config is lightly different from home-manager, because of the way the modules have to be imported. + +BTRFS is an optimal way I have found to organized nix-config into subvolumes. + +This can seem overwhelming at first. Don't obsess over the file stucture. It's best to have everything working first in one large file. Refactor as you go and start to get a feel for what should be a modules and what shouldn't be. + +You may not want to follow the same file hierarchy as me, everyone has different requirements. + +It's important to maintain a seperation of concerns. Configure everything with home manager. Retain the mind set that everything belongs in home-manager. It can be easy to get overwhelmed with what should go where, unless you are already very experienced and knowledgable with Linux. If you cannot make a nix-expression work for you in home-manager, that is a good time to explore adding it as part of the global nix-config. + +## NixOS + +- .git-crypt/ +- files/ +- hosts/ +- @modules/ (global space) +- @overlays/ (global space) +- secrets/ +- users/ + - home-manager/ + - @modules/ (global space) + - systemd/ + - @overlays/ (global space) + - @flakes/ (global space) + - systemd/ (user space) + - modules/ + - nixpkgs/ + - flakes/ +- .gitattributes +- .gitignore +- boot.nix +- configuration.nix +- hardware-configuration.nix +- environment.nix +- networking.nix +- packages.nix +- programs.nix +- security.nix +- services.nix +- systemd.nix +- usres.nix +- version.nix + +## Home Manager + +- @flakes/ (global space) +- @modules/ (global space) +- nixpkgs/ (user space) +- overlays/ (user space) +- systemd/ (user space) + - modules/ (user space) +- dotfiles.nix +- home-manager.nix +- home.nix +- packages.nix +- programs.nx +- sessionVariables.nix +- version.nix diff --git a/posts/drafts/nixos/01.md b/posts/drafts/nixos/01.md new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/posts/drafts/nixos/01.md