Josh Finnie

https://links.jfin.us 🏠 Charlotte, NC ☀️ Software Engineer @ PDL 🌙 Building PicSkyApp.com Lover of data, cycling, fountain pens, writing, and photograph

370 followers1728 following176 stories

Longform Stories

Josh Finnie | Senior Software Engineer & Data Nerd

2d ago·1 min read·9 words

About

Senior software engineer and data nerd based in Charlotte, NC. I build large-scale APIs and backend systems, and write about Rust, Go, Python, and JavaScript.

2d ago·1 min read·26 words

About

Senior software engineer and data nerd based in Charlotte, NC. I build large-scale APIs and backend systems, and write about Rust, Go, Python, and JavaScript.

2d ago·1 min read·26 words

Josh Finnie | Senior Software Engineer & Data Nerd

Senior software engineer and data nerd at People Data Labs.

2d ago·1 min read·19 words

Uses

JoshFinnie.com | Uses

May 26·1 min read·4 words

diffai

May 26·1 min read·1 words

I Built a Terminal Diff Viewer for Working with Claude Code

diffai is a terminal diff viewer with inline commenting, built specifically for the two-pane workflow of reviewing code changes alongside Claude Code.

May 20·1 min read·33 words

What I Put in Every Go SaaS Before Writing a Single Feature

A walkthrough of kairgos, a Go SaaS skeleton with multi-tenancy, async AI inference, JWT rotation, and a background worker — built before a single business feature ships.

Apr 27·1 min read·39 words

Product Ready Full Stack Rust

Part 6 of building a full-stack URL shortener in Rust. We serve the Yew frontend from Axum, Dockerize the whole thing, and deploy to Shuttle.

Apr 24·1 min read·30 words

Front End Development with Yew.rs

Part 5 of building a full-stack URL shortener in Rust. We build a Yew.rs frontend that compiles to WebAssembly and talks to our Axum API.

Apr 20·1 min read·30 words

Django Authentication & Deployment

In the final part of the Django Bootcamp, we add user authentication with Django's built-in auth system and deploy our bookmark manager to production with Railway.

Apr 19·1 min read·30 words

Building a Cozy Terminal Fire in Rust

How I built firesym, a terminal fire simulation based on the DOOM PSX fire algorithm, using Rust and ratatui.

Apr 10·1 min read·26 words

Authentication in a Full-Stack Rust

Part 4 of building a full-stack URL shortener in Rust. We add API key authentication using Axum middleware and Tower layers to protect our write endpoints.

Apr 8·1 min read·31 words

Django Views & Templates

In this beginner-friendly guide, we build out the views and templates for our bookmark manager — listing bookmarks, viewing details, creating new ones, and deleting them.

Apr 7·1 min read·30 words

Error Handling & Validation in Rust

Part 3 of building a full-stack URL shortener in Rust. We add custom error types, URL validation, and structured JSON error responses to our Axum API.

Mar 30·1 min read·32 words

Models & the Django Admin

In this beginner-friendly guide, we define our bookmark model, run database migrations, and explore Django's built-in admin panel to manage our data.

Mar 30·1 min read·27 words

You Can't Afford a House, But Sure, Blame the Avocado Toast

The avocado toast discourse isn't just stupid. It's a symptom of a story that wealthy societies tell themselves to avoid reckoning with how wealth actually works.

Mar 23·1 min read·37 words

Why Is It So Hard to Find a Software Engineering Job Right Now?

The software engineering job market in 2025 and 2026 is broken in ways that are new and strange. Here's what's actually happening, and what to do about it.

Mar 19·1 min read·41 words

Stop Hedging: Build the API

The cost of standing up a well-structured API has collapsed. In 2026, senior engineers don't need permission to ship one.

Mar 17·1 min read·25 words

The New Bottleneck: Why Operations Is the Wall AI Builders Keep Hitting

Building software used to be the hard part. Now the constraint is operations — and it has surprisingly good tooling behind it.

Mar 17·1 min read·34 words

Persisting Data with sqlx and SQLite

Part 2 of building a full-stack URL shortener in Rust. We swap our in-memory HashMap for SQLite with sqlx, write migrations, and persist URLs across restarts.

Mar 14·1 min read·32 words

Creating Your First Django Project

In this beginner-friendly guide, we create our first Django project, explore its file structure, and build our first view to display a page in the browser.

Mar 9·1 min read·31 words

Writing Python Docstrings Effectively

A practical guide to writing Python docstrings effectively, covering the __doc__ attribute, help(), Google, NumPy, and Sphinx styles, choosing the right structure, avoiding common mistakes, and genera…

Mar 6·1 min read·37 words

PicSkyApp.com

Mar 2·1 min read·1 words

TikiCompass.com

Mar 2·1 min read·1 words

Setting Up AWS SES with a Custom Domain

AWS SES is one of the most cost-effective ways to send transactional email, but getting it configured properly takes a few non-obvious steps. Here's the complete walkthrough.

Mar 1·1 min read·35 words

Adding a Copy Code Button to My Astro Blog

A step-by-step walkthrough of how I added a copy-to-clipboard button with a language label to every code block on my Astro blog using a single component and no external libraries.

Feb 23·1 min read·39 words

pushfile

Feb 19·1 min read·1 words

PBS.org

Feb 19·1 min read·1 words

BeerLedge

Feb 19·1 min read·1 words

CubeCobra

Feb 19·1 min read·1 words

How Old Is This Metro Car?

Feb 19·1 min read·6 words

Building a Full-Stack Rust Application

Part 1 of building a full-stack URL shortener in Rust. We set up an Axum backend with in-memory storage, CRUD routes, and a nanoid-based slug generator.

Feb 19·1 min read·31 words

Getting Started with Python for Web Development

This beginner-friendly guide covers the basics of Python, setting up virtual environments, installing pip, and why Django is the best choice for building powerful web applications.

Jan 9·1 min read·33 words

My Top 20 Albums of 2025

A look back at the albums that defined my year, from experimental hip-hop to art rock to electronic pop.

Dec 4·1 min read·25 words

MIT's $1.2 Trillion Iceberg

Examining the MIT Iceberg Index's claim that AI could replace 11.7% of U.S. wages, and why the real-world execution of mass replacement is unlikely to succeed.

Nov 27·1 min read·30 words

Why I Switched From Tex Live to Tectonic

Slash your LaTeX Docker build times by 85% and reduce image sizes by 95%! Learn how switching from TeX Live to Tectonic transformed my containerized LaTeX workflow with faster builds and leaner images…

Nov 17·1 min read·41 words

The Fatal Flaw in Silicon Valley's AI Gold Rush

Tech giants are investing $400 billion in AI infrastructure while cutting thousands of jobs. This analysis explores the economic contradiction at the heart of automation: why replacing workers with ma…

Nov 15·1 min read·57 words

Amazon's AI Layoffs: A Marxist Analysis of Automation and Class Power

Amazon blamed AI for cutting 30,000 jobs while posting record profits and raising CEO pay 37%. We break down the Marxist economics behind tech layoffs: how automation intensifies worker exploitation, …

Nov 1·1 min read·73 words

ASTs Explained: How Abstract Syntax Trees Fix the Chaos of Resume Parsing

Discover how Abstract Syntax Trees (ASTs) solve the format chaos of traditional resumes, turning unstructured documents into reliable, structured data for programmatic generation and analysis.

Oct 14·1 min read·37 words

ASTs Explained: How Abstract Syntax Trees Fix the Chaos of Resume Parsing

Discover how Abstract Syntax Trees (ASTs) solve the format chaos of traditional resumes, turning unstructured documents into reliable, structured data for programmatic generation and analysis.

Oct 14·1 min read·37 words

ASTs Explained: How Abstract Syntax Trees Fix the Chaos of Resume Parsing

Discover how Abstract Syntax Trees (ASTs) solve the format chaos of traditional resumes, turning unstructured documents into reliable, structured data for programmatic generation and analysis.

Oct 14·1 min read·37 words

Rubber Duck Debugging: The Simplest Developer Tool You Are Not Using Enough

Discover how rubber duck debugging can transform your coding experience. Learn why explaining your code to a simple rubber duck is one of the most effective troubleshooting techniques that experienced…

Sep 5·1 min read·61 words

Rubber Duck Debugging: The Simplest Developer Tool You Are Not Using Enough

Discover how rubber duck debugging can transform your coding experience. Learn why explaining your code to a simple rubber duck is one of the most effective troubleshooting techniques that experienced…

Sep 5·1 min read·61 words

Building a Word Count Tool in Rust: Step-By-Step

Learn how to build a word count command line utility in Rust from scratch. This step-by-step guide shows you how to create a functional wc tool that counts lines, words, and bytes in files. Perfect fo…

Jun 27·1 min read·72 words

FastAPI and React in 2025

A step-by-step guide to building modern web applications with FastAPI and React in 2025, featuring Vite for faster development and UV for improved Python package management.

Jun 18·1 min read·31 words

Revealing Gender Bias in AI Models

Reposting a paper I did for my UMGC AI Ethics class. It was an interesting exploration into inherent biases in AI models. I reviewed both ChatGPT and Gemini and wrote about the results.

Jan 29·1 min read·39 words

15 Years of Blogging

I noticed while checking my copyright date that I have been blogging for 15 years now. I thought it would be an interesting time to write a bit of a retrospective.

Jan 12·1 min read·35 words

Music of 2024

A brief review of the music I found and fell in love with across all of 2024.

Dec 31·1 min read·20 words

Adding ESLint & Prettier to My Blog

I recently took some time to add ESLint and Prettier to my Astro blog. Here an easy todo to follow and some of my lessons learned.

Dec 2·1 min read·33 words

Review of Buildspace Nights & Weekends

I recently finished Buildspace Nights & Weekends. This is my review.

Aug 29·1 min read·17 words

Review of Buildspace Nights & Weekends

I recently finished Buildspace Nights & Weekends. This is my review.

Aug 29·1 min read·17 words

Adding json-ld To My Blog

In this blog post, we talk about what JSON-LD is and how I implemented it on my Astro.build blog. It was quick and easy; definitely worth a look!

Apr 15·1 min read·33 words

Trying out HTMX with Rust

In this blog post, we walk through building an example app with Rust, Axum and HTMX. This is really cool and a simple way to build web apps. No Javascript framework needed.

Jan 15·1 min read·37 words

Switching to PNPM for Everything Node.js?

In this blog post I talk about my exploration in switching to using PNPM everywhere instead of NPM and NVM.

Dec 19·1 min read·26 words

Unleashing the Power of Python Collections

A deep dive into Python's Collections module. There's a lot of helpful tools there that everyone should know about!

Nov 17·1 min read·25 words

Creating a vCard QR Code in Python

<DESCRIPTION>

Nov 8·1 min read·8 words

24 Hours with Threads by Instagram

I have been playing around with Threads by Instagram for about 24 hours, it's surprisingly good.

Jul 6·1 min read·22 words

Follow Up: Building a Command-Line Application in Rust

Jul 3·1 min read·8 words

A Quick Review of Spotify's AI DJ

I took a week to listen to Spotify's AI DJ. This is my quick review of it. How'd it work? Did I like it?

Jun 29·1 min read·31 words

Astro Experimental Image and MDX Update

This blog post we discuss the process of adding both MDX support and Astro.js Experimental Asset support. We describe step-by-step the process I took to adding each to this exact blog.

Jun 21·1 min read·37 words

My 2023 Job Search Journey

A brief review of my job search journey in the 2023 market. I applied to over 150 jobs and it was exhausting!

Jun 7·1 min read·27 words

Creating a "Similar Posts" Component in Astro.js

This blog post shares my Astro.js component to share similar posts to readers. It's nice, simple and gives an extra layer of discoverability to my readers!

Feb 27·1 min read·33 words

Taking a Look at Astro 2.0

<DESCRIPTION>

Jan 31·1 min read·7 words

Building a Command-Line Application in Rust

In this blog post we start from scratch and write a full command-line application written in Rust. We use Clap for argument parsing, and Reqwest for hitting the API.

Dec 19·1 min read·35 words

Why participate in Advent of Code (2022)?

Advent of Code is an annual challenge to push your coding skills. This blog post talks about some of the reasons to join! Let's do it!

Nov 30·1 min read·33 words

Leaving Twitter for Mastodon

Twitter has had a rough couple of weeks since Elon Musk took over. I feel like it is time this tweeter flew the coop and found a new place to build a community. This post talks briefly about what Mast…

Nov 15·1 min read·53 words

An Obit for Heroku

The death of Heroku's free option is a huge loss. In this post we discuss why...

Sep 1·1 min read·20 words

Chrome Extensions I Use in 2022

Showing off my top Chrome extensions for 2022.

Jul 21·1 min read·14 words

Set Up Flask and Restx with Docker

This blog post summarizes my experiments with Flask, Restx and Docker. I go over the steps I took to get a simple Todo application from start to finish.

Jun 1·1 min read·35 words

Set Up Flask and Restx with Docker

This blog post summarizes my experiments with Flask, Restx and Docker. I go over the steps I took to get a simple Todo application from start to finish.

Jun 1·1 min read·35 words

Set Up Flask and Restx with Docker

This blog post summarizes my experiments with Flask, Restx and Docker. I go over the steps I took to get a simple Todo application from start to finish.

Jun 1·1 min read·35 words

Moving from Oh-My-Zsh to Starship & Fish Shell

I changed my prompt configurator from Oh-My-Zsh to Starship.rs and with that changed my shell to Fish. This blog post tells the story of my upgrade and the pitfalls and benefits of moving to Fish Shel…

Apr 5·1 min read·44 words

Getting Truffle and Ganache Working with Docker

I recently had an issue installing Truffle locally on my computer. There was an issue with my version of Node.js or NPM... Instead of messing up or polluting my global NPM installs further, I took to …

Mar 9·1 min read·57 words

My 2021 Books in Review

This is a review of the books I read in 2021 and which ones I'd recommend giving a try.

Jan 3·1 min read·24 words

Current Thoughts on Mobile Website Support

I recently had a viral blog post and I wanted to share a surprising discovery of the current state of mobile website support! Over the course of the month, nearly 50% of my visitors were using a mobil…

Dec 28·1 min read·56 words

ASDF: How To Set Up Runtimes on Windows Subsystem for Linux

In this blog post we discuss how to use ASDF to install and manage different language runtimes in a newly created Ubuntu VM on Windows Subsystem for Linux.

Dec 17·1 min read·39 words

ASDF: How To Set Up Runtimes on Windows Subsystem for Linux

In this blog post we discuss how to use ASDF to install and manage different language runtimes in a newly created Ubuntu VM on Windows Subsystem for Linux.

Dec 17·1 min read·39 words

Using WebAssembly (created in Rust) for Fast React Components

In this blog post we will learn how to leverage the Rust programming language to compile WebAssembly which we will then use in our React application. This gives us access to low-level components to sp…

Nov 23·1 min read·47 words

My Switch from Gatsby to Astro

Why I migrated my blog from Gatsby to Astro for zero-JS static sites with faster load times.

Oct 28·1 min read·23 words

Book Review: The 12 Week Year

How quarterly goal-setting cycles replace annual resolutions with urgency-driven, achievable milestones.

Sep 30·1 min read·17 words

One Year Later

Reflecting on one year of pandemic isolation, remote work, and hoping for a future with more opportunities.

Mar 11·1 min read·20 words

My 2020 React.js Start-up Process

Set up React with TypeScript, ESLint, Prettier, and organized component structure for modern development.

Jul 8·1 min read·19 words

Upgrading Gatsby to Use Mdx

Migrate Gatsby from Markdown to MDX to use React components in blog posts with cleaner rendering.

Jun 12·1 min read·21 words

Upgrading Gatsby to Use Mdx

Switch from Markdown to MDX in Gatsby to embed React components like Link and custom Unsplash credits.

Jun 12·1 min read·22 words

Hacktoberfest is AWESOME!

Participating in Hacktoberfest 2019: complete four pull requests in October and earn a free t-shirt.

Oct 1·1 min read·18 words

Using Latex Through Docker

Skip complex LaTeX installations on macOS by creating a portable Docker container for generating PDFs.

Sep 17·1 min read·19 words

My Basic isort Configuration

Automate Python import sorting with isort to reduce code review bikeshedding and maintain consistent style.

Aug 20·1 min read·19 words

My Basic Python Dockerfile

A reusable Python Dockerfile template featuring dumb-init, non-root user setup, and best practices.

Jun 6·1 min read·17 words

Setting up SSL for www.joshfinnie.com

Generate free Let's Encrypt SSL certificates for S3/Cloudfront static sites using certbot and AWS CLI.

May 21·1 min read·20 words

Setting up SSL for www.joshfinnie.com

Generate free Let's Encrypt SSL certificates for S3/Cloudfront static sites using certbot and AWS CLI.

May 21·1 min read·20 words

My Coffee Setup (2018)

Equipment recommendations for making great coffee at home: grinders, brewing vessels, kettles, and espresso.

Mar 8·1 min read·18 words

My Coffee Setup (2018)

Equipment recommendations for making great coffee at home: grinders, brewing vessels, kettles, and espresso.

Mar 8·1 min read·18 words

New Years Resolutions for 2018 and 2017 Review

Switching from annual to quarterly goals for 2018 after completing only 1 of 5 resolutions in 2017.

Jan 1·1 min read·25 words

New Years Resolutions for 2018 and 2017 Review

Switching from annual to quarterly goals for 2018 after completing only 1 of 5 resolutions in 2017.

Jan 1·1 min read·25 words

New Years Resolutions for 2017 and 2016 Review

Narrowing focus for 2017: restart blogging, learn Go, and speak at conferences after 4 of 15 goals in 2016.

Jan 1·1 min read·27 words

New Years Resolutions for 2017 and 2016 Review

Narrowing focus for 2017: restart blogging, learn Go, and speak at conferences after 4 of 15 goals in 2016.

Jan 1·1 min read·27 words

I Am Still Here

A quick update on upcoming React.js ES2015 tutorials and NPM package development content.

Mar 31·1 min read·17 words

I Am Still Here

A quick update on upcoming React.js ES2015 tutorials and NPM package development content.

Mar 31·1 min read·17 words

I Am Still Here

A quick update on upcoming React.js ES2015 tutorials and NPM package development content.

Mar 31·1 min read·17 words

New Years Resolutions for 2016 and 2015 Review

Setting 2016 goals for blogging, photography, and conferences while reviewing 2015 results (7 of 13 achieved).

Jan 1·1 min read·24 words

New Years Resolutions for 2016 and 2015 Review

Setting 2016 goals for blogging, photography, and conferences while reviewing 2015 results (7 of 13 achieved).

Jan 1·1 min read·24 words

React.js Tutorial Part 4

Build Express API routes to serve JSON data and connect React components using the request library.

Sep 16·1 min read·20 words

React.js Tutorial Part 4

Build Express API routes to serve JSON data and connect React components using the request library.

Sep 16·1 min read·20 words

React.js Tutorial Part (Interlude 2)

Use npm-check-updates to safely upgrade React and other packages by reviewing changelogs for breaking changes.

Aug 10·1 min read·20 words

React.js Tutorial Part (Interlude 2)

Use npm-check-updates to safely upgrade React and other packages by reviewing changelogs for breaking changes.

Aug 10·1 min read·20 words

React.js Tutorial Part (Interlude 2)

Use npm-check-updates to safely upgrade React and other packages by reviewing changelogs for breaking changes.

Aug 10·1 min read·20 words

React.js Tutorial Part (Interlude 2)

Use npm-check-updates to safely upgrade React and other packages by reviewing changelogs for breaking changes.

Aug 10·1 min read·20 words

React.js Tutorial Part 3

Create reusable Job components in React: build nested components that iterate over data with props and state.

Apr 5·1 min read·21 words

React.js Tutorial Part 3

Create reusable Job components in React: build nested components that iterate over data with props and state.

Apr 5·1 min read·21 words

React.js Tutorial Part (Interlude)

Add Bower, Bootstrap SASS, and Gulp automation to a React/Express app for better asset management.

Mar 8·1 min read·19 words

React.js Tutorial Part (Interlude)

Add Bower, Bootstrap SASS, and Gulp automation to a React/Express app for better asset management.

Mar 8·1 min read·19 words

React.js Tutorial Part (Interlude)

Add Bower, Bootstrap SASS, and Gulp automation to a React/Express app for better asset management.

Mar 8·1 min read·19 words

React.js Tutorial Part (Interlude)

Add Bower, Bootstrap SASS, and Gulp automation to a React/Express app for better asset management.

Mar 8·1 min read·19 words

React.js Tutorial Part 2

Automate JSX compilation with Gulp, Browserify, and Reactify for efficient React development workflow.

Feb 4·1 min read·17 words

React.js Tutorial Part 2

Automate JSX compilation with Gulp, Browserify, and Reactify for efficient React development workflow.

Feb 4·1 min read·17 words

2014 In Review

A year of big changes: new job at TrackMaven, got married, and doubled down on open source contributions.

Feb 1·1 min read·21 words

2014 In Review

A year of big changes: new job at TrackMaven, got married, and doubled down on open source contributions.

Feb 1·1 min read·21 words

React.js Tutorial Part 1

Build a job board with React and Express: set up JSX compilation and create your first component.

Jan 10·1 min read·21 words

React.js Tutorial Part 1

Build a job board with React and Express: set up JSX compilation and create your first component.

Jan 10·1 min read·21 words

New Years Resolutions for 2015 and 2014 Review

Reviewing 2014 goals (7 of 12 completed) and setting new 2015 resolutions for open source and blogging.

Jan 4·1 min read·25 words

New Years Resolutions for 2015 and 2014 Review

Reviewing 2014 goals (7 of 12 completed) and setting new 2015 resolutions for open source and blogging.

Jan 4·1 min read·25 words

WTF Recruiters - Take 2

Another amusing recruiter email shows persistence doesn't always mean effective outreach tactics.

Dec 19·1 min read·17 words

WTF Recruiters - Take 2

Another amusing recruiter email shows persistence doesn't always mean effective outreach tactics.

Dec 19·1 min read·17 words

NodeSchool @ NationJS Postmortem

Running a successful NodeSchool event for 120 students: prep tips, mentor meetings, and lessons learned.

Nov 21·1 min read·19 words

NodeSchool @ NationJS Postmortem

Running a successful NodeSchool event for 120 students: prep tips, mentor meetings, and lessons learned.

Nov 21·1 min read·19 words

Using Bower

Manage JavaScript dependencies with Bower: track versions, customize install locations, and integrate with Gulp.

Nov 3·1 min read·16 words

Using Bower

Manage JavaScript dependencies with Bower: track versions, customize install locations, and integrate with Gulp.

Nov 3·1 min read·16 words

WTF Recruiters?

When recruiter outreach goes too far: an email about blood sacrifices and stuffed animals crosses the line.

Sep 30·1 min read·19 words

WTF Recruiters?

When recruiter outreach goes too far: an email about blood sacrifices and stuffed animals crosses the line.

Sep 30·1 min read·19 words

Adding Markdown to Jade Using Node.js

Use the marked library to write cleaner Jade templates by converting Markdown to HTML for inline code formatting.

Sep 22·1 min read·24 words

Adding Markdown to Jade Using Node.js

Use the marked library to write cleaner Jade templates by converting Markdown to HTML for inline code formatting.

Sep 22·1 min read·24 words

Adding Markdown to Jade Using Node.js

Use the marked library to write cleaner Jade templates by converting Markdown to HTML for inline code formatting.

Sep 22·1 min read·24 words

Setting Up HTTPS Security

Secure your server with SSL certificates: obtain CSR, configure Apache/Nginx, and harden cipher settings.

Sep 20·1 min read·18 words

Setting Up HTTPS Security

Secure your server with SSL certificates: obtain CSR, configure Apache/Nginx, and harden cipher settings.

Sep 20·1 min read·18 words

Using Pygments with Static Blogs

Add syntax highlighting to Markdown blogs with Pygments: generate CSS and specify language in code blocks.

May 20·1 min read·21 words

Using Pygments with Static Blogs

Add syntax highlighting to Markdown blogs with Pygments: generate CSS and specify language in code blocks.

May 20·1 min read·21 words

Auto-Starting Tmux in iTerm2

Configure iTerm2 to automatically attach to or create a tmux session on startup with a simple command.

May 16·1 min read·21 words

Auto-Starting Tmux in iTerm2

Configure iTerm2 to automatically attach to or create a tmux session on startup with a simple command.

May 16·1 min read·21 words

Auto-Starting Tmux in iTerm2

Configure iTerm2 to automatically attach to or create a tmux session on startup with a simple command.

May 16·1 min read·21 words

Changing the Default Screenshot Location

Stop cluttering your desktop by changing the OS X screenshot save location using the defaults command.

Feb 4·1 min read·21 words

Changing the Default Screenshot Location

Stop cluttering your desktop by changing the OS X screenshot save location using the defaults command.

Feb 4·1 min read·21 words

Updating Mavericks and Postgres.app

Fix broken virtualenvs after upgrading to Mavericks and Postgres.app 9.3 by updating libssl symlinks.

Jan 27·1 min read·18 words

Updating Mavericks and Postgres.app

Fix broken virtualenvs after upgrading to Mavericks and Postgres.app 9.3 by updating libssl symlinks.

Jan 27·1 min read·18 words

New Years Resolutions for 2014

Goals for 2014: blog weekly, contribute to open source, complete NaNoWriMo, and get married.

Jan 1·1 min read·19 words

New Years Resolutions for 2014

Goals for 2014: blog weekly, contribute to open source, complete NaNoWriMo, and get married.

Jan 1·1 min read·19 words

Font Awesome is Awesome

Replace image-based social icons with Font Awesome's iconic font to reduce network load and improve styling.

Oct 24·1 min read·20 words

Font Awesome is Awesome

Replace image-based social icons with Font Awesome's iconic font to reduce network load and improve styling.

Oct 24·1 min read·20 words

Flat Flog, an Introduction

Build static blogs with Flask using flat-flog, a Python-based static site generator with Markdown support.

Sep 24·1 min read·19 words

Flat Flog, an Introduction

Build static blogs with Flask using flat-flog, a Python-based static site generator with Markdown support.

Sep 24·1 min read·19 words

Postmortem on How Old Is This Metro Car

Serving 12,000 visits with Angular.js and AWS S3 for just $0.03: why static hosting wins for simple apps.

Aug 23·1 min read·26 words

Postmortem on How Old Is This Metro Car

Serving 12,000 visits with Angular.js and AWS S3 for just $0.03: why static hosting wins for simple apps.

Aug 23·1 min read·26 words

JoshFinnie.com Part 5?

Rebuilding my personal site with Python's Mynt static generator and hosting on AWS S3 for speed.

May 7·1 min read·19 words

JoshFinnie.com Part 5?

Rebuilding my personal site with Python's Mynt static generator and hosting on AWS S3 for speed.

May 7·1 min read·19 words

Installing Mezzanine on Heroku

Deploy the Mezzanine Python CMS on Heroku with PostgreSQL, static files, and Gunicorn configuration.

Dec 10·1 min read·18 words

Installing Mezzanine on Heroku

Deploy the Mezzanine Python CMS on Heroku with PostgreSQL, static files, and Gunicorn configuration.

Dec 10·1 min read·18 words

Updated to Twitter Bootstrap 2.0

Upgrading to Bootstrap 2.0: the main change is navbar class names, but migration is straightforward.

Feb 10·1 min read·20 words

Updated to Twitter Bootstrap 2.0

Upgrading to Bootstrap 2.0: the main change is navbar class names, but migration is straightforward.

Feb 10·1 min read·20 words

Updated to Twitter Bootstrap 2.0

Upgrading to Bootstrap 2.0: the main change is navbar class names, but migration is straightforward.

Feb 10·1 min read·20 words

Quick UX No-No

Why red notifications confuse users: Geico's mistake and Bootstrap's better color-coding for success messages.

Oct 13·1 min read·17 words

Quick UX No-No

Why red notifications confuse users: Geico's mistake and Bootstrap's better color-coding for success messages.

Oct 13·1 min read·17 words

A Coder's Lifestyle

Tips for balancing programming as a passion while working a non-technical full-time job.

Oct 4·1 min read·16 words

A Coder's Lifestyle

Tips for balancing programming as a passion while working a non-technical full-time job.

Oct 4·1 min read·16 words

Life Changes and Another Start with Jekyll

Moving to DC and relaunching my blog with Jekyll and Bootstrap to focus on content and side projects.

Sep 29·1 min read·25 words

Life Changes and Another Start with Jekyll

Moving to DC and relaunching my blog with Jekyll and Bootstrap to focus on content and side projects.

Sep 29·1 min read·25 words

Banning IE6

Why blocking IE6 users from accessing content hurts people who can't upgrade their corporate browsers.

Sep 15·1 min read·17 words

Banning IE6

Why blocking IE6 users from accessing content hurts people who can't upgrade their corporate browsers.

Sep 15·1 min read·17 words

Banning IE6

Why blocking IE6 users from accessing content hurts people who can't upgrade their corporate browsers.

Sep 15·1 min read·17 words

Public Transportation in Connecticut

Frustrations with Connecticut's bus routes that fail to connect Hartford neighborhoods with suburban jobs.

Feb 24·1 min read·18 words

Public Transportation in Connecticut

Frustrations with Connecticut's bus routes that fail to connect Hartford neighborhoods with suburban jobs.

Feb 24·1 min read·18 words

Transfering Domains

Lessons learned from moving domains to GoDaddy: always keep domain registration separate from web hosting.

Feb 11·1 min read·17 words

Transfering Domains

Lessons learned from moving domains to GoDaddy: always keep domain registration separate from web hosting.

Feb 11·1 min read·17 words

Converting GeoHackr from WordPress to Jekyll

Weighing the pros and cons of migrating a WordPress blog to Jekyll's static site generation.

Feb 2·1 min read·21 words

Converting GeoHackr from WordPress to Jekyll

Weighing the pros and cons of migrating a WordPress blog to Jekyll's static site generation.

Feb 2·1 min read·21 words

First Post

The inaugural post launching Josh Finnie's personal blog powered by Jekyll on Webfaction.

Jan 25·1 min read·15 words

First Post

The inaugural post launching Josh Finnie's personal blog powered by Jekyll on Webfaction.

Jan 25·1 min read·15 words