[{"data":1,"prerenderedAt":639},["ShallowReactive",2],{"blog-listing":3},[4,20,34,45,60,72,83,94,105,123,132,150,158,176,195,229,254,277,301,310,318,329,339,347,356,363,370,380,387,395,405,417,425,431,438,449,460,468,478,485,492,498,505,513,521,529,535,542,550,558,565,573,580,588,597,605,613,621,629],{"path":5,"title":6,"description":7,"image":8,"tags":9,"date":17,"draft":18,"external":19},"/2026/11/13/hnfm-a-year-on","hn.fm, a year on: Hacker News as episodes, digests, a radio station and directed video","A 2025 hackathon project that turned Hacker News stories into narrated video kept growing. This is what it does now, how each part works, and a set of things it made from one day's front page, all on models running at home.","/static/hnfm/2026/cover.jpg",[10,11,12,13,14,15,16],"ai","llm","tts","hacker-news","hyperframes","hermes-agent","local-inference","2026-11-13",false,null,{"path":21,"title":22,"description":23,"image":24,"tags":25,"date":33,"draft":18,"external":19},"/2026/06/18/running-mmlu-5shot-on-nemotron-nano-omni-with-a-dgx-spark","Running MMLU 5-shot on Nemotron Nano Omni with a DGX Spark","My first LLM eval end-to-end: scoring NVIDIA's Nemotron-3-Nano-Omni-30B (NVFP4) on MMLU 5-shot via vLLM on a DGX Spark, with interactive charts breaking down where it's strong, where it's weak, and how confident it is.","/static/mmlu/cover.png",[10,11,26,27,28,29,30,31,32],"eval","mmlu","vllm","nemotron","dgx-spark","k8s","localmaxxing","2026-06-18",{"path":35,"title":36,"description":37,"image":38,"tags":39,"date":44,"draft":18,"external":19},"/2026/03/09/blog-meta-about-openclaw-blog-cleanup","Behind the Scenes: AI-Assisted Blog Cleanup with OpenClaw","How I'm using OpenClaw, a multi-agent system running on DGX Spark, to systematically review and improve my personal blog articles through Telegram","/static/blog-meta/klaw.png",[10,40,41,42,43,30],"agents","openclaw","automation","blog","2026-03-09",{"path":46,"title":47,"description":48,"image":49,"tags":50,"date":55,"draft":18,"external":56},"/2026/02/20/nvidia-nim-on-google-cloud-gcp","Deploying an AI model on GKE with NVIDIA NIM","An overview of my experience with the Google CodeLabs tutorial for deploying an AI model on GKE with NVIDIA NIM","/static/codelab/nvidia_google.png",[51,10,11,52,53,54,31],"nvidia","nim","gcp","gke","2026-02-20",[57],{"link":58,"site":59},"https://x.com/briancaffey/status/2025106078543888633","x",{"path":61,"title":62,"description":63,"image":64,"tags":65,"date":71,"draft":18,"external":19},"/2025/09/09/hnfm-openai-gpt-oss-hackathon-project-hacker-news-ai-podcast-app","hnfm: Building a Local-First AI Podcast Generator for Hacker News","hnfm transforms the Hacker News feed into your personalized AI-powered podcast","/static/hnfm/hnfm_cover.png",[10,11,12,66,67,68,69,70],"flux","nuxt","fastapi","openai","gpt-oss","2025-09-09",{"path":73,"title":74,"description":75,"image":76,"tags":77,"date":82,"draft":18,"external":19},"/2025/07/21/upgrading-my-static-nuxt-blog-from-nuxt-3-to-nuxt-4","Upgrading my Blog to Nuxt 4","This article details my process of upgrading my static GitHub Pages Blog from Nuxt 3 to Nuxt 4, and an upgrade of the headless CMS that powers my site, Nuxt Content, from v2 to v3","/static/nuxt4/nuxt4.png",[67,78,79,80,81],"vue","blogging","cms","typescript","2025-07-21",{"path":84,"title":85,"description":86,"image":87,"tags":88,"date":90,"draft":18,"external":91},"/2025/07/17/flux-plugin-for-project-g-assist-hackathon","Flux Plug-in for Project G-Assist","A Plug-in for Project G-Assist that puts the power of AI image generation right at your fingertips","/static/flux/flux_plugin_for_project_g_assist.png",[51,10,89,52,66],"rtx","2025-07-20",[92],{"link":93,"site":59},"https://x.com/briancaffey/status/1946684573095497992",{"path":95,"title":96,"description":97,"image":98,"tags":99,"date":101,"draft":18,"external":102},"/2025/05/27/mediation-simulator-project-for-nvidia-agent-intelligence-toolkit","Mediation Simulator: My submission for the NVIDIA Agent Intelligence Toolkit Hackathon","Mediation Simulator is an AI application designed to help legal students and professionals build dispute resolution skills through simulated mediation sessions","/static/mediation-simulator/mediation_simulator_title_image.png",[51,10,40,11,52,100],"mediation","2025-05-27",[103],{"link":104,"site":59},"https://x.com/briancaffey/status/1926036369597510117",{"path":106,"title":107,"description":108,"image":109,"tags":110,"date":116,"draft":18,"external":117},"/2024/10/09/redlm-ai-application-for-studying-chinese-literature-redology-nvidia-llama-index-developer-contest","RedLM: My submission for the NVIDIA and LlamaIndex Developer Contest","RedLM is an AI-powered application for the study of China's greatest classical novel: Dream of the Red Chamber","/static/redlm/title.png",[51,111,10,11,112,113,114,115],"llama-index","rag","tensorrt-llm","chinese","redology","2024-11-09",[118,120],{"link":119,"site":59},"https://x.com/briancaffey/status/1855186768452321330",{"link":121,"site":122},"https://dev.to/briancaffey/redlm-my-submission-for-the-nvidia-and-llamaindex-developer-contest-1c3k","dev",{"path":124,"title":125,"description":126,"image":127,"tags":128,"date":131,"draft":18,"external":19},"/2024/08/11/upgrading-my-github-pages-blog-to-nuxt-3","Upgrading my GitHub Pages blog to Nuxt 3","An overview of my newly upgraded GitHub Pages blog powered by Nuxt 3","/static/nuxt/new-site.png",[78,67,129,130],"github","pinia","2024-08-11",{"path":133,"title":134,"description":135,"image":136,"tags":137,"date":146,"draft":18,"external":147},"/2024/06/24/agents-of-inference-speed-of-light-nvidia-langchain-generative-ai-agents-developer-contest-update","Agents of Inference: Speed of Light -- Accelerating my Generative AI Agents project with NVIDIA NIMs, TensorRT and TensorRT-LLM","This article is a brief discusion on recent updates to my project for the Generative AI Agents Developer Contest by NVIDIA and LangChain","/static/aoi/aoi_title.png",[51,138,40,89,139,140,113,10,11,141,142,143,144,145],"langchain","gpu","tensorrt","llama","007","stable-diffusion","stable-video-diffusion","comfyui","2024-06-24",[148],{"link":149,"site":59},"https://x.com/briancaffey/status/1802754703207583886",{"path":151,"title":152,"description":153,"image":136,"tags":154,"date":155,"draft":18,"external":156},"/2024/06/17/agents-of-inference-nvidia-and-langchain-generative-ai-agent-developer-contest","Agents of Inference: My submission for NVIDIA's Generative AI Agents Developer Contest by NVIDIA and LangChain","This article discusses my entry for NVIDIA's Generative AI Agents Developer Contest entry: Agents of Inference",[51,138,40,89,139,140,113,10,11,141,142,143,144,145],"2024-06-17",[157],{"link":149,"site":59},{"path":159,"title":160,"description":161,"image":162,"tags":163,"date":167,"draft":18,"external":168},"/2024/02/17/rocket-league-botchat-nvidia-generative-ai-on-rtx-pcs-developer-contest","Rocket League BotChat powered by TensorRT-LLM: My submission for NVIDIA's Generative AI on RTX PCs Developer Contest","This article discusses my entry for NVIDIA's Generative AI on RTX PCs Developer Contest: Rocket League BotChat","/static/rlbc/cover.png",[51,89,139,113,10,11,141,164,165,166],"rocket-league","gaming","windows","2024-02-17",[169,171,174],{"link":170,"site":59},"https://twitter.com/briancaffey/status/1760529251072118901",{"link":172,"site":173},"https://www.reddit.com/r/RocketLeague/comments/1au0po3/rocket_league_botchat_an_llmpowered_bakkesmod/","reddit",{"link":175,"site":122},"https://dev.to/briancaffey/rocket-league-botchat-powered-by-tensorrt-llm-my-submission-for-nvidias-generative-ai-on-rtx-pcs-developer-contest-2oao",{"path":177,"title":178,"description":179,"image":180,"tags":181,"date":186,"draft":18,"external":187},"/2023/08/27/python-vue-chinese-llama-2-and-the-three-body-problem","Python, Vue, Chinese-LLaMA-2 and The Three-Body Problem","Translating The Three-Body Problem book to English with Chinese LLMs, making visualizations with stable diffusion and running n-body simulations with CUDA","/static/three-body-problem/cover.png",[182,141,11,10,114,183,51,184,139,143,138,78,185],"three-body-problem","python","cuda","three.js","2023-11-23",[188,191,193],{"link":189,"site":190},"https://news.ycombinator.com/item?id=38393757","hn",{"link":192,"site":173},"https://www.reddit.com/r/threebodyproblem/comments/1823l5j/python_vue_chinesellama2_and_the_threebody_problem/",{"link":194,"site":59},"https://twitter.com/briancaffey/status/1727710878349332614",{"path":196,"title":197,"description":198,"image":199,"tags":200,"date":212,"draft":18,"external":213},"/2023/01/07/i-deployed-the-same-containerized-serverless-django-app-with-aws-cdk-terraform-and-pulumi","My Infrastructure as Code Rosetta Stone - Deploying the same web application on AWS ECS Fargate with CDK, Terraform and Pulumi","Three reusable infrastructure as code libraries for abstracting containerized web app architecture on AWS ECS","/static/iac_rosetta_stone_og_image.png",[201,202,203,204,205,206,207,208,209,210,211],"django","cdk","terraform","pulumi","cloudformation","github-actions","aws","ecs","fargate","containers","docker","2023-01-07",[214,216,218,220,223,226],{"link":215,"site":190},"https://news.ycombinator.com/item?id=34291336",{"link":217,"site":173},"https://www.reddit.com/r/aws/comments/105vo53/my_infrastructure_as_code_rosetta_stone_deploying/",{"link":219,"site":122},"https://dev.to/briancaffey/my-infrastructure-as-code-rosetta-stone-deploying-the-same-web-application-on-aws-ecs-fargate-with-cdk-terraform-and-pulumi-oe4",{"link":221,"site":222},"https://medium.com/@briancaffey/my-infrastructure-as-code-rosetta-stone-with-cdk-terraform-and-pulumi-44fcb8233e6a","medium",{"link":224,"site":225},"https://briancaffey.hashnode.dev/setting-up-ad-hoc-development-environments-for-django-applications-with-aws-ecs-terraform-and-github-actions","hashnode",{"link":227,"site":228},"https://briancaffey.substack.com/p/my-infrastructure-as-code-rosetta","substack",{"path":230,"title":231,"description":232,"image":233,"tags":234,"date":235,"draft":18,"external":236},"/2022/03/27/ad-hoc-developer-environments-for-django-with-aws-ecs-terraform-and-github-actions","Setting up ad hoc development environments for Django applications with AWS ECS, Terraform and GitHub Actions","This article will show how software development teams can build on-demand environments for dog-food testing, quality review, internal and external demos and other use cases that require short-lived but feature-complete instances of a web application.","/static/adhoc.png",[201,203,206,207,208,210,211],"2022-06-11",[237,239,241,243,245,246,249,251],{"link":238,"site":190},"https://news.ycombinator.com/item?id=31704417",{"link":240,"site":173},"https://www.reddit.com/r/aws/comments/v9ycwh/my_approach_to_building_ad_hoc_developer/",{"link":242,"site":122},"https://dev.to/briancaffey/setting-up-ad-hoc-development-environments-for-django-applications-with-aws-ecs-terraform-and-github-actions-4abh",{"link":244,"site":222},"https://medium.com/@briancaffey/setting-up-ad-hoc-development-environments-for-django-applications-with-aws-ecs-terraform-and-84d26e710539",{"link":224,"site":225},{"link":247,"site":248},"https://twitter.com/briancaffey/status/1535683865330831360","twitter",{"link":250,"site":228},"https://briancaffey.substack.com/p/setting-up-ad-hoc-development-environments",{"link":252,"site":253},"https://hackernoon.com/ad-hoc-environments-for-django-applications-with-ecs-terraform-and-github-actions","hackernoon",{"path":255,"title":256,"description":257,"image":258,"tags":259,"date":263,"draft":18,"external":264},"/2021/10/31/how-and-why-i-added-adsense-and-adblock-detector-to-my-website","How and why I added AdSense and an AdBlock detector to my personal website","This article describes how I added AdSense to my personal website and how I request that site visitors pause AdBlock while reading my blog","https://briancaffey.github.io/static/ab_cover.png",[67,260,261,262],"ads","adsense","adblock","2021-10-31",[265,267,269,271,273,275],{"link":266,"site":190},"https://news.ycombinator.com/item?id=29143003",{"link":268,"site":173},"https://www.reddit.com/r/Nuxt/comments/qowjbu/how_and_why_i_added_adsense_and_a_custom_adblock/",{"link":270,"site":122},"https://dev.to/briancaffey/how-and-why-i-added-adsense-and-an-adblock-detector-to-my-personal-website-5ag3",{"link":272,"site":222},"https://medium.com/@briancaffey/how-and-why-i-added-adsense-and-an-adblock-detector-to-my-personal-website-b210d7f45e22",{"link":274,"site":225},"https://briancaffey.hashnode.dev/how-and-why-i-added-adsense-and-an-adblock-detector-to-my-personal-website",{"link":276,"site":228},"https://briancaffey.substack.com/p/how-and-why-i-added-adsense-and-an",{"path":278,"title":279,"description":280,"image":281,"tags":282,"date":285,"draft":18,"external":286},"/2021/10/02/how-i-write-and-share-technical-software-development-articles-in-2021","How I write and share technical software development articles in 2021","This article describes how to write and share technical articles in 2021","/static/dev-sites.png",[67,78,283,284,79],"publishing","writing","2021-10-02",[287,289,291,293,295,297,299],{"link":288,"site":190},"https://news.ycombinator.com/item?id=28740415",{"link":290,"site":173},"https://www.reddit.com/r/webdev/comments/q0qc3l/how_i_write_and_share_technical_software/",{"link":292,"site":122},"https://dev.to/briancaffey/how-i-write-and-share-technical-software-development-articles-in-2021-27n2",{"link":294,"site":222},"https://medium.com/@briancaffey/how-i-write-and-share-technical-software-development-articles-in-2021-8168d3871bf9",{"link":296,"site":225},"https://briancaffey.hashnode.dev/how-i-write-and-share-technical-software-development-articles-in-2021",{"link":298,"site":228},"https://briancaffey.substack.com/p/how-i-write-and-share-technical-software",{"link":300,"site":253},"https://hackernoon.com/how-to-get-your-dev-blog-noticed-in-2021",{"path":302,"title":303,"description":304,"image":305,"tags":306,"date":309,"draft":18,"external":19},"/2021/08/07/authenticating-requests-with-jwt-tokens-stored-in-httponly-cookies-in-django","Authenticating requests with JWT tokens stored in HTTPOnly cookies in Django","This article describes how you can use JWT tokens in Django applications with decoupled frontend JavaScript applications running the browser in secure way using HttpOnly cookies.","/static/djjwt/dj_jwt.png",[201,78,307,308],"jwt","authentication","2021-08-01",{"path":311,"title":312,"description":313,"image":314,"tags":315,"date":317,"draft":18,"external":19},"/2021/07/05/github-actions-for-my-nuxt-blog-hosted-on-github-pages","GitHub Action for my Nuxt.js blog hosted on GitHub Pages","This article shows how to use GitHub Actions to update my Nuxt.js blog hosted on GitHub Pages.","/static/gha_nuxt/gha_nuxt.png",[129,67,206,316],"github-pages","2021-07-05",{"path":319,"title":320,"description":321,"image":322,"tags":323,"date":328,"draft":18,"external":19},"/2021/03/18/on-demand-dedicated-serverless-valheim-server-with-cdk-discrod-interactions","On-demand, serverless Valheim server setup with AWS CDK, Discord Interactions and GitLab CI","This is a detailed guide showing how to setup a dedicated Valheim server using serverless technologies on AWS","/static/valheim/hall.png",[324,165,183,325,326,327],"valheim","flask","serverless","discord","2021-03-18",{"path":330,"title":331,"description":331,"image":332,"tags":333,"date":338,"draft":18,"external":19},"/2021/01/16/i-scraped-analyzed-and-generated-yc-companies-founders-and-work-at-a-startup-job-postings","Scraping, analyzing and generating companies, founders and job postings from YC's Work at a Startup","/static/waas/yc.png",[183,334,335,336,337],"data","scraping","startups","yc","2021-01-16",{"path":340,"title":341,"description":342,"image":343,"tags":344,"date":346,"draft":18,"external":19},"/2021/01/15/adding-internationalization-to-a-statically-generated-nuxt-site","Adding internationalization to a statically generated Nuxt site","This article will summarize my experience implementing internationalization (i18n) for a statically-generated Nuxt.js site","/static/emoji_flags.png",[345,78,67],"i18n","2021-01-15",{"path":348,"title":349,"description":350,"image":351,"tags":352,"date":355,"draft":18,"external":19},"/2021/01/02/using-the-stripe-api-for-recurring-monthly-saas-subscription-payments-in-django-and-vue-application","Using Stripe for recurring monthly SaaS subscriptions in a Django + Vue application","This article shares my experience learning and implementing the Stripe API for recurring monthly SaaS subscription payments in an application using Django and Vue.js","/static/django_vue_stripe.png",[201,78,353,354],"drf","stripe","2021-01-02",{"path":357,"title":358,"description":359,"image":360,"tags":361,"date":362,"draft":18,"external":19},"/2021/01/01/session-authentication-with-django-django-rest-framework-and-nuxt","Session Authentication with Django, Django REST Framework and Nuxt","This article shows how to use session authentication with Django + Nuxt.js applications","/static/django_nuxt_auth_og.png",[201,78,67,353,308],"2021-01-01",{"path":364,"title":365,"description":366,"image":367,"tags":368,"date":369,"draft":18,"external":19},"/2020/12/27/building-web-applications-with-django-drf-and-nuxt","Building web applications with Django, Django REST Framework, Nuxt.js and docker","This article documents my progress combining the Django web framework with Nuxt JS to build applications that have both great SEO and a smooth SPA user experience.","/static/django_nuxt_app_diagram.png",[201,78,67,353,211],"2020-12-27",{"path":371,"title":372,"description":373,"image":374,"tags":375,"date":379,"draft":18,"external":19},"/2020/11/29/weekend-project-update-open-sec-data","Weekend project update: Open SEC Data","This project uses Django, DRF and Celery to read public SEC filings from sec.gov, build it into an API which is consumed through a Vue.js application.","/static/sec-update.jpg",[201,78,334,376,377,211,378],"api","gitlab","celery","2020-11-29",{"path":381,"title":382,"description":383,"image":384,"tags":385,"date":386,"draft":18,"external":19},"/2020/11/27/how-to-authenticate-django-rest-framework-from-vue-app-with-session-authentication-httponly-cookies","How to authenticate Django REST Framework API calls from a (Vue) JS client using Session Authentication and HttpOnly cookies","This article will describe an authentication strategy using Django REST Framework with a Javascript frontend application. I'll be demonstrating this with Vue.js (Qusar Framework, using Vue 2), but the concepts should transfer to any other Javascript framework.","/static/padlocks.jpg",[201,78,308,376],"2020-11-27",{"path":388,"title":389,"description":390,"image":391,"tags":392,"date":394,"draft":18,"external":19},"/2020/10/10/how-to-add-email-signup-form-to-nuxt-site-with-mailchimp","How to add an email signup form to a Nuxt site with MailChimp","This is a guide for setting up a MailChimp-powered newsletter signup form on a static Nuxt site hosted on GitHub Pages. I wanted to implement this on my personal blog to grow a mailing list so I can update readers when I puslish a new blog article. I haven't done too much work with MailChimp before, but I've definitely subscribed to plenty of MailChimp mailing lists.","/static/chimps.webp",[67,393,78],"mailchimp","2020-10-11",{"path":396,"title":397,"description":398,"image":399,"tags":400,"date":404,"draft":18,"external":19},"/2020/09/17/migrating-from-jekyll-to-nuxt-static-site","Migrating my personal GitHub pages blog from Jekyll to Nuxt","Jekyll has served me well for a long time, but I've decided to switch the static site generator I use for my personal blog from Jekyll to Nuxt. This article will hopefully be the first new article in my Nuxt blog.","/static/nuxt-app.png",[67,78,401,402,403],"content","static-site","web","2020-09-17",{"path":406,"title":407,"description":408,"image":409,"tags":410,"date":416,"draft":18,"external":19},"/2020/08/09/digital-ocean-docker-swarm-django-traefik-nginx","Deploying Django applications with docker swarm on DigitalOcean using GitLab CI, Traefik, NGINX and REX-Ray","A guide to deploying Django applications with docker using popular open-source tools","/static/shark.jpg",[201,211,411,78,377,412,413,414,415],"digital-ocean","rex-ray","traefik","nginx","swarm","2020-08-09",{"path":418,"title":419,"description":420,"image":421,"tags":422,"date":424,"draft":18,"external":19},"/2020/08/01/django-and-lambda-with-cdk-and-api-gateway","Deploying serverless Django applications to AWS with CDK on a tiny budget using Lambda, API Gateway, awsgi and the Lambda proxy pattern","","/static/djambda.png",[326,201,207,423,202],"lambda","2020-08-01",{"path":426,"title":427,"description":420,"image":428,"tags":429,"date":430,"draft":18,"external":19},"/2020/06/02/django-postgres-vue-gitlab-ecs","Using AWS CDK, GitLab, Fargate and CloudFront for Django + Vue.js applications","/static/architecture_verbose_equals_true.png",[209,201,377,78,202],"2020-06-02",{"path":432,"title":433,"description":434,"image":435,"tags":436,"date":437,"draft":18,"external":19},"/2019/01/09/django-docker-vue-nginx-drf-traefik-celery","Setup, Development and Deployment of a web app using Django, VueJS, VuePress, Docker, nginx, traefik and GitLab","This project is currently deployed on https://verbose-equals-true.tk. The source code is available at https://gitlab.com/briancaffey/verbose-equals-true.","/static/technologies.png",[201,78,211,377],"2019-01-09",{"path":439,"title":440,"description":441,"image":442,"tags":443,"date":448,"draft":18,"external":19},"/2018/04/26/generating-music-from-guitar-tabs-with-python","Generating MIDI files from guitar tablatures with Python and regular expressions","Recently I have been playing lots of classical guitar. I use classtab.org, a website with hundreds of classical guitar pieces in tab form. Here's an example of a guitar tab:","/static/guitar.jpg",[444,183,445,446,447],"midi","regex","guitar","music","2018-04-26",{"path":450,"title":451,"description":420,"image":452,"tags":453,"date":459,"draft":18,"external":19},"/2018/02/19/leaflet-maps-with-django","Display, filter and export geographical data in a Django app with Leaflet, Mapbox, DataTables, Bootstrap 4 and Travis-CI","/static/map_homepage.png",[454,201,455,456,457,458],"leaflet","mapbox","data-tables","bootstrap","travis-ci","2018-02-19",{"path":461,"title":462,"description":463,"image":464,"tags":465,"date":467,"draft":18,"external":19},"/2018/01/30/reading-13f-sec-filings-with-python","Reading 13F SEC filings with python","How to read SEC filing data with Python","/static/sec/sec.jpg",[466,183,334,335],"sec","2018-01-30",{"path":469,"title":470,"description":471,"image":472,"tags":473,"date":477,"draft":18,"external":19},"/2018/01/28/simple-sql-tasks-with-mariadb","How to do simple SQL tasks with MariaDB","In this article I'll look at another interview takehome assignment. This assignment included SQL, python and some logic puzzles. If you read to the end I'll share a fun \"trick question\" that was also included.","/static/mariadb.png",[474,475,476],"maria-db","sql","databases","2018-01-28",{"path":479,"title":480,"description":420,"image":481,"tags":482,"date":484,"draft":18,"external":19},"/2018/01/02/checking-poker-hands-with-python","Finding the best poker hand in five-card draw with python","/static/poker.jpg",[183,483],"poker","2018-01-02",{"path":486,"title":487,"description":420,"image":488,"tags":489,"date":491,"draft":18,"external":19},"/2017/12/22/getting-started-with-twisted","Getting started with Python's Twisted Framework","/static/twisted-snakes.png",[183,490],"twisted","2017-12-22",{"path":493,"title":494,"description":420,"image":495,"tags":496,"date":497,"draft":18,"external":19},"/2017/12/09/setting-up-flask-cli-with-docker","Setting up a Flask project with Flask CLI and Docker","/static/flask-docker.png",[325,211],"2017-12-09",{"path":499,"title":500,"description":420,"image":501,"tags":502,"date":504,"draft":18,"external":19},"/2017/12/03/the-twelve-factor-app-and-my-experience-developing-web-apps","Reflecting on my web-app development process after reading The Twelve-Factor App","/static/the-12-factor-app.png",[503,211],"development","2017-12-03",{"path":506,"title":507,"description":508,"image":509,"tags":510,"date":512,"draft":18,"external":19},"/2017/12/02/arch-linux-package-data-analysis","Analysis of AUR and Official Arch Repository data","Arch Linux provides packages through the official Arch Linux repositories and the Arch User Repository (AUR). I recently gathered data on ~50,000 packages from these repositories on archlinux.org to better understand the makeup of the packages. In this article I will share some visualizations I made as well as some key takeaways about the data set I gathered.","/static/aur/official_repos.png",[511,334,183],"arch-linux","2017-12-02",{"path":514,"title":515,"description":516,"image":517,"tags":518,"date":520,"draft":18,"external":19},"/2017/11/28/remove-root-partition-bloat-from-docker","Removing root partition bloat caused by docker","Recently I've been having storage issues in the root partitions of both my desktop and laptop computers. These issues came up soon after I started playing around with docker. In this article I'll talk briefly about how I fixed this problem, the resources and tools I picked up along the way, and anything else I have learned along the way.","/static/baobab.png",[211,519],"linux","2017-11-28",{"path":522,"title":523,"description":524,"image":525,"tags":526,"date":528,"draft":18,"external":19},"/2017/11/20/using-tensorflow-and-tensor-board-with-docker","Using Tensorflow and Tensorboard with Docker","In my last article we set up Tensorflow with Docker. Next I want to try to get Tensorboard running.","/static/tf.png",[527,211],"tensorflow","2017-11-20",{"path":530,"title":531,"description":532,"image":343,"tags":533,"date":528,"draft":18,"external":19},"/2017/11/24/how-to-get-color-emoji-in-arch-linux","How to enable color emoji on Arch Linux with Emoji One Font","This is a short article about how to enable color emoji on Arch Linux. I have searched for a working solution for this a few times but never found something that worked. I stumbled upon this Gist that I used to hack together a solution that enables color emoji from Emoji One on Arch Linux.",[511,534],"emoji",{"path":536,"title":537,"description":538,"image":539,"tags":540,"date":541,"draft":18,"external":19},"/2017/11/19/tensorflow-gpu-setup-with-docker-on-arch-linux","Installing the GPU version of Tensorflow with Docker on Arch Linux","A walkthrough of Tensorflow setup and usage on Arch Linux with docker","/static/trump.png",[511,527,211,51,183],"2017-11-19",{"path":543,"title":544,"description":545,"image":546,"tags":547,"date":549,"draft":18,"external":19},"/2017/10/31/a-binary-clock-written-in-bash","A binary clock written in bash","A program that displays the current time as a binary representation","/static/binaryclock.png",[548],"bash","2017-10-31",{"path":551,"title":552,"description":420,"image":553,"tags":554,"date":557,"draft":18,"external":19},"/2017/10/17/moving-from-gnome-to-i3-on-arch-linux","Moving from Gnome Desktop to i3 window manager on Arch Linux","/static/gnome-i3.png",[511,555,556],"i3","gnome","2017-10-17",{"path":559,"title":560,"description":561,"image":562,"tags":563,"date":557,"draft":18,"external":19},"/2017/10/17/reading-rss-with-python","Reading RSS with Python","On my other personal website, briancaffey.com, I have a blog. The content on that blog has mostly mirrored what I put on this github pages site, briancaffey.github.io. I want to display my most recent blog posts from briancaffey.github.io on briancaffey.com, and to do this I will be using the RSS feed that comes with a Jekyll site. This should be pretty simple, we are going to use the requests librrary, as well as the feedparser library.","/static/python_rss.png",[183,564],"rss",{"path":566,"title":567,"description":568,"image":569,"tags":570,"date":572,"draft":18,"external":19},"/2017/10/03/simple-games-in-react","Simple Board Games in ReactJS","To ease into learning ReactJS, I took a shot at implementing a simple tic-tac-toe game with React. This is covered in the official Facebook React tutorial, but I haven't actually looked at how they did this yet. Instead, I wanted to see how far I could get on my own, and then fallback to the tutorial if I needed help. I heard that there are many different ways that React components can be organized and structured in a React project, so I wanted to see how my results compared to what the official tutorial recommends.","/static/react/wuziqi.png",[571],"react","2017-10-03",{"path":574,"title":575,"description":576,"image":577,"tags":578,"date":579,"draft":18,"external":19},"/2017/08/03/arch-linux-installation-guide","Arch Linux Installation Guide","A comprehensive guide to installing Arch Linux","/static/aur/arch.png",[511],"2017-08-03",{"path":581,"title":582,"description":583,"image":584,"tags":585,"date":587,"draft":18,"external":19},"/2017/05/09/my-first-attempt-at-photogrammetry","Building a 3D model from 60 photographs with VisualSFM and Meshlab","My first attempt at photogrammetry","/static/sunhat.png",[586],"photogrammetry","2017-05-09",{"path":589,"title":590,"description":591,"image":592,"tags":593,"date":587,"draft":18,"external":19},"/2017/05/09/rendering-sketchup-models-with-kerkythea","Rendering SketchUp models with Kerkythea","These are some results of an architectural model I rendered with Kerkythea. Kerkythea is an open source rendering program that has a SketchUp plugin. I worked with an architect who made the original plans by hand.","/static/sketchup/sketchup_1.jpg",[594,595,596],"sketchup","kerkythea","3d-modeling",{"path":598,"title":599,"description":600,"image":601,"tags":602,"date":604,"draft":18,"external":19},"/2017/04/02/langton-ant-notebook","Python script for generating 2D n-state Langton's Ant animations","Visualizing variations of the classic Langton's Ant cellular automata","/static/ant.png",[183,603],"cellular-automata","2017-04-02",{"path":606,"title":607,"description":608,"image":609,"tags":610,"date":612,"draft":18,"external":19},"/2017/03/04/settinging-up-django-with-heroku","Setting up a Django app on Heroku","This is a simple guide to setting up a Django project on Heroku.","/static/django-heroku.png",[201,611],"heroku","2017-03-04",{"path":614,"title":615,"description":616,"image":617,"tags":618,"date":620,"draft":18,"external":19},"/2017/03/03/graph_subreddit","Related subreddit graph exploration with NetworkX","This notebook explores some basic concepts of graph theory. A few weeks ago I set up a script to scrape data from reddit.com with the goal of visualizing the network of related subreddits (forums on specific topics) and related data.","/static/subreddits.png",[173,183,335,334,619],"graphs","2017-03-03",{"path":622,"title":623,"description":624,"image":625,"tags":626,"date":628,"draft":18,"external":19},"/2017/01/01/pc-data","PCPartPicker data","In the summer of 2016 I built two high-end computers, something I haven't done since 2011. I used PCPartPicker to research the components and read about PC builds similar to the ones I had in mind. It's a relatively new site that has a strong community of builders, helpful tools to help with part compatibility as well as extensive user reviews on PC components.","/static/pcpp/hist.png",[183,335,627,334],"machine-learning","2017-01-01",{"path":630,"title":631,"description":420,"image":632,"tags":633,"date":638,"draft":18,"external":19},"/2016/04/07/home-media-setup","Home media center meta-tutorial with miniDLNA, Raspberry Pi, Deluge and Apple TV","/static/media-setup.png",[634,635,636,637],"mini-dlna","raspberry-pi","deluge","media","2016-04-07",1794698246335]