[
    {
        "name": "getImpactedCoordinates",
        "description": "Using ruby to calculate the blast radius of some fireworks; cassidoo's interview question of the week (2026-07-06).",
        "categories": "Ruby, cassidoo",
        "relative_path": "ruby/get-impacted-coordinates",
        "updated_at": "2026-07-08T03:59:00Z",
        "created_at": "2026-07-08T03:59:00Z",
        "id": "#471",
        "original_relative_path": "ruby/get-impacted-coordinates"
    },
    {
        "name": "Chilkat Library with C",
        "description": "A quick look at the Chilkat component library and a demonstration of using it with C.",
        "categories": "C",
        "relative_path": "c/chilkat",
        "updated_at": "2026-07-08T02:31:00Z",
        "created_at": "2026-07-08T02:31:00Z",
        "id": "#470",
        "original_relative_path": "c/chilkat"
    },
    {
        "name": "Essential SNMP",
        "description": "Book notes - Essential SNMP by Douglas R. Mauro, Kevin J. Schmidt, Kevin Schmidt. First published July 18, 2001. 2nd Edition October 25, 2005.",
        "categories": "Books",
        "relative_path": "books/essential-snmp",
        "updated_at": "2026-07-05T08:50:00Z",
        "created_at": "2026-07-05T08:50:00Z",
        "id": "#469",
        "original_relative_path": "books/essential-snmp"
    },
    {
        "name": "DNS and BIND",
        "description": "Book notes - DNS and BIND by Cricket Liu, Paul Albitz. First published October 8, 1992. Latest 5th edition, 2006.",
        "categories": "Books",
        "relative_path": "books/dns-and-bind",
        "updated_at": "2026-07-05T01:46:00Z",
        "created_at": "2026-07-05T01:46:00Z",
        "id": "#468",
        "original_relative_path": "books/dns-and-bind"
    },
    {
        "name": "SDN: Software Defined Networks",
        "description": "Book notes - SDN: Software Defined Networks: An Authoritative Review of Network Programmability Technologies, by Thomas D. Nadeau, Ken Gray. First published January 1, 2013.",
        "categories": "Books",
        "relative_path": "books/sdn-software-defined-networks",
        "updated_at": "2026-07-05T01:32:00Z",
        "created_at": "2026-07-05T01:32:00Z",
        "id": "#467",
        "original_relative_path": "books/sdn-software-defined-networks"
    },
    {
        "name": "Count Bits (C)",
        "description": "Given a positive number n, count total bits needed to represent it (using C).",
        "categories": "C",
        "relative_path": "c/count-bits",
        "updated_at": "2026-06-30T06:18:00Z",
        "created_at": "2026-06-30T06:18:00Z",
        "id": "#466",
        "original_relative_path": "c/count-bits"
    },
    {
        "name": "meanBits",
        "description": "Using Perl to calculate mean bits; cassidoo's interview question of the week (2026-06-29)",
        "categories": "Perl, cassidoo",
        "relative_path": "perl/mean-bits",
        "updated_at": "2026-06-30T06:03:00Z",
        "created_at": "2026-06-30T06:03:00Z",
        "id": "#465",
        "original_relative_path": "perl/mean-bits"
    },
    {
        "name": "Python Testing Cookbook",
        "description": "Book notes - Python Testing Cookbook, by Greg L. Turnquist. First published May 14, 2011.",
        "categories": "python, Books",
        "relative_path": "books/python-testing-cookbook",
        "updated_at": "2026-06-15T04:24:00Z",
        "created_at": "2026-06-15T04:24:00Z",
        "id": "#464",
        "original_relative_path": "books/python-testing-cookbook"
    },
    {
        "name": "maxSolitaireMoves",
        "description": "Using Perl to play solitaire; cassidoo's interview question of the week (2026-06-08).",
        "categories": "Perl, cassidoo",
        "relative_path": "perl/max-solitaire-moves",
        "updated_at": "2026-06-15T02:56:00Z",
        "created_at": "2026-06-15T02:56:00Z",
        "id": "#463",
        "original_relative_path": "perl/max-solitaire-moves"
    },
    {
        "name": "Unix Power Tools",
        "description": "Book notes - Unix Power Tools, by Shelley Powers, Jerry Peek, Tim O'Reilly, Mike Loukides. First published January 1, 1993.",
        "categories": "Books",
        "relative_path": "books/unix-power-tools",
        "updated_at": "2026-06-14T09:53:00Z",
        "created_at": "2026-06-14T09:53:00Z",
        "id": "#462",
        "original_relative_path": "books/unix-power-tools"
    },
    {
        "name": "sed & awk",
        "description": "Book notes - sed & awk 2nd Edition, by Dale Dougherty, Arnold Robbins. First published November 8, 1990.",
        "categories": "Books, awk, sed",
        "relative_path": "books/sed-awk",
        "updated_at": "2026-06-14T09:37:00Z",
        "created_at": "2026-06-14T09:37:00Z",
        "id": "#461",
        "original_relative_path": "books/sed-awk"
    },
    {
        "name": "packSuitcases",
        "description": "Using Perl to pack suitcases; cassidoo's interview question of the week (2026-06-01).",
        "categories": "Perl, cassidoo",
        "relative_path": "perl/pack-suitcases",
        "updated_at": "2026-06-07T23:23:00Z",
        "created_at": "2026-06-07T23:23:00Z",
        "id": "#460",
        "original_relative_path": "perl/pack-suitcases"
    },
    {
        "name": "shuffleLine",
        "description": "Using Perl to move every nth customer to the end of the queue; cassidoo's interview question of the week (2026-05-25).",
        "categories": "Perl, cassidoo",
        "relative_path": "perl/shuffle-line",
        "updated_at": "2026-05-28T04:39:00Z",
        "created_at": "2026-05-28T04:39:00Z",
        "id": "#459",
        "original_relative_path": "perl/shuffle-line"
    },
    {
        "name": "Test::More",
        "description": "The basics of Perl testing with the Test::More module.",
        "categories": "Perl",
        "relative_path": "perl/test-more",
        "updated_at": "2026-05-27T09:36:00Z",
        "created_at": "2026-05-27T09:36:00Z",
        "id": "#458",
        "original_relative_path": "perl/test-more"
    },
    {
        "name": "Show Perl Libraries",
        "description": "All about how Perl finds library files, and a simple script to report on include paths and installed modules.",
        "categories": "Perl",
        "relative_path": "perl/show-libs",
        "updated_at": "2026-05-27T00:57:00Z",
        "created_at": "2026-05-27T00:57:00Z",
        "id": "#457",
        "original_relative_path": "perl/show-libs"
    },
    {
        "name": "radiustar RADIUS Client",
        "description": "Testing the radiustar ruby gem, one of the few RADIUS client libraries. Finding bugs and patching it to get at least basic authentication working with FreeRADIUS server.",
        "categories": "RADIUS, macOS, Ruby",
        "relative_path": "infrastructure/radius/radiustar_client",
        "updated_at": "2026-05-13T13:45:00Z",
        "created_at": "2026-05-13T13:45:00Z",
        "id": "#456",
        "original_relative_path": "infrastructure/radius/radiustar_client"
    },
    {
        "name": "longestCoprimeSubsequence",
        "description": "Using Perl to calculate longest coprime subsequence; cassidoo's interview question of the week (2026-05-04).",
        "categories": "Perl, cassidoo",
        "relative_path": "perl/longest-coprime-subsequence",
        "updated_at": "2026-05-08T06:08:00Z",
        "created_at": "2026-05-08T06:08:00Z",
        "id": "#455",
        "original_relative_path": "perl/longest-coprime-subsequence"
    },
    {
        "name": "Test::Simple",
        "description": "The basics of Perl testing with the Test::Simple module.",
        "categories": "Perl",
        "relative_path": "perl/test-simple",
        "updated_at": "2026-05-08T04:04:00Z",
        "created_at": "2026-05-08T04:04:00Z",
        "id": "#454",
        "original_relative_path": "perl/test-simple"
    },
    {
        "name": "Preventing Path Traversal",
        "description": "Examining the path traversal vulnerability in Node.js and demonstrating mitigations.",
        "categories": "node, security",
        "relative_path": "node/preventing-path-traversal",
        "updated_at": "2026-05-06T07:21:00Z",
        "created_at": "2026-05-06T07:21:00Z",
        "id": "#453",
        "original_relative_path": "node/preventing-path-traversal"
    },
    {
        "name": "minRepairs",
        "description": "Using Ruby to make minimum repairs to a broken array; cassidoo's interview question of the week (2026-04-27).",
        "categories": "Ruby, cassidoo",
        "relative_path": "ruby/min-repairs",
        "updated_at": "2026-05-03T13:39:00Z",
        "created_at": "2026-05-03T13:39:00Z",
        "id": "#452",
        "original_relative_path": "ruby/min-repairs"
    },
    {
        "name": "Carp",
        "description": "About using the Carp module for error handling in Perl",
        "categories": "Perl",
        "relative_path": "perl/carp",
        "updated_at": "2026-04-30T14:26:00Z",
        "created_at": "2026-04-30T14:26:00Z",
        "id": "#451",
        "original_relative_path": "perl/carp"
    },
    {
        "name": "Learning Perl Objects, References, and Modules",
        "description": "Book notes - Learning Perl Objects, References, and Modules by Randal L. Schwartz, Tom Phoenix. First published June 9, 2003.",
        "categories": "Books, Perl",
        "relative_path": "books/learning-perl-objects-references-and-modules",
        "updated_at": "2026-04-26T07:13:00Z",
        "created_at": "2026-04-26T07:13:00Z",
        "id": "#450",
        "original_relative_path": "books/learning-perl-objects-references-and-modules"
    },
    {
        "name": "Perl Hacks",
        "description": "Book notes - Perl Hacks: Tips & Tools for Programming, Debugging, and Surviving by Shane Warden, Damian Conway, Curtis 'Ovid' Poe. First published January 1, 2006.",
        "categories": "Books, Perl",
        "relative_path": "books/perl-hacks",
        "updated_at": "2026-04-26T07:05:00Z",
        "created_at": "2026-04-26T07:05:00Z",
        "id": "#449",
        "original_relative_path": "books/perl-hacks"
    },
    {
        "name": "Advanced Perl Programming",
        "description": "Book notes - Advanced Perl Programming: The Worlds Most Highly Developed Perl Tutorial, Second Edition by Simon Cozens. First published January 1, 2005.",
        "categories": "Books, Perl",
        "relative_path": "books/advanced-perl-programming",
        "updated_at": "2026-04-26T06:50:00Z",
        "created_at": "2026-04-26T06:50:00Z",
        "id": "#448",
        "original_relative_path": "books/advanced-perl-programming"
    },
    {
        "name": "maxPatternCopies",
        "description": "Using Perl to make patterns from a string; cassidoo's interview question of the week (2026-04-20).",
        "categories": "Perl, cassidoo",
        "relative_path": "perl/max-pattern-copies",
        "updated_at": "2026-04-24T07:24:00Z",
        "created_at": "2026-04-24T07:24:00Z",
        "id": "#447",
        "original_relative_path": "perl/max-pattern-copies"
    },
    {
        "name": "Perl and XML",
        "description": "Book notes - Perl and XML: XML Processing with Perl by Erik T. Ray, Jason McIntosh. First published January 1, 2002.",
        "categories": "Books, Perl, XML",
        "relative_path": "books/perl-and-xml",
        "updated_at": "2026-04-24T05:05:00Z",
        "created_at": "2026-04-24T05:05:00Z",
        "id": "#446",
        "original_relative_path": "books/perl-and-xml"
    },
    {
        "name": "Perl Testing",
        "description": "Book notes - Perl Testing: A Developer's Notebook by Ian Langworth, chromatic. First published January 1, 2005.",
        "categories": "Books, Perl",
        "relative_path": "books/perl-testing",
        "updated_at": "2026-04-24T04:54:00Z",
        "created_at": "2026-04-24T04:54:00Z",
        "id": "#445",
        "original_relative_path": "books/perl-testing"
    },
    {
        "name": "validatePizza",
        "description": "Using rust to validate a pizza recipe; cassidoo's interview question of the week (2026-04-13).",
        "categories": "Rust, cassidoo",
        "relative_path": "rust/validate-pizza",
        "updated_at": "2026-04-17T02:02:00Z",
        "created_at": "2026-04-17T02:02:00Z",
        "id": "#444",
        "original_relative_path": "rust/validate-pizza"
    },
    {
        "name": "Perl Cookbook",
        "description": "Book notes - Perl Cookbook, by Tom Christiansen, Nathan Torkington. First published August 1, 1998. Latest second edition, 2003.",
        "categories": "Books, Perl",
        "relative_path": "books/perl-cookbook",
        "updated_at": "2026-04-16T02:29:00Z",
        "created_at": "2026-04-16T02:29:00Z",
        "id": "#443",
        "original_relative_path": "books/perl-cookbook"
    },
    {
        "name": "Computer Science & Perl Programming",
        "description": "Book notes - Computer Science & Perl Programming: Best of The Perl Journal, by Jon Orwant. First published November 4, 2002.",
        "categories": "Books, Perl",
        "relative_path": "books/computer-science-perl-programming",
        "updated_at": "2026-04-16T02:21:00Z",
        "created_at": "2026-04-16T02:21:00Z",
        "id": "#442",
        "original_relative_path": "books/computer-science-perl-programming"
    },
    {
        "name": "About Perl",
        "description": "An overview of the Perl programming language, its features, and ecosystem. Includes setting up and running on macOS.",
        "categories": "Perl, macOS",
        "relative_path": "perl/about",
        "updated_at": "2026-04-15T09:30:00Z",
        "created_at": "2026-04-15T09:30:00Z",
        "id": "#441",
        "original_relative_path": "perl/about"
    },
    {
        "name": "Programming Perl",
        "description": "Book notes - Programming Perl: Unmatched power for text processing and scripting by Tom Christiansen, Brian D Foy, Larry Wall, Jon Orwant. First published January 1, 1991. Latest 4th edition in 2012.",
        "categories": "Books, Perl",
        "relative_path": "books/programming-perl",
        "updated_at": "2026-04-13T14:17:00Z",
        "created_at": "2026-04-13T14:17:00Z",
        "id": "#440",
        "original_relative_path": "books/programming-perl"
    },
    {
        "name": "Learning Perl",
        "description": "Book notes - Learning Perl: Making Easy Things Easy and Hard Things Possible by Randal L. Schwartz, Brian D. Foy, Tom Phoenix. First published November 1, 1993. Most recently published as an Eighth edition in 2021.",
        "categories": "Books, Perl",
        "relative_path": "books/learning-perl",
        "updated_at": "2026-04-13T13:55:00Z",
        "created_at": "2026-04-13T13:55:00Z",
        "id": "#439",
        "original_relative_path": "books/learning-perl"
    },
    {
        "name": "perrinCombinations",
        "description": "Using Perl to calculate Perrin Combinations; cassidoo's interview question of the week (2026-04-06)",
        "categories": "Perl, cassidoo",
        "relative_path": "perl/perrin-combinations",
        "updated_at": "2026-04-07T07:22:00Z",
        "created_at": "2026-04-07T07:22:00Z",
        "id": "#438",
        "original_relative_path": "perl/perrin-combinations"
    },
    {
        "name": "Meshy",
        "description": "About Meshy, an AI 3D model generator. The Meshy 6 model is quite accomplished at generating and manipulating models from 2D images. Text prompt generation is a little more prone to errors.",
        "categories": "AI",
        "relative_path": "ai/meshy",
        "updated_at": "2026-03-18T04:04:00Z",
        "created_at": "2026-03-18T04:04:00Z",
        "id": "#437",
        "original_relative_path": "ai/meshy"
    },
    {
        "name": "fireStationCoverage",
        "description": "Using Julia to calculate how well a city grid is covered by fire stations - a multi-source, breadth-first search problem; cassidoo's interview question of the week (2026-03-16).",
        "categories": "Julia, cassidoo",
        "relative_path": "julia/fire-station-coverage",
        "updated_at": "2026-03-17T16:14:00Z",
        "created_at": "2026-03-17T16:14:00Z",
        "id": "#436",
        "original_relative_path": "julia/fire-station-coverage"
    },
    {
        "name": "XSLT CSV Transforms",
        "description": "XSLT transformations for converting CSV data.",
        "categories": "XSLT, CSV",
        "relative_path": "formats/xslt/csv-transforms",
        "updated_at": "2026-03-17T15:05:00Z",
        "created_at": "2026-03-17T15:05:00Z",
        "id": "#435",
        "original_relative_path": "formats/xslt/csv-transforms"
    },
    {
        "name": "Saxon Processor",
        "description": "Setting up and using Saxon for XSLT, XQuery, and XML Schema, including XSLT 3.0 compatible processing on macOS.",
        "categories": "XSLT, XQuery, XML Schema, macOS",
        "relative_path": "formats/xslt/saxon",
        "updated_at": "2026-03-17T14:37:00Z",
        "created_at": "2026-03-17T14:37:00Z",
        "id": "#434",
        "original_relative_path": "formats/xslt/saxon"
    },
    {
        "name": "XSLT Mandelbrot",
        "description": "Playing with Joel Yliluoma's demonstration of the power of XSLT: generating a Mandelbrot set, rendered with HTML.",
        "categories": "XSLT",
        "relative_path": "formats/xslt/mandelbrot",
        "updated_at": "2026-03-15T12:13:00Z",
        "created_at": "2026-03-15T12:13:00Z",
        "id": "#433",
        "original_relative_path": "formats/xslt/mandelbrot"
    },
    {
        "name": "Mastering XSLT",
        "description": "Book notes - Mastering XSLT, by Chuck White. First published January 1, 2002",
        "categories": "Books, XSLT",
        "relative_path": "books/mastering-xslt",
        "updated_at": "2026-03-15T11:26:00Z",
        "created_at": "2026-03-15T11:26:00Z",
        "id": "#432",
        "original_relative_path": "books/mastering-xslt"
    },
    {
        "name": "XSLT",
        "description": "About Extensible Stylesheet Language Transformations (XSLT), with a simple example on macOS. Also a discussion of the current state of support and the pending removal of XSLT support from browsers.",
        "categories": "formats, XSLT",
        "relative_path": "formats/xslt",
        "updated_at": "2026-03-15T11:26:00Z",
        "created_at": "2026-03-15T11:26:00Z",
        "id": "#431",
        "original_relative_path": "formats/xslt"
    },
    {
        "name": "About Julia",
        "description": "An overview of the Julia  programming language, its features, and ecosystem. Includes setting up and running on macOS.",
        "categories": "Julia, macOS",
        "relative_path": "julia/about",
        "updated_at": "2026-03-13T02:10:00Z",
        "created_at": "2026-03-13T02:10:00Z",
        "id": "#430",
        "original_relative_path": "julia/about"
    },
    {
        "name": "Developing Feeds with RSS and Atom",
        "description": "Book notes - Developing Feeds with RSS and Atom: Developers Guide to Syndicating News & Blogs, by Ben Hammersley. First published January 1, 2005.",
        "categories": "Books",
        "relative_path": "books/developing-feeds-with-rss-and-atom",
        "updated_at": "2026-03-11T10:26:00Z",
        "created_at": "2026-03-11T10:26:00Z",
        "id": "#429",
        "original_relative_path": "books/developing-feeds-with-rss-and-atom"
    },
    {
        "name": "RSS and Atom",
        "description": "Book notes - RSS and Atom: Understanding and Implementing Content Feeds and Syndication, by Heinz Wittenbrink. First published January 1, 2005.",
        "categories": "Books",
        "relative_path": "books/rss-and-atom",
        "updated_at": "2026-03-11T10:26:00Z",
        "created_at": "2026-03-11T10:26:00Z",
        "id": "#428",
        "original_relative_path": "books/rss-and-atom"
    },
    {
        "name": "minSwapsToAlternate",
        "description": "Using Clojure to find the minimum swaps required to create an alternating array; cassidoo's interview question of the week (2026-03-09).",
        "categories": "Clojure, cassidoo",
        "relative_path": "clojure/min-swaps-to-alternate",
        "updated_at": "2026-03-11T05:33:00Z",
        "created_at": "2026-03-11T05:33:00Z",
        "id": "#427",
        "original_relative_path": "clojure/min-swaps-to-alternate"
    },
    {
        "id": "#426",
        "name": "About miniKanren",
        "description": "An overview of the miniKanren logic programming language, its features, and ecosystem. Includes setting up and running miniKanren embedded in Clojure on macOS.",
        "categories": "miniKanren, Clojure, macOS",
        "relative_path": "minikanren/about",
        "updated_at": "2026-03-10T10:15:00Z",
        "created_at": "2026-03-10T10:15:00Z",
        "original_relative_path": "minikanren/about"
    },
    {
        "id": "#425",
        "name": "The Reasoned Schemer",
        "description": "Book notes - The Reasoned Schemer, Second Edition, by Daniel P. Friedman, William E. Byrd, Oleg Kiselyov, Jason Hemann. First published July 1, 2005 by MIT Press. Second edition 2018.",
        "categories": "Books, miniKanren",
        "relative_path": "books/the-reasoned-schemer",
        "updated_at": "2026-03-10T10:15:00Z",
        "created_at": "2026-03-10T10:15:00Z",
        "original_relative_path": "books/the-reasoned-schemer"
    },
    {
        "name": "SEA-LION",
        "description": "About AI Singapore and SEA-LION - a family of open-source, multilingual, multimodal language models designed for Southeast Asia\u2019s diverse languages, cultures, and contexts. I evaluate one the leading models with some tests covering: multilingual legal/business contexts; cultural nuance & code-switching; and regional current affairs with local context.",
        "categories": "AI",
        "relative_path": "ai/sea-lion",
        "updated_at": "2026-03-09T08:00:00Z",
        "created_at": "2026-03-09T08:00:00Z",
        "id": "#424",
        "original_relative_path": "ai/sea-lion"
    },
    {
        "name": "majorityElement",
        "description": "Using Idris 2 to find the majority element in an array; cassidoo's interview question of the week (2026-03-02).",
        "categories": "Idris, cassidoo",
        "relative_path": "idris/majority-element",
        "updated_at": "2026-03-06T10:14:00Z",
        "created_at": "2026-03-06T10:14:00Z",
        "id": "#423",
        "original_relative_path": "idris/majority-element"
    },
    {
        "name": "TRELLIS.2",
        "description": "About TRELLIS.2, an open-source image to 3D generation model. TLDR - very disappointing results from my initial tests.",
        "categories": "AI",
        "relative_path": "ai/trellis2",
        "updated_at": "2026-03-04T05:55:00Z",
        "created_at": "2026-03-04T05:55:00Z",
        "id": "#422",
        "original_relative_path": "ai/trellis2"
    },
    {
        "name": "Tripo3D",
        "description": "About Tripo3D, an advanced AI-powered platform that generates high-quality 3D models. TLDR - incredibly accurate generation of coherent 3D models from even incomplete 2D images.",
        "categories": "AI",
        "relative_path": "ai/tripo3d",
        "updated_at": "2026-03-04T05:55:00Z",
        "created_at": "2026-03-04T05:55:00Z",
        "id": "#421",
        "original_relative_path": "ai/tripo3d"
    },
    {
        "name": "About Idris",
        "description": "An overview of the Idris 2 programming language, its features, and ecosystem. Includes setting up and running on macOS.",
        "categories": "Idris, macOS",
        "relative_path": "idris/about",
        "updated_at": "2026-03-03T02:59:00Z",
        "created_at": "2026-03-03T02:59:00Z",
        "id": "#420",
        "original_relative_path": "idris/about"
    },
    {
        "name": "maxSubarraySum",
        "description": "Using Lua to find the maximum sub-array sum; cassidoo's interview question of the week (2026-02-23). Turns out that this is probably also a proof for the sunk cost fallacy!",
        "categories": "Lua, cassidoo",
        "relative_path": "lua/max-sub-array-sum",
        "updated_at": "2026-02-25T02:47:00Z",
        "created_at": "2026-02-25T02:47:00Z",
        "id": "#419",
        "original_relative_path": "lua/max-sub-array-sum"
    },
    {
        "name": "Algorithms in a Nutshell",
        "description": "Book notes - Algorithms in a Nutshell: A Practical Guide by George T. Heineman, Gary Pollice, Stanley Selkow. First published October 14, 2008. Second edition published March 9, 2016 by O'Reilly Media.",
        "categories": "Books",
        "relative_path": "books/algorithms-in-a-nutshell",
        "updated_at": "2026-02-25T00:16:00Z",
        "created_at": "2026-02-25T00:16:00Z",
        "id": "#418",
        "original_relative_path": "books/algorithms-in-a-nutshell"
    },
    {
        "name": "About Lua",
        "description": "An overview of the Lua programming language, its features, and ecosystem. Includes setting up and running on macOS.",
        "categories": "Lua, macOS",
        "relative_path": "lua/about",
        "updated_at": "2026-02-23T23:33:00Z",
        "created_at": "2026-02-23T23:33:00Z",
        "id": "#417",
        "original_relative_path": "lua/about"
    },
    {
        "name": "Claude",
        "description": "A quick introduction to Claude and Claude Code; using ollama to swap models (including local models); and building a simple Chinese-English flashcard app as an example.",
        "categories": "AI",
        "relative_path": "ai/claude",
        "updated_at": "2026-02-23T10:36:00Z",
        "created_at": "2026-02-23T10:36:00Z",
        "id": "#416",
        "original_relative_path": "ai/claude"
    },
    {
        "name": "Testing RADIUS",
        "description": "Notes about testing RADIUS servers with CHAP and EAP.",
        "categories": "RADIUS, docker",
        "relative_path": "infrastructure/radius/testing",
        "updated_at": "2026-02-23T05:57:00Z",
        "created_at": "2026-02-23T05:57:00Z",
        "id": "#415",
        "original_relative_path": "infrastructure/radius/testing"
    },
    {
        "name": "Cursor",
        "description": "A quick introduction to Cursor, an AI-powered code editor",
        "categories": "AI",
        "relative_path": "ai/cursor",
        "updated_at": "2026-02-23T00:49:00Z",
        "created_at": "2026-02-23T00:49:00Z",
        "id": "#414",
        "original_relative_path": "ai/cursor"
    },
    {
        "name": "VQWiki",
        "description": "About the Very Quick Wiki Java-based WikiWikiWeb clone. The project is now officially abandoned, and I address exporting data from VQWiki.",
        "categories": "tools, Perl, Java",
        "relative_path": "tools/vqwiki",
        "updated_at": "2026-02-16T09:24:00Z",
        "created_at": "2026-02-16T09:24:00Z",
        "id": "#413",
        "original_relative_path": "tools/vqwiki"
    },
    {
        "name": "moveNums",
        "description": "Using Factor to rearrange an array; cassidoo's interview question of the week (2026-02-09).",
        "categories": "Factor, cassidoo",
        "relative_path": "factor/move-nums",
        "updated_at": "2026-02-13T07:20:00Z",
        "created_at": "2026-02-13T07:20:00Z",
        "id": "#412",
        "original_relative_path": "factor/move-nums"
    },
    {
        "name": "About Factor",
        "description": "An overview of the Factor programming language, its features, and ecosystem. Includes setting up and running on macOS.",
        "categories": "Factor, macOS",
        "relative_path": "factor/about",
        "updated_at": "2026-02-13T03:51:00Z",
        "created_at": "2026-02-13T03:51:00Z",
        "id": "#411",
        "original_relative_path": "factor/about"
    },
    {
        "name": "Transportation Trackers",
        "description": "A catalog and quick survey of transportation trackers: aviation; maritime; rail.",
        "categories": "Data Services",
        "relative_path": "dataservices/transportation-trackers",
        "updated_at": "2026-02-01T08:52:00Z",
        "created_at": "2026-02-01T08:52:00Z",
        "id": "#410",
        "original_relative_path": "dataservices/transportation-trackers"
    },
    {
        "name": "flippedy",
        "description": "Using python to count vowels and flip words; cassidoo's interview question of the week (2026-01-26).",
        "categories": "python, cassidoo",
        "relative_path": "python/flippedy",
        "updated_at": "2026-01-29T16:15:00Z",
        "created_at": "2026-01-29T16:15:00Z",
        "id": "#409",
        "original_relative_path": "python/flippedy"
    },
    {
        "name": "City Roads",
        "description": "City Roads as art! Something quite delightful about this open source project.",
        "categories": "maps, data visualization",
        "relative_path": "data-visualization/city-roads",
        "updated_at": "2026-01-28T11:27:00Z",
        "created_at": "2026-01-28T11:27:00Z",
        "id": "#408",
        "original_relative_path": "data-visualization/city-roads"
    },
    {
        "name": "VSCode Extensions with Typescript",
        "description": "An initial exploration of writing vscode extensions with Typescript",
        "categories": "tools, editors, typescript",
        "relative_path": "tools/vscode/first-extension",
        "updated_at": "2026-01-26T13:16:00Z",
        "created_at": "2026-01-26T13:16:00Z",
        "id": "#407",
        "original_relative_path": "tools/vscode/first-extension"
    },
    {
        "name": "Eloquent Ruby",
        "description": "Book notes - Eloquent Ruby, by Russ Olsen. First published January 27, 2011. Second Edition currently in beta - due Q1 2026.",
        "categories": "Books, Ruby",
        "relative_path": "books/eloquent-ruby",
        "updated_at": "2026-01-26T03:25:00Z",
        "created_at": "2026-01-26T03:25:00Z",
        "id": "#406",
        "original_relative_path": "books/eloquent-ruby"
    },
    {
        "name": "YouTube Time-stamped Link Maker",
        "description": "I wanted an easy way to generate markdown links to specific times in YouTube videos, using the actual video title and rendering the time in a more convenient hh:mm:ss format.",
        "categories": "python",
        "relative_path": "python/yt-md-link",
        "updated_at": "2026-01-25T14:04:00Z",
        "created_at": "2026-01-25T14:04:00Z",
        "id": "#405",
        "original_relative_path": "python/yt-md-link"
    },
    {
        "name": "Moonshot AI: Kimi K2 Thinking",
        "description": "About Kimi K2 and Kimi K2 Thinking from Moonshot AI.",
        "categories": "AI",
        "relative_path": "ai/kimi",
        "updated_at": "2026-01-22T13:23:00Z",
        "created_at": "2026-01-22T13:23:00Z",
        "id": "#404",
        "original_relative_path": "ai/kimi"
    },
    {
        "name": "konamiMapping",
        "description": "Using ruby to find a mapping that reveals the Konami Code in a string; cassidoo's interview question of the week (2026-01-19).",
        "categories": "Ruby, cassidoo",
        "relative_path": "ruby/konami-mapping",
        "updated_at": "2026-01-20T03:40:00Z",
        "created_at": "2026-01-20T03:40:00Z",
        "id": "#403",
        "original_relative_path": "ruby/konami-mapping"
    },
    {
        "name": "hungryBears",
        "description": "Using Clojure to find the bears that are more hungry than average; cassidoo's interview question of the week (2026-01-12).",
        "categories": "Clojure, cassidoo",
        "relative_path": "clojure/hungry-bears",
        "updated_at": "2026-01-15T03:21:00Z",
        "created_at": "2026-01-15T03:21:00Z",
        "id": "#402",
        "original_relative_path": "clojure/hungry-bears"
    },
    {
        "name": "maxScoreWithOneReset",
        "description": "Using Erlang to maximise the sum of an array with 1 reset allowed; cassidoo's interview question of the week (2026-01-05).",
        "categories": "Erlang, cassidoo",
        "relative_path": "erlang/max-score-with-one-reset",
        "updated_at": "2026-01-08T06:05:00Z",
        "created_at": "2026-01-08T06:05:00Z",
        "id": "#401",
        "original_relative_path": "erlang/max-score-with-one-reset"
    },
    {
        "name": "About dweet.cc",
        "description": "Dweet.cc provides simple machine-to-machine messaging over HTTPS. No setup. No auth. Just post and get lightweight JSON.",
        "categories": "Data Services, IoT",
        "relative_path": "dataservices/dweet",
        "updated_at": "2026-01-06T06:29:00Z",
        "created_at": "2026-01-06T06:29:00Z",
        "id": "#400",
        "original_relative_path": "dataservices/dweet"
    },
    {
        "name": "About Clojure",
        "description": "An overview of the Clojure programming language, its features, and ecosystem. Includes setting up and running on macOS.",
        "categories": "Clojure, macOS",
        "relative_path": "clojure/about",
        "updated_at": "2026-01-02T05:46:00Z",
        "created_at": "2026-01-02T05:46:00Z",
        "id": "#399",
        "original_relative_path": "clojure/about"
    },
    {
        "name": "Ruby 4.0",
        "description": "About Ruby 4.0 including installation on Apple Silicon.",
        "categories": "Ruby, macOS",
        "relative_path": "ruby/ruby40",
        "updated_at": "2026-01-02T02:05:00Z",
        "created_at": "2026-01-02T02:05:00Z",
        "id": "#398",
        "original_relative_path": "ruby/ruby40"
    },
    {
        "name": "About Erlang",
        "description": "An overview of the Erlang programming language, its features, and ecosystem. Includes setting up and running on macOS.",
        "categories": "Erlang, macOS",
        "relative_path": "erlang/about",
        "updated_at": "2026-01-01T10:51:00Z",
        "created_at": "2026-01-01T10:51:00Z",
        "id": "#397",
        "original_relative_path": "erlang/about"
    },
    {
        "name": "replaceRepeats",
        "description": "Using Scala to replace repeating digits in a number; cassidoo's interview question of the week (2025-12-29)",
        "categories": "Scala, cassidoo",
        "relative_path": "scala/replace-repeats",
        "updated_at": "2025-12-31T07:41:00Z",
        "created_at": "2025-12-31T07:41:00Z",
        "id": "#396",
        "original_relative_path": "scala/replace-repeats"
    },
    {
        "name": "About Scala",
        "description": "An overview of the Scala programming language, its features, and ecosystem. Includes setting up and running on macOS.",
        "categories": "Scala, macOS",
        "relative_path": "scala/about",
        "updated_at": "2025-12-31T06:15:00Z",
        "created_at": "2025-12-31T06:15:00Z",
        "id": "#395",
        "original_relative_path": "scala/about"
    },
    {
        "name": "Deck of Cards",
        "description": "Using the Io language to model a deck of cards, shuffle, and deal; cassidoo's interview question of the week (2025-12-08).",
        "categories": "Io, cassidoo",
        "relative_path": "io/deck",
        "updated_at": "2025-12-11T06:31:00Z",
        "created_at": "2025-12-11T06:31:00Z",
        "id": "#394",
        "original_relative_path": "io/deck"
    },
    {
        "name": "About Io",
        "description": "A quick review of the Io language. It perhaps became most famous after earning a chapter in Bruce Tate's Seven Languages in Seven Weeks.",
        "categories": "Io",
        "relative_path": "io/about",
        "updated_at": "2025-12-10T05:17:00Z",
        "created_at": "2025-12-10T05:17:00Z",
        "id": "#393",
        "original_relative_path": "io/about"
    },
    {
        "name": "Sorting HTML Colors",
        "description": "Using ruby to sort HTML Colors; cassidoo's interview question of the week (2025-12-01). But with one hand tied behind your back ... no built-in sorting methods allowed! I compare an intuitive insertion sort with a merge sort and benchmark the difference.",
        "categories": "Ruby, cassidoo",
        "relative_path": "ruby/html-color-sort",
        "updated_at": "2025-12-05T06:46:00Z",
        "created_at": "2025-12-05T06:46:00Z",
        "id": "#392",
        "original_relative_path": "ruby/html-color-sort"
    },
    {
        "name": "maxMealPrepTasks",
        "description": "Using ruby to solve the meal preparation problem; cassidoo's interview question of the week (2025-11-24). We're trying to find the maximum number of tasks we can handle serially .. sounds like a production planning problem to me!",
        "categories": "Ruby, cassidoo, scheduling",
        "relative_path": "ruby/max-meal-prep-tasks",
        "updated_at": "2025-11-27T03:51:00Z",
        "created_at": "2025-11-27T03:51:00Z",
        "id": "#391",
        "original_relative_path": "ruby/max-meal-prep-tasks"
    },
    {
        "name": "Solving Sudoku with Prolog",
        "description": "Using Prolog to solve sudoku-style problems",
        "categories": "Prolog",
        "relative_path": "prolog/sudoku",
        "updated_at": "2025-11-04T11:16:00Z",
        "created_at": "2025-11-04T11:16:00Z",
        "id": "#390",
        "original_relative_path": "prolog/sudoku"
    },
    {
        "name": "AI Use-cases",
        "description": "Research on AI Use-cases, adoption strategies, successes and failures.",
        "categories": "AI",
        "relative_path": "ai/use-cases",
        "updated_at": "2025-11-03T08:13:00Z",
        "created_at": "2025-11-03T08:13:00Z",
        "id": "#389",
        "original_relative_path": "ai/use-cases"
    },
    {
        "name": "List Manipulation with Prolog",
        "description": "Using Prolog to reverse, sort, and find the minimum of a list.",
        "categories": "Prolog",
        "relative_path": "prolog/lists",
        "updated_at": "2025-11-02T07:53:00Z",
        "created_at": "2025-11-02T07:53:00Z",
        "id": "#388",
        "original_relative_path": "prolog/lists"
    },
    {
        "name": "Musicians with Prolog",
        "description": "Using Prolog to represent and query a knowledge base representing musicians and instruments.",
        "categories": "Prolog",
        "relative_path": "prolog/musicians",
        "updated_at": "2025-11-01T09:09:00Z",
        "created_at": "2025-11-01T09:09:00Z",
        "id": "#387",
        "original_relative_path": "prolog/musicians"
    },
    {
        "name": "About Ruby",
        "description": "Ruby In a Nutshell: A brief overview of the Ruby programming language, its features, and application domains.",
        "categories": "Ruby",
        "relative_path": "ruby/about",
        "updated_at": "2025-11-01T08:20:00Z",
        "created_at": "2025-11-01T08:20:00Z",
        "id": "#386",
        "original_relative_path": "ruby/about"
    },
    {
        "name": "placeScarecrows",
        "description": "Using Haskell to place scarecrows in a field; cassidoo's interview question of the week (2025-10-27).",
        "categories": "Haskell, cassidoo",
        "relative_path": "haskell/place-scarecrows",
        "updated_at": "2025-10-31T13:01:00Z",
        "created_at": "2025-10-31T13:01:00Z",
        "id": "#385",
        "original_relative_path": "haskell/place-scarecrows"
    },
    {
        "name": "About Prolog",
        "description": "A quick introduction to Prolog and a test drive with GNU Prolog on macOS.",
        "categories": "Prolog, macOS",
        "relative_path": "prolog/about",
        "updated_at": "2025-10-31T05:25:00Z",
        "created_at": "2025-10-31T05:25:00Z",
        "id": "#384",
        "original_relative_path": "prolog/about"
    },
    {
        "name": "Fixing Ubuntu Boot Issues",
        "description": "When Windows, Dell, and Intel updates break your dual-boot Ubuntu ... Boot-Repair to the rescue!",
        "categories": "ubuntu",
        "relative_path": "ubuntu/boot-repair",
        "updated_at": "2025-10-29T10:21:00Z",
        "created_at": "2025-10-29T10:21:00Z",
        "id": "#383",
        "original_relative_path": "ubuntu/boot-repair"
    },
    {
        "name": "The uv Python Package and Project Manager",
        "description": "About uv, a new Python package and project manager written in rust. It replaces pip, pip-tools, pipx, poetry, pyenv, twine, virtualenv, and more.",
        "categories": "python",
        "relative_path": "python/uv",
        "updated_at": "2025-10-29T04:56:00Z",
        "created_at": "2025-10-29T04:56:00Z",
        "id": "#382",
        "original_relative_path": "python/uv"
    },
    {
        "name": "Conventional Commits",
        "description": "A specification for adding human and machine readable meaning to commit messages",
        "categories": "vcs, methods",
        "relative_path": "methods/conventionalcommits",
        "updated_at": "2025-10-28T12:46:00Z",
        "created_at": "2025-10-28T12:46:00Z",
        "id": "#381",
        "original_relative_path": "methods/conventionalcommits"
    },
    {
        "name": "conventional: comments",
        "description": "A standardised way to write comments that are easy to grok and grep.",
        "categories": "vcs, methods",
        "relative_path": "methods/conventionalcomments",
        "updated_at": "2025-10-27T15:51:00Z",
        "created_at": "2025-10-27T15:51:00Z",
        "id": "#380",
        "original_relative_path": "methods/conventionalcomments"
    },
    {
        "name": "Seven More Languages in Seven Weeks",
        "description": "Book notes - Seven More Languages in Seven Weeks: Languages That Are Shaping the Future, by Bruce A. Tate, Ian Dees, Frederic Daoud, Jack Moffitt. First published September 25, 2014. It covers Factor, Elm, Elixir, Julia, miniKanren, and Idris.",
        "categories": "Books, Factor, Elm, Elixir, Julia, miniKanren, Idris",
        "relative_path": "books/seven-more-languages-in-seven-weeks",
        "updated_at": "2025-10-27T13:09:00Z",
        "created_at": "2025-10-27T13:09:00Z",
        "id": "#379",
        "original_relative_path": "books/seven-more-languages-in-seven-weeks"
    },
    {
        "name": "Seven Languages in Seven Weeks",
        "description": "Book notes - Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages, by Bruce A. Tate. First published November 17, 2010. It covers Ruby, Io, Prolog, Scala, Erlang, Clojure, and Haskell.",
        "categories": "Books, Haskell, Prolog, Ruby, Io, Clojure, Erlang, Scala",
        "relative_path": "books/seven-languages-in-seven-weeks",
        "updated_at": "2025-10-27T12:46:00Z",
        "created_at": "2025-10-27T12:46:00Z",
        "id": "#378",
        "original_relative_path": "books/seven-languages-in-seven-weeks"
    },
    {
        "name": "Split by Widths",
        "description": "Using ruby to split strings into chunks of specified widths; cassidoo's interview question of the week (2025-10-20).",
        "categories": "Ruby, cassidoo",
        "relative_path": "ruby/split-by-widths",
        "updated_at": "2025-10-24T13:02:00Z",
        "created_at": "2025-10-24T13:02:00Z",
        "id": "#377",
        "original_relative_path": "ruby/split-by-widths"
    },
    {
        "name": "Singletons in Ruby",
        "description": "Using the singleton pattern in Ruby",
        "categories": "Ruby, design patterns",
        "relative_path": "ruby/singleton",
        "updated_at": "2025-10-22T14:54:00Z",
        "created_at": "2025-10-22T14:54:00Z",
        "id": "#376",
        "original_relative_path": "ruby/singleton"
    },
    {
        "name": "Design Patterns in Ruby",
        "description": "Book notes - Design Patterns in Ruby by Russ Olsen",
        "categories": "Ruby, design, design patterns, Books",
        "relative_path": "books/design-patterns-in-ruby",
        "updated_at": "2025-10-22T13:55:00Z",
        "created_at": "2025-10-22T13:55:00Z",
        "id": "#375",
        "original_relative_path": "books/design-patterns-in-ruby"
    },
    {
        "name": "Design Patterns",
        "description": "Book notes - Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Grady Booch, Richard Helm, Ralph Johnson, John Vlissides",
        "categories": "design, design patterns, Books",
        "relative_path": "design/design-patterns",
        "updated_at": "2025-10-22T13:55:00Z",
        "created_at": "2025-10-22T13:55:00Z",
        "id": "#374",
        "original_relative_path": "design/design-patterns"
    },
    {
        "name": "Context7",
        "description": "Using Context7 MCP Server with VSCode and GitHub Copilot to improve code generation quality.",
        "categories": "AI",
        "relative_path": "ai/context7",
        "updated_at": "2025-10-21T06:40:00Z",
        "created_at": "2025-10-21T06:40:00Z",
        "id": "#373",
        "original_relative_path": "ai/context7"
    },
    {
        "name": "csvToList",
        "description": "Using rust to format CSV data for printing; cassidoo's interview question of the week (2025-10-13). I test two common approaches for deserializing CSV in rust, and consider factoring of console IO for testability.",
        "categories": "Rust, cassidoo",
        "relative_path": "rust/csv-to-list",
        "updated_at": "2025-10-17T04:38:00Z",
        "created_at": "2025-10-17T04:38:00Z",
        "id": "#372",
        "original_relative_path": "rust/csv-to-list"
    },
    {
        "name": "Grouping ChangeLog Edits",
        "description": "Using ruby to group data in 10-minute buckets; cassidoo's interview question of the week (2025-10-06).",
        "categories": "Ruby, cassidoo",
        "relative_path": "ruby/group-changelog-edits",
        "updated_at": "2025-10-12T16:40:00Z",
        "created_at": "2025-10-12T16:40:00Z",
        "id": "#371",
        "original_relative_path": "ruby/group-changelog-edits"
    },
    {
        "name": "Command Line Options with Ruby",
        "description": "Comparing all the various ways of parsing command line arguments with the Ruby standard library.",
        "categories": "Ruby",
        "relative_path": "ruby/cli-options",
        "updated_at": "2025-10-09T06:09:00Z",
        "created_at": "2025-10-09T06:09:00Z",
        "id": "#370",
        "original_relative_path": "ruby/cli-options"
    },
    {
        "name": "Gamma AI",
        "description": "A quick review and test drive of Gamma AI for content generation for presentation, website, social media posts, etc.",
        "categories": "AI",
        "relative_path": "ai/gamma",
        "updated_at": "2025-10-08T05:08:00Z",
        "created_at": "2025-10-08T05:08:00Z",
        "id": "#369",
        "original_relative_path": "ai/gamma"
    },
    {
        "name": "BetterImage",
        "description": "A quick review and test drive of BetterImage, an AI image upscaler.",
        "categories": "AI",
        "relative_path": "ai/betterimage",
        "updated_at": "2025-10-08T04:40:00Z",
        "created_at": "2025-10-08T04:40:00Z",
        "id": "#368",
        "original_relative_path": "ai/betterimage"
    },
    {
        "name": "KlingAI",
        "description": "A quick review and test drive of KlingAI for image and video generation.",
        "categories": "AI",
        "relative_path": "ai/klingai",
        "updated_at": "2025-10-08T04:36:00Z",
        "created_at": "2025-10-08T04:36:00Z",
        "id": "#367",
        "original_relative_path": "ai/klingai"
    },
    {
        "name": "Recraft AI",
        "description": "A quick review and test drive of recraft.ai for image generation and editing",
        "categories": "AI",
        "relative_path": "ai/recraft",
        "updated_at": "2025-10-08T04:33:00Z",
        "created_at": "2025-10-08T04:33:00Z",
        "id": "#366",
        "original_relative_path": "ai/recraft"
    },
    {
        "name": "Flux AI",
        "description": "A quick review and test drive of Flux AI  creative solution including image generation",
        "categories": "AI",
        "relative_path": "ai/flux",
        "updated_at": "2025-10-08T04:30:00Z",
        "created_at": "2025-10-08T04:30:00Z",
        "id": "#365",
        "original_relative_path": "ai/flux"
    },
    {
        "name": "Ideogram AI",
        "description": "A quick review and test drive of ideogram.ai text to image model.",
        "categories": "AI",
        "relative_path": "ai/ideogram",
        "updated_at": "2025-10-08T04:25:00Z",
        "created_at": "2025-10-08T04:25:00Z",
        "id": "#364",
        "original_relative_path": "ai/ideogram"
    },
    {
        "name": "NotebookLM",
        "description": "A quick review and test drive of Google's NotebookLM research and writing assistant.",
        "categories": "AI",
        "relative_path": "ai/notebooklm",
        "updated_at": "2025-10-08T04:19:00Z",
        "created_at": "2025-10-08T04:19:00Z",
        "id": "#363",
        "original_relative_path": "ai/notebooklm"
    },
    {
        "name": "hyperfactorial",
        "description": "Using rust to calculate the hyper-factorial of a non-negative integer; cassidoo's interview question of the week (2025-09-29)",
        "categories": "Rust, cassidoo",
        "relative_path": "rust/hyperfactorial",
        "updated_at": "2025-10-04T07:34:00Z",
        "created_at": "2025-10-04T07:34:00Z",
        "id": "#362",
        "original_relative_path": "rust/hyperfactorial"
    },
    {
        "name": "Snake",
        "description": "Build and update the snake game example from Rust lang: The complete beginner's guide, learning about making GUI applications with PistonWindow and Rust.",
        "categories": "Rust",
        "relative_path": "rust/snake",
        "updated_at": "2025-10-02T08:14:00Z",
        "created_at": "2025-10-02T08:14:00Z",
        "id": "#361",
        "original_relative_path": "rust/snake"
    },
    {
        "name": "Base44",
        "description": "A quick review and test drive of Base44 AI-powered app builder and hosting solution.",
        "categories": "AI",
        "relative_path": "ai/base44",
        "updated_at": "2025-10-01T04:30:00Z",
        "created_at": "2025-10-01T04:30:00Z",
        "id": "#360",
        "original_relative_path": "ai/base44"
    },
    {
        "name": "Chat CLI",
        "description": "Build and update the CLI chat example from Rust lang: The complete beginner's guide, learning about making client-server network programs with Rust.",
        "categories": "Rust",
        "relative_path": "rust/chat-cli",
        "updated_at": "2025-09-28T03:53:00Z",
        "created_at": "2025-09-28T03:53:00Z",
        "id": "#359",
        "original_relative_path": "rust/chat-cli"
    },
    {
        "name": "What Kind of Number",
        "description": "Using rust to classify perfect, deficient, and abundant numbers; cassidoo's interview question of the week (2025-09-22)",
        "categories": "Rust, cassidoo",
        "relative_path": "rust/what-kind-of-number",
        "updated_at": "2025-09-26T06:49:00Z",
        "created_at": "2025-09-26T06:49:00Z",
        "id": "#358",
        "original_relative_path": "rust/what-kind-of-number"
    },
    {
        "name": "Analyze a Baseball Game",
        "description": "Using rust to analyze a baseball game; cassidoo's interview question of the week (2025-09-15). This was the day I advanced to consciously incompetent in the rules of baseball.",
        "categories": "Rust, cassidoo",
        "relative_path": "rust/analyze-baseball-game",
        "updated_at": "2025-09-20T04:56:00Z",
        "created_at": "2025-09-20T04:56:00Z",
        "id": "#357",
        "original_relative_path": "rust/analyze-baseball-game"
    },
    {
        "name": "Ruby 3.4",
        "description": "About Ruby 3.4 including installation on Apple Silicon.",
        "categories": "Ruby, macOS",
        "relative_path": "ruby/ruby34",
        "updated_at": "2025-09-12T06:46:00Z",
        "created_at": "2025-09-12T06:46:00Z",
        "id": "#356",
        "original_relative_path": "ruby/ruby34"
    },
    {
        "name": "Array Accumulation Problem",
        "description": "Using ruby to solve the array accumulation problem; cassidoo's interview question of the week (2025-09-08)",
        "categories": "Ruby, cassidoo",
        "relative_path": "ruby/array-accumulation-problem",
        "updated_at": "2025-09-10T11:27:00Z",
        "created_at": "2025-09-10T11:27:00Z",
        "id": "#355",
        "original_relative_path": "ruby/array-accumulation-problem"
    },
    {
        "name": "DCO",
        "description": "About the Developer Certificate of Origin and how to support it with git",
        "categories": "git",
        "relative_path": "methods/dco",
        "updated_at": "2025-09-06T08:36:00Z",
        "created_at": "2025-09-06T08:36:00Z",
        "id": "#354",
        "original_relative_path": "methods/dco"
    },
    {
        "name": "Shell Gem",
        "description": "Quick review of the shell gem for ruby",
        "categories": "Ruby",
        "relative_path": "ruby/shell-gem",
        "updated_at": "2025-09-04T04:17:00Z",
        "created_at": "2025-09-04T04:17:00Z",
        "id": "#353",
        "original_relative_path": "ruby/shell-gem"
    },
    {
        "name": "macOS Notifications with Ruby",
        "description": "Modern alternatives to the old growl notification system for ruby programming on macOS: osascript, terminal-notifier",
        "categories": "Ruby, macOS",
        "relative_path": "ruby/macos-notifications",
        "updated_at": "2025-09-01T05:12:00Z",
        "created_at": "2025-09-01T05:12:00Z",
        "id": "#352",
        "original_relative_path": "ruby/macos-notifications"
    },
    {
        "name": "REXX, The Developer's Best Friend",
        "description": "An article about REXX, published in EDM/2 The Electronic Developer Magazine for OS/2, March 1995, Volume 3 Issue 3.",
        "categories": "REXX, OS/2",
        "relative_path": "rexx/the-developers-best-friend",
        "updated_at": "2025-08-27T09:05:00Z",
        "created_at": "2025-08-27T09:05:00Z",
        "id": "#351",
        "original_relative_path": "rexx/the-developers-best-friend"
    },
    {
        "name": "The Ruby Way",
        "description": "Book notes - The Ruby Way, by Hal Fulton. First published January 1, 2001.",
        "categories": "Ruby, Books",
        "relative_path": "books/the-ruby-way",
        "updated_at": "2025-08-27T08:21:00Z",
        "created_at": "2025-08-27T08:21:00Z",
        "id": "#350",
        "original_relative_path": "books/the-ruby-way"
    },
    {
        "name": "Ruby File Handling",
        "description": "Reviewing common file operations with ruby",
        "categories": "Ruby",
        "relative_path": "ruby/file-operations",
        "updated_at": "2025-08-27T04:59:00Z",
        "created_at": "2025-08-27T04:59:00Z",
        "id": "#349",
        "original_relative_path": "ruby/file-operations"
    },
    {
        "name": "Rust File Handling",
        "description": "Reviewing common file operations with rust",
        "categories": "Rust",
        "relative_path": "rust/file-handling",
        "updated_at": "2025-08-27T04:15:00Z",
        "created_at": "2025-08-27T04:15:00Z",
        "id": "#348",
        "original_relative_path": "rust/file-handling"
    },
    {
        "name": "Create Laundry Item",
        "description": "Using rust to implement a generator for a laundry object; cassidoo's interview question of the week (2025-08-11). Rust does not encourage classic object-oriented patterns by default, but it can be used to model similar concepts with the struct keyword.",
        "categories": "Rust, cassidoo",
        "relative_path": "rust/create-laundry-item",
        "updated_at": "2025-08-24T12:44:00Z",
        "created_at": "2025-08-24T12:44:00Z",
        "id": "#347",
        "original_relative_path": "rust/create-laundry-item"
    },
    {
        "name": "Group Audio Files",
        "description": "Using rust to organise songs into playlists; cassidoo's interview question of the week (2025-08-11). Compares results from First Fit Decreasing (FFD) and Best Fit Decreasing (BFD) bin packing algorithms.",
        "categories": "Rust, cassidoo",
        "relative_path": "rust/group-audio-files",
        "updated_at": "2025-08-15T04:27:00Z",
        "created_at": "2025-08-15T04:27:00Z",
        "id": "#346",
        "original_relative_path": "rust/group-audio-files"
    },
    {
        "name": "Color tools for Ruby",
        "description": "A quick look at the color gem: a Ruby library used to represent colors in a range of color models and offer color space manipulation support to applications that require it.",
        "categories": "Ruby",
        "relative_path": "ruby/color-gem",
        "updated_at": "2025-08-06T16:19:00Z",
        "created_at": "2025-08-06T16:19:00Z",
        "id": "#345",
        "original_relative_path": "ruby/color-gem"
    },
    {
        "name": "Tiktokenizer",
        "description": "Tiktokenizer is a playground for simulating and visualising the tokenization performed by various LLMs.",
        "categories": "tools, AI",
        "relative_path": "ai/tiktokenizer",
        "updated_at": "2025-07-29T14:18:00Z",
        "created_at": "2025-07-29T14:18:00Z",
        "id": "#344",
        "original_relative_path": "ai/tiktokenizer"
    },
    {
        "name": "AI Leaderboards",
        "description": "Tracking some of the main AI leaderboards",
        "categories": "tools, AI",
        "relative_path": "ai/leaderboards",
        "updated_at": "2025-07-29T13:44:00Z",
        "created_at": "2025-07-29T13:44:00Z",
        "id": "#343",
        "original_relative_path": "ai/leaderboards"
    },
    {
        "name": "The Keyboard Assembly Problem",
        "description": "Using ruby to solve the keyboard assembly problem; cassidoo's interview question of the week (2025-07-21). Reminds me of my under-grad days learning production scheduling (SPT, EDD etc). Now I realise how much I've internalised these concepts as part of my working practices to get things done.",
        "categories": "Ruby, cassidoo, scheduling",
        "relative_path": "ruby/assembly-planning-problem",
        "updated_at": "2025-07-28T05:41:00Z",
        "created_at": "2025-07-28T05:41:00Z",
        "id": "#342",
        "original_relative_path": "ruby/assembly-planning-problem"
    },
    {
        "name": "AI Tutorials",
        "description": "AI training and tutorials (mainly free)",
        "categories": "AI",
        "relative_path": "ai/tutorials",
        "updated_at": "2025-07-24T15:27:00Z",
        "created_at": "2025-07-24T15:27:00Z",
        "id": "#341",
        "original_relative_path": "ai/tutorials"
    },
    {
        "name": "Image/File Renamer",
        "description": "Ever have a bunch of files (like screenshots) that you want to give a standardised, sequential name and possibly generate a markdown link? Here's a script for that.",
        "categories": "bash, tools",
        "relative_path": "bash/image-renamer",
        "updated_at": "2025-07-17T15:21:00Z",
        "created_at": "2025-07-17T15:21:00Z",
        "id": "#340",
        "original_relative_path": "bash/image-renamer"
    },
    {
        "name": "Fireworks Grand finale",
        "description": "Using ruby to find the best fireworks grand finale; cassidoo's interview question of the week (2025-07-06). This time I turned off the AI and enjoyed thinking about the deceptively simple algorithmic challenge from first principles.",
        "categories": "Ruby, cassidoo",
        "relative_path": "ruby/grand-finale",
        "updated_at": "2025-07-11T09:09:00Z",
        "created_at": "2025-07-11T09:09:00Z",
        "id": "#339",
        "original_relative_path": "ruby/grand-finale"
    },
    {
        "name": "rsync",
        "description": "All about rsync - a fast, versatile, local and remote file-copying tool",
        "categories": "rsync, tools",
        "relative_path": "tools/rsync",
        "updated_at": "2025-07-09T02:23:00Z",
        "created_at": "2025-07-09T02:23:00Z",
        "id": "#338",
        "original_relative_path": "tools/rsync"
    },
    {
        "name": "Last Non-repeating Character Challenge",
        "description": "Using ruby to return the last non-repeating character in a string; cassidoo's interview question of the week (2025-06-30). It's hard to stop AI butting in to help, but don't accept the first answer it gives you.",
        "categories": "Ruby, AI, cassidoo",
        "relative_path": "ruby/last-non-repeating-character",
        "updated_at": "2025-07-02T03:56:00Z",
        "created_at": "2025-07-02T03:56:00Z",
        "id": "#337",
        "original_relative_path": "ruby/last-non-repeating-character"
    },
    {
        "name": "Tidy Folder Names",
        "description": "A little script that can standardise the naming of a set of folders to kebab-case, snake_case, or CamelCase",
        "categories": "bash",
        "relative_path": "bash/tidy-folder-names",
        "updated_at": "2025-06-20T04:16:00Z",
        "created_at": "2025-06-20T04:16:00Z",
        "id": "#336",
        "original_relative_path": "bash/tidy-folder-names"
    },
    {
        "name": "The Odd-sum Epic",
        "description": "Cassidy Williams recently featured a ruby coding challenge that spurred a lively discussion of algorithms, and a general marvelling at the loveliness of ruby's Enumerable class. There was however a bit of a requirements trap in the question, not uncommon IRL, but it had me wondering how well generative AI would cope. I put ChatGPT and Deepseek to the test, and the results are in!",
        "categories": "Ruby, AI, cassidoo",
        "relative_path": "ruby/odd-sum-epic",
        "updated_at": "2025-06-15T06:49:00Z",
        "created_at": "2025-06-15T06:49:00Z",
        "id": "#335",
        "original_relative_path": "ruby/odd-sum-epic"
    },
    {
        "name": "Serial Communications with Ruby",
        "description": "Options for serial communications in Ruby as they stand in 2025",
        "categories": "Ruby",
        "relative_path": "ruby/serial",
        "updated_at": "2025-06-12T15:54:00Z",
        "created_at": "2025-06-12T15:54:00Z",
        "id": "#334",
        "original_relative_path": "ruby/serial"
    },
    {
        "name": "screen",
        "description": "GNU Screen is a terminal multiplexer that can also be used as a general serial console",
        "categories": "tools",
        "relative_path": "tools/screen",
        "updated_at": "2025-06-11T06:14:00Z",
        "created_at": "2025-06-11T06:14:00Z",
        "id": "#333",
        "original_relative_path": "tools/screen"
    },
    {
        "name": "Cheat Sheets for Developers",
        "description": "The ultimate repository of sheets and quick references meticulously crafted by the open community boost your productivity",
        "categories": "tools",
        "relative_path": "tools/cheatsheets",
        "updated_at": "2025-06-08T13:45:00Z",
        "created_at": "2025-06-08T13:45:00Z",
        "id": "#332",
        "original_relative_path": "tools/cheatsheets"
    },
    {
        "name": "Object Oriented Modeling And Design",
        "description": "Book notes - Object Oriented Modeling And Design by James Rumbaugh, Michael R. Blaha, William Premerlani, Frederick Eddy, William Lorensen.",
        "categories": "design, Books, methods",
        "relative_path": "design/object-oriented-modeling-and-design",
        "updated_at": "2025-06-06T08:26:00Z",
        "created_at": "2025-06-06T08:26:00Z",
        "id": "#331",
        "original_relative_path": "design/object-oriented-modeling-and-design"
    },
    {
        "name": "Shuffle Wallpaper",
        "description": "I thought triggering the immediate shuffle of the wallpaper on a macOS would be a quick scripting task. After wasting too much tim on this, I discovered that it used to be possible, but since at last macOS Sonoma, the System Events API has not kept up with the OS implementation, and now it is totally broken, with no fix in sight.",
        "categories": "macOS, scripting",
        "relative_path": "tools/macos/shuffle_wallpaper",
        "updated_at": "2025-05-22T14:41:00Z",
        "created_at": "2025-05-22T14:41:00Z",
        "id": "#330",
        "original_relative_path": "tools/macos/shuffle_wallpaper"
    },
    {
        "name": "Scripting macOS",
        "description": "About options for scripting and automating macOS.",
        "categories": "macOS, scripting",
        "relative_path": "tools/macos/scripting",
        "updated_at": "2025-05-22T14:41:00Z",
        "created_at": "2025-05-22T14:41:00Z",
        "id": "#329",
        "original_relative_path": "tools/macos/scripting"
    },
    {
        "name": "joined",
        "description": "Testing the joined gem, a low-dependency implementation of the Rails to_sentence method.",
        "categories": "Ruby",
        "relative_path": "ruby/joined",
        "updated_at": "2025-05-13T08:59:00Z",
        "created_at": "2025-05-13T08:59:00Z",
        "id": "#328",
        "original_relative_path": "ruby/joined"
    },
    {
        "name": "PMP in Docker?",
        "description": "Is it possible to run PMP in a Docker container? As far as my tests show - no. Not currently at least.",
        "categories": "security",
        "relative_path": "security/pmp/docker",
        "updated_at": "2025-04-30T02:42:00Z",
        "created_at": "2025-04-30T02:42:00Z",
        "id": "#327",
        "original_relative_path": "security/pmp/docker"
    },
    {
        "name": "catsay GUI",
        "description": "Building the GUI catsay example from Practical Rust Projects, learning about making graphical interface programs with Rust",
        "categories": "Rust",
        "relative_path": "rust/catsay-gui",
        "updated_at": "2025-04-29T08:28:00Z",
        "created_at": "2025-04-29T08:28:00Z",
        "id": "#326",
        "original_relative_path": "rust/catsay-gui"
    },
    {
        "name": "catsay TUI",
        "description": "Building the text UI catsay example from Practical Rust Projects, learning about making text UI programs with Rust",
        "categories": "Rust",
        "relative_path": "rust/catsay-tui",
        "updated_at": "2025-04-29T05:13:00Z",
        "created_at": "2025-04-29T05:13:00Z",
        "id": "#325",
        "original_relative_path": "rust/catsay-tui"
    },
    {
        "name": "catsay CLI",
        "description": "Building the catsay example from Practical Rust Projects, learning about making command-line programs with Rust",
        "categories": "Rust",
        "relative_path": "rust/cli-catsay",
        "updated_at": "2025-04-16T05:48:00Z",
        "created_at": "2025-04-16T05:48:00Z",
        "id": "#324",
        "original_relative_path": "rust/cli-catsay"
    },
    {
        "name": "Practical Rust Projects",
        "description": "Book notes: Practical Rust Projects: Building Game, Physical Computing, and Machine Learning Applications, by Shing Lyu. Published February 28, 2020.",
        "categories": "Rust, Books",
        "relative_path": "books/practical-rust-projects",
        "updated_at": "2025-04-13T14:19:00Z",
        "created_at": "2025-04-13T14:19:00Z",
        "id": "#323",
        "original_relative_path": "books/practical-rust-projects"
    },
    {
        "name": "Practical Cryptography in Python",
        "description": "Book notes: Practical Cryptography in Python: Learning Correct Cryptography by Example, by Seth James Nielso,  Christopher K. Monson. Published September 27, 2019.",
        "categories": "Books, python, cryptography",
        "relative_path": "books/practical-cryptography-in-python",
        "updated_at": "2025-03-31T15:02:00Z",
        "created_at": "2025-03-31T15:02:00Z",
        "id": "#322",
        "original_relative_path": "books/practical-cryptography-in-python"
    },
    {
        "name": "Rowhammer Then and Now",
        "description": "About a new study to analyze the prevalence of Rowhammer in real-world systems. Updated with results.",
        "categories": "security",
        "relative_path": "security/rowhammer",
        "updated_at": "2025-03-28T13:03:00Z",
        "created_at": "2025-03-28T13:03:00Z",
        "id": "#321",
        "original_relative_path": "security/rowhammer"
    },
    {
        "name": "OpenSSL Self-signed Certificates",
        "description": "A guide and automation for generating Self-signed Certificates with OpenSSL.",
        "categories": "security",
        "relative_path": "security/openssl_ca",
        "updated_at": "2025-03-17T06:36:00Z",
        "created_at": "2025-03-17T06:36:00Z",
        "id": "#320",
        "original_relative_path": "security/openssl_ca"
    },
    {
        "name": "DeepSeek AI",
        "description": "A first look at DeepSeek: its history, source, and a demonstration of running locally (macOS/apple silicon)",
        "categories": "tools, AI",
        "relative_path": "ai/deepseek",
        "updated_at": "2025-01-28T14:56:00Z",
        "created_at": "2025-01-28T14:56:00Z",
        "id": "#319",
        "original_relative_path": "ai/deepseek"
    },
    {
        "name": "Git Batch Push",
        "description": "Using a batch push technique to overcome 2GB GitHub limits",
        "categories": "tools, git",
        "relative_path": "tools/git/batch_push",
        "updated_at": "2025-01-28T08:15:00Z",
        "created_at": "2025-01-28T08:15:00Z",
        "id": "#318",
        "original_relative_path": "tools/git/batch_push"
    },
    {
        "name": "Symmetric Encryption with AWS KMS",
        "description": "Using AWS Key Management Service (KMS) for data encrypt/decrypt with symmetric keys, with CLI examples",
        "categories": "security, KMS, encryption, decryption",
        "relative_path": "security/kms/symmetric_data_encryption",
        "updated_at": "2025-01-19T14:04:00Z",
        "created_at": "2025-01-19T14:04:00Z",
        "id": "#317",
        "original_relative_path": "security/kms/symmetric_data_encryption"
    },
    {
        "name": "AWS KMS",
        "description": "About the AWS Key Management Service (KMS)",
        "categories": "security, KMS",
        "relative_path": "security/kms/about",
        "updated_at": "2025-01-19T13:52:00Z",
        "created_at": "2025-01-19T13:52:00Z",
        "id": "#316",
        "original_relative_path": "security/kms/about"
    },
    {
        "name": "Inkscape",
        "description": "About Inkscape, with installation on macOS.",
        "categories": "tools, graphics",
        "relative_path": "design/inkscape",
        "updated_at": "2025-01-19T09:01:00Z",
        "created_at": "2025-01-19T09:01:00Z",
        "id": "#315",
        "original_relative_path": "design/inkscape"
    },
    {
        "name": "Ambient Findability",
        "description": "Book notes - Ambient Findability, By Peter Morville, published by O'Reilly",
        "categories": "design, Books",
        "relative_path": "design/ambient_findability",
        "updated_at": "2025-01-02T05:46:00Z",
        "id": "#314",
        "created_at": "2025-01-02T05:46:00Z",
        "original_relative_path": "design/ambient_findability"
    },
    {
        "name": "SQLECTRON",
        "description": "About SQLECTRON, the open-source SQL client for all dbs and all platforms.",
        "categories": "databases, tools, SQL",
        "relative_path": "tools/sqlectron",
        "updated_at": "2024-12-30T07:07:00Z",
        "id": "#313",
        "created_at": "2024-12-30T07:07:00Z",
        "original_relative_path": "tools/sqlectron"
    },
    {
        "name": "CSV to Markdown Tables (Ruby)",
        "description": "How to convert comma-separated value data into markdown tables with ruby",
        "categories": "Ruby, markdown, CSV",
        "relative_path": "ruby/csv2md",
        "updated_at": "2024-12-29T16:07:00Z",
        "id": "#312",
        "created_at": "2024-12-29T16:07:00Z",
        "original_relative_path": "ruby/csv2md"
    },
    {
        "name": "CSV to Markdown Tables",
        "description": "Options for converting comma-separated value data into markdown tables, including python scripts, command line utilities, online tools, and editor extensions.",
        "categories": "python, markdown, CSV, tools",
        "relative_path": "python/csv2md",
        "updated_at": "2024-12-29T07:09:00Z",
        "id": "#311",
        "created_at": "2024-12-29T07:09:00Z",
        "original_relative_path": "python/csv2md"
    },
    {
        "name": "Ruby 3.3",
        "description": "About Ruby 3.3 including installation on Apple Silicon. Updated to 3.3.10 released 2025-10-23.",
        "categories": "Ruby, macOS",
        "relative_path": "ruby/ruby33",
        "updated_at": "2024-11-13T05:19:00Z",
        "id": "#310",
        "created_at": "2024-11-13T05:19:00Z",
        "original_relative_path": "ruby/ruby33"
    },
    {
        "name": "Ruby 3.2",
        "description": "About Ruby 3.2 including installation on Apple Silicon.",
        "categories": "Ruby, macOS",
        "relative_path": "ruby/ruby32",
        "updated_at": "2024-11-13T04:38:00Z",
        "id": "#309",
        "created_at": "2024-11-13T04:38:00Z",
        "original_relative_path": "ruby/ruby32"
    },
    {
        "name": "Using ChatGPT/OpenAI APIs with Python",
        "description": "The basics of using ChatGPT/OpenAI APIs with Python",
        "categories": "python, AI",
        "relative_path": "python/chatgpt",
        "updated_at": "2024-11-10T08:29:00Z",
        "id": "#308",
        "created_at": "2024-11-10T08:29:00Z",
        "original_relative_path": "python/chatgpt"
    },
    {
        "name": "Pro Git",
        "description": "About Pro Git - the essential guide for mastering Git by Scott Chacon and Ben Straub.",
        "categories": "vcs, git, Books",
        "relative_path": "books/pro-git",
        "updated_at": "2024-11-05T02:18:00Z",
        "id": "#307",
        "created_at": "2024-11-05T02:18:00Z",
        "original_relative_path": "books/pro-git"
    },
    {
        "name": "git rebase all",
        "description": "How to rebase all local branches on the current master/main branch",
        "categories": "vcs, git",
        "relative_path": "tools/git/rebase_all",
        "updated_at": "2024-11-04T14:16:00Z",
        "id": "#306",
        "created_at": "2024-11-04T14:16:00Z",
        "original_relative_path": "tools/git/rebase_all"
    },
    {
        "name": "about git",
        "description": "A general introduction to git and source control systems.",
        "categories": "vcs, git",
        "relative_path": "tools/git/about",
        "updated_at": "2024-11-04T13:51:00Z",
        "id": "#305",
        "created_at": "2024-11-04T13:51:00Z",
        "original_relative_path": "tools/git/about"
    },
    {
        "name": "Share a Place",
        "description": "Updating dependencies and API usage for the select and share a place app from the Understanding TypeScript course",
        "categories": "typescript",
        "relative_path": "typescript/shareplace",
        "updated_at": "2024-11-01T03:44:00Z",
        "id": "#304",
        "created_at": "2024-11-01T03:44:00Z",
        "original_relative_path": "typescript/shareplace"
    },
    {
        "name": "ID3 Tags",
        "description": "Managing ID3 tags with Ruby",
        "categories": "Ruby",
        "relative_path": "ruby/id3tags",
        "updated_at": "2024-09-29T06:47:00Z",
        "id": "#303",
        "created_at": "2024-09-29T06:47:00Z",
        "original_relative_path": "ruby/id3tags"
    },
    {
        "name": "Mandelbrot",
        "description": "A learning example Mandelbrot fractal generator in C++",
        "categories": "C++",
        "relative_path": "cpp/mandelbrot",
        "updated_at": "2024-09-18T08:59:00Z",
        "id": "#302",
        "created_at": "2024-09-18T08:59:00Z",
        "original_relative_path": "cpp/mandelbrot"
    },
    {
        "name": "RubyKaigi 2024",
        "description": "Recordings from RubyKaigi 2024 held in Okinawa",
        "categories": "Ruby",
        "relative_path": "ruby/rubyconf/ruby_kaigi_2024",
        "updated_at": "2024-08-30T03:29:00Z",
        "id": "#301",
        "created_at": "2024-08-30T03:29:00Z",
        "original_relative_path": "ruby/RubyConf/ruby_kaigi_2024"
    },
    {
        "name": "RailsConf 2024",
        "description": "Overview and notes from RailsConf 2024",
        "categories": "Ruby",
        "relative_path": "ruby/railsconf/2024",
        "updated_at": "2024-08-22T06:48:00Z",
        "id": "#300",
        "created_at": "2024-08-22T06:48:00Z",
        "original_relative_path": "ruby/RailsConf/2024"
    },
    {
        "name": "Red Dot Ruby Conference 2024",
        "description": "Conference summary and notes",
        "categories": "Ruby",
        "relative_path": "ruby/rubyconf/rdrc2024",
        "updated_at": "2024-08-20T08:42:00Z",
        "id": "#299",
        "created_at": "2024-08-20T08:42:00Z",
        "original_relative_path": "ruby/RubyConf/rdrc2024"
    },
    {
        "name": "Hammerspoon",
        "description": "Test driving Hammerspoon for automation on macOS",
        "categories": "tools",
        "relative_path": "tools/hammerspoon",
        "updated_at": "2024-08-15T01:11:00Z",
        "id": "#298",
        "created_at": "2024-08-15T01:11:00Z",
        "original_relative_path": "tools/hammerspoon"
    },
    {
        "name": "AI Tools",
        "description": "A collection of AI tools that I've either used or would like to check out at some point",
        "categories": "tools, AI",
        "relative_path": "ai",
        "updated_at": "2024-08-14T06:08:00Z",
        "id": "#297",
        "created_at": "2024-08-14T06:08:00Z",
        "original_relative_path": "ai"
    },
    {
        "name": "PT Backup",
        "description": "How to script a simple Pivotal Tracker backup with python and the RESTful API",
        "categories": "tools, python",
        "relative_path": "tools/pt_backup",
        "updated_at": "2024-08-11T12:00:00Z",
        "id": "#296",
        "created_at": "2024-08-11T12:00:00Z",
        "original_relative_path": "tools/pt_backup"
    },
    {
        "name": "Installing Node.js Ubuntu",
        "description": "Installing and maintaining Node.js on Ubuntu",
        "categories": "node",
        "relative_path": "node/install_ubuntu",
        "updated_at": "2024-08-07T05:08:36Z",
        "id": "#295",
        "created_at": "2024-08-07T05:08:36Z",
        "original_relative_path": "node/install_ubuntu"
    },
    {
        "name": "About TypeScript",
        "description": "TypeScript - my tl;dr summary, plus notes on getting started on macOS (Apple Silicon) and Ubuntu (x86).",
        "categories": "typescript, macOS, ubuntu",
        "relative_path": "typescript/about",
        "updated_at": "2024-08-07T04:50:53Z",
        "id": "#294",
        "created_at": "2024-08-07T04:50:53Z",
        "original_relative_path": "typescript/about"
    },
    {
        "name": "Homebrew on Apple Silicon",
        "description": "Using Homebrew to manage ARM64 and x86_64 package installations on macOS.",
        "categories": "tools, macOS",
        "relative_path": "tools/homebrew/apple_silicon",
        "updated_at": "2024-08-07T03:27:26Z",
        "id": "#293",
        "created_at": "2024-08-07T03:27:26Z",
        "original_relative_path": "tools/homebrew/apple_silicon"
    },
    {
        "id": "#292",
        "name": "Installing gRPC for macOS",
        "description": "installing on macOS",
        "categories": "gRPC, macOS, messaging",
        "relative_path": "messaging/grpc/install_macosx",
        "updated_at": "2024-07-09T12:04:13Z",
        "created_at": "2024-07-09T12:04:13Z",
        "original_relative_path": "messaging/grpc/install_macosx"
    },
    {
        "id": "#291",
        "name": "doxygen",
        "description": "Installing and testing doxygen for c++ source documentation generation on macOS",
        "categories": "C++",
        "relative_path": "cpp/doxygen",
        "updated_at": "2024-07-09T12:04:13Z",
        "created_at": "2024-07-09T12:04:13Z",
        "original_relative_path": "cpp/doxygen"
    },
    {
        "id": "#290",
        "name": "Installing elm",
        "description": "Installing Elm on macOS",
        "categories": "Elm, macOS",
        "relative_path": "elm/install",
        "updated_at": "2024-07-09T12:04:13Z",
        "created_at": "2024-07-09T12:04:13Z",
        "original_relative_path": "elm/install"
    },
    {
        "id": "#289",
        "name": "Installing Rust for macOS",
        "description": "Rust - installing on macOS",
        "categories": "Rust, macOS",
        "relative_path": "rust/install_macosx",
        "updated_at": "2024-07-09T12:04:13Z",
        "created_at": "2024-07-09T12:04:13Z",
        "original_relative_path": "rust/install_macosx"
    },
    {
        "name": "xargs",
        "description": "All about using xargs to build and execute command lines from standard input",
        "categories": "tools",
        "relative_path": "tools/xargs",
        "updated_at": "2024-04-18T10:28:59Z",
        "id": "#288",
        "created_at": "2024-04-18T10:28:59Z",
        "original_relative_path": "tools/xargs"
    },
    {
        "name": "CSV with Ruby",
        "description": "All about reading and writing CSV with Ruby, including large file handling.",
        "categories": "Ruby",
        "relative_path": "ruby/csv",
        "updated_at": "2024-04-02T11:23:25Z",
        "id": "#287",
        "created_at": "2024-04-02T11:23:25Z",
        "original_relative_path": "ruby/csv"
    },
    {
        "name": "LLDP",
        "description": "About LLDP (Link Layer Discovery Protocol), IEEE 802.1AB",
        "categories": "tools",
        "relative_path": "tools/lldp",
        "updated_at": "2024-03-21T17:14:32Z",
        "id": "#286",
        "created_at": "2024-03-21T17:14:32Z",
        "original_relative_path": "tools/lldp"
    },
    {
        "name": "Think Python",
        "description": "Book notes - Think Python, 2nd edition, by Allen B. Downey, published by O'Reilly.",
        "categories": "python, Books",
        "relative_path": "books/think-python",
        "updated_at": "2024-03-21T16:44:15Z",
        "id": "#285",
        "created_at": "2024-03-21T16:44:15Z",
        "original_relative_path": "books/think-python"
    },
    {
        "name": "Network Quality Estimation",
        "description": "Accessing network connection information in the browser.",
        "categories": "web",
        "relative_path": "web/nqe",
        "updated_at": "2024-03-16T08:03:14Z",
        "id": "#284",
        "created_at": "2024-03-16T08:03:14Z",
        "original_relative_path": "web/nqe"
    },
    {
        "name": "ubuntu docker image",
        "description": "Using the official ubuntu docker images.",
        "categories": "docker",
        "relative_path": "docker/ubuntu",
        "updated_at": "2024-03-14T13:44:25Z",
        "id": "#283",
        "created_at": "2024-03-14T13:44:25Z",
        "original_relative_path": "docker/ubuntu"
    },
    {
        "name": "PMP REST API",
        "description": "Notes on setting up and using the PMP REST API",
        "categories": "security",
        "relative_path": "security/pmp/rest_api",
        "updated_at": "2024-03-14T13:06:26Z",
        "id": "#282",
        "created_at": "2024-03-14T13:06:26Z",
        "original_relative_path": "security/pmp/rest_api"
    },
    {
        "name": "pypmp",
        "description": "Using pypmp to call the PMP REST API from python",
        "categories": "security",
        "relative_path": "security/pmp/pypmp",
        "updated_at": "2024-03-14T13:06:26Z",
        "id": "#281",
        "created_at": "2024-03-14T13:06:26Z",
        "original_relative_path": "security/pmp/pypmp"
    },
    {
        "name": "About PMP",
        "description": "About ManageEngine Password Manager Pro including Linux server installation",
        "categories": "security",
        "relative_path": "security/pmp/about",
        "updated_at": "2024-03-14T13:06:26Z",
        "id": "#280",
        "created_at": "2024-03-14T13:06:26Z",
        "original_relative_path": "security/pmp/about"
    },
    {
        "name": "Sublime Merge",
        "description": "All about Sublime Merge.",
        "categories": "tools, git",
        "relative_path": "tools/sublime_merge",
        "updated_at": "2024-03-02T15:09:02Z",
        "id": "#279",
        "created_at": "2024-03-02T15:09:02Z",
        "original_relative_path": "tools/sublime_merge"
    },
    {
        "name": "GitOps",
        "description": "GitOps in a nutshell - Continuous Deployment for cloud native applications",
        "categories": "methods",
        "relative_path": "methods/gitops",
        "updated_at": "2024-02-16T00:28:20Z",
        "id": "#278",
        "created_at": "2024-02-16T00:28:20Z",
        "original_relative_path": "methods/gitops"
    },
    {
        "name": "Installing Node.js macOS",
        "description": "Installing and maintaining Node.js on macOS",
        "categories": "node",
        "relative_path": "node/install_macosx",
        "updated_at": "2024-02-13T01:54:56Z",
        "id": "#277",
        "created_at": "2024-02-13T01:54:56Z",
        "original_relative_path": "node/install_macosx"
    },
    {
        "name": "MySQL 8",
        "description": "All about MySQL 8 and examples of running with docker",
        "categories": "databases, MySQL",
        "relative_path": "databases/mysql/mysql8",
        "updated_at": "2024-01-14T07:33:12Z",
        "id": "#276",
        "created_at": "2024-01-14T07:33:12Z",
        "original_relative_path": "databases/mysql/mysql8"
    },
    {
        "name": "Linking C",
        "description": "All about compiling, linking, and debugging C with GCC on macOx (Intel and Apple Silicon)",
        "categories": "C",
        "relative_path": "c/linking",
        "updated_at": "2024-01-14T06:45:10Z",
        "id": "#275",
        "created_at": "2024-01-14T06:45:10Z",
        "original_relative_path": "c/linking"
    },
    {
        "name": "AMQP with Ruby",
        "description": "Using the amqp EventMachine-based RabbitMQ client",
        "categories": "Ruby",
        "relative_path": "ruby/amqp",
        "updated_at": "2024-01-14T05:12:07Z",
        "id": "#274",
        "created_at": "2024-01-14T05:12:07Z",
        "original_relative_path": "ruby/amqp"
    },
    {
        "name": "RabbitMQ",
        "description": "All about RabbitMQ message broker",
        "categories": "messaging",
        "relative_path": "messaging/rabbitmq",
        "updated_at": "2024-01-14T04:15:55Z",
        "id": "#273",
        "created_at": "2024-01-14T04:15:55Z",
        "original_relative_path": "messaging/rabbitmq"
    },
    {
        "name": "HandBrake",
        "description": "Installing HandBrake on macOS Sonoma for ripping copy-protected DVDs. Long live physical media!",
        "categories": "tools",
        "relative_path": "tools/handbrake",
        "updated_at": "2023-12-29T11:40:31Z",
        "id": "#272",
        "created_at": "2023-12-29T11:40:31Z",
        "original_relative_path": "tools/handbrake"
    },
    {
        "name": "Bash on macOS",
        "description": "Using latest bash releases on the latest versions of macOS",
        "categories": "bash",
        "relative_path": "bash/macos",
        "updated_at": "2023-12-29T06:06:21Z",
        "id": "#271",
        "created_at": "2023-12-29T06:06:21Z",
        "original_relative_path": "bash/macos"
    },
    {
        "name": "Using with_defaults",
        "description": "About the `reverse_merge` and `with_defaults` Hash mixins from Rails",
        "categories": "Ruby",
        "relative_path": "ruby/with_defaults",
        "updated_at": "2023-11-29T09:39:18Z",
        "id": "#270",
        "created_at": "2023-11-29T09:39:18Z",
        "original_relative_path": "ruby/with_defaults"
    },
    {
        "name": "Docker Housekeeping",
        "description": "Some simple housekeeping commands for Docker",
        "categories": "docker",
        "relative_path": "docker/housekeeping",
        "updated_at": "2023-11-22T09:44:52Z",
        "id": "#269",
        "created_at": "2023-11-22T09:44:52Z",
        "original_relative_path": "docker/housekeeping"
    },
    {
        "name": "PostgreSQL Sequences",
        "description": "Notes on managing PostgreSQL Sequences",
        "categories": "databases, PostgreSQL",
        "relative_path": "databases/postgresql/sequences",
        "updated_at": "2023-08-29T13:21:49Z",
        "id": "#268",
        "created_at": "2023-08-29T13:21:49Z",
        "original_relative_path": "databases/postgresql/sequences"
    },
    {
        "name": "PostgreSQL Locks",
        "description": "Notes on managing PostgreSQL locks",
        "categories": "databases, PostgreSQL",
        "relative_path": "databases/postgresql/locks",
        "updated_at": "2023-08-29T13:21:49Z",
        "id": "#267",
        "created_at": "2023-08-29T13:21:49Z",
        "original_relative_path": "databases/postgresql/locks"
    },
    {
        "name": "xe_currency",
        "description": "Using the Xe Currency Data API from Ruby and with curl",
        "categories": "Ruby",
        "relative_path": "ruby/xe_currency",
        "updated_at": "2023-07-14T16:06:25Z",
        "id": "#266",
        "created_at": "2023-07-14T16:06:25Z",
        "original_relative_path": "ruby/xe_currency"
    },
    {
        "name": "Lotto Picker - The Rust Way",
        "description": "Using a lotto picker example to demonstrate random numbers and set operations the rust way",
        "categories": "Rust",
        "relative_path": "rust/lotto_picker",
        "updated_at": "2023-05-18T14:09:55Z",
        "id": "#265",
        "created_at": "2023-05-18T14:09:55Z",
        "original_relative_path": "rust/lotto_picker"
    },
    {
        "name": "Lotto Picker - The Python Way",
        "description": "Using a lotto picker example to demonstrate random numbers and set operations the python way",
        "categories": "python",
        "relative_path": "python/lotto_picker",
        "updated_at": "2023-05-16T14:38:29Z",
        "id": "#264",
        "created_at": "2023-05-16T14:38:29Z",
        "original_relative_path": "python/lotto_picker"
    },
    {
        "name": "Lotto Picker - The Ruby Way",
        "description": "Using a lotto picker example to demonstrate random numbers and set operations the ruby way",
        "categories": "Ruby",
        "relative_path": "ruby/lotto_picker",
        "updated_at": "2023-05-15T13:01:31Z",
        "id": "#263",
        "created_at": "2023-05-15T13:01:31Z",
        "original_relative_path": "ruby/lotto_picker"
    },
    {
        "name": "Minimal Django Starter Project",
        "description": "The basic Django app framework",
        "categories": "python, django",
        "relative_path": "python/django/minimal_startproject",
        "updated_at": "2023-05-15T06:00:47Z",
        "id": "#262",
        "created_at": "2023-05-15T06:00:47Z",
        "original_relative_path": "python/django/minimal_startproject"
    },
    {
        "name": "Minimal Django",
        "description": "The most bare-bones single file Django app",
        "categories": "python, django",
        "relative_path": "python/django/minimal",
        "updated_at": "2023-05-15T06:00:47Z",
        "id": "#261",
        "created_at": "2023-05-15T06:00:47Z",
        "original_relative_path": "python/django/minimal"
    },
    {
        "name": "Parameter Substitution",
        "description": "All about Bash parameter substitution.",
        "categories": "bash",
        "relative_path": "bash/parameter_substitution",
        "updated_at": "2023-05-02T11:19:32Z",
        "id": "#260",
        "created_at": "2023-05-02T11:19:32Z",
        "original_relative_path": "bash/parameter_substitution"
    },
    {
        "name": "Flask Web Development",
        "description": "Book notes - Flask Web Development, By Miguel Grinberg, published by O'Reilly",
        "categories": "python, Books",
        "relative_path": "books/flask-web-development",
        "updated_at": "2023-05-02T10:34:36Z",
        "id": "#259",
        "created_at": "2023-05-02T10:34:36Z",
        "original_relative_path": "books/flask-web-development"
    },
    {
        "name": "Lightweight Django",
        "description": "Book notes - Lightweight Django, By Julia Elman, Mark Lavin, published by O'Reilly",
        "categories": "python, Books",
        "relative_path": "books/lightweight-django",
        "updated_at": "2023-05-02T10:08:56Z",
        "id": "#258",
        "created_at": "2023-05-02T10:08:56Z",
        "original_relative_path": "books/lightweight-django"
    },
    {
        "name": "cookieconsent",
        "description": "Using cookieconsent for embedding cookie warnings in a web page",
        "categories": "web, GDPR",
        "relative_path": "web/cookieconsent",
        "updated_at": "2023-04-27T13:33:45Z",
        "id": "#257",
        "created_at": "2023-04-27T13:33:45Z",
        "original_relative_path": "web/cookieconsent"
    },
    {
        "name": "Sublime Text",
        "description": "All about Sublime Text",
        "categories": "tools, editors",
        "relative_path": "tools/sublime_text",
        "updated_at": "2023-04-27T13:14:43Z",
        "id": "#256",
        "created_at": "2023-04-27T13:14:43Z",
        "original_relative_path": "tools/sublime_text"
    },
    {
        "name": "disk usage",
        "description": "how to survey disk usage on linux systems",
        "categories": "bash",
        "relative_path": "bash/disk_usage",
        "updated_at": "2023-03-29T11:22:43Z",
        "id": "#255",
        "created_at": "2023-03-29T11:22:43Z",
        "original_relative_path": "bash/disk_usage"
    },
    {
        "name": "Primary Key Audit",
        "description": "How to list primary key details in a MySQL database",
        "categories": "databases, MySQL",
        "relative_path": "databases/mysql/primary_key_audit",
        "updated_at": "2023-02-24T11:03:24Z",
        "id": "#254",
        "created_at": "2023-02-24T11:03:24Z",
        "original_relative_path": "databases/mysql/primary_key_audit"
    },
    {
        "name": "Big O Notation",
        "description": "About Big O Notation",
        "categories": "methods",
        "relative_path": "methods/big_o_notation",
        "updated_at": "2023-02-24T10:50:50Z",
        "id": "#253",
        "created_at": "2023-02-24T10:50:50Z",
        "original_relative_path": "methods/big_o_notation"
    },
    {
        "name": "getopts",
        "description": "Using the getopts utility for parsing options in shell scripts",
        "categories": "bash",
        "relative_path": "bash/getopts",
        "updated_at": "2023-02-24T10:43:49Z",
        "id": "#252",
        "created_at": "2023-02-24T10:43:49Z",
        "original_relative_path": "bash/getopts"
    },
    {
        "name": "Video Editing",
        "description": "Miscellaneous video editing and manipulation tools",
        "categories": "tools, video",
        "relative_path": "tools/video_editing",
        "updated_at": "2023-01-22T08:10:18Z",
        "id": "#251",
        "created_at": "2023-01-22T08:10:18Z",
        "original_relative_path": "tools/video_editing"
    },
    {
        "name": "Chart Gems",
        "description": "Notes on ruby options for chart generation that support output as an image",
        "categories": "Ruby, graphing",
        "relative_path": "ruby/chart_gems",
        "updated_at": "2023-01-09T10:56:24Z",
        "id": "#250",
        "created_at": "2023-01-09T10:56:24Z",
        "original_relative_path": "ruby/chart_gems"
    },
    {
        "name": "Livable Code",
        "description": "Notes on the RailsConf 2018 Keynote - Livable Code by Sarah Mei",
        "categories": "methods",
        "relative_path": "methods/livable_code",
        "updated_at": "2023-01-08T12:52:46Z",
        "id": "#249",
        "created_at": "2023-01-08T12:52:46Z",
        "original_relative_path": "methods/livable_code"
    },
    {
        "name": "The Case of the Missing Method",
        "description": "Or to mix literary metaphors, where in the world do class methods get stored? An investigation into the sublime and elegant design of metaclasses in ruby",
        "categories": "Ruby",
        "relative_path": "ruby/case_of_the_missing_method",
        "updated_at": "2023-01-08T05:28:54Z",
        "id": "#248",
        "created_at": "2023-01-08T05:28:54Z",
        "original_relative_path": "ruby/case_of_the_missing_method"
    },
    {
        "name": "Audio Tone Generator",
        "description": "I used ChatGPT to show me how to make an audio tone generation tool in Javascript and it taught me how to use the new(ish) AudioContext API",
        "categories": "javascript, audio",
        "relative_path": "javascript/tone_generator",
        "updated_at": "2023-01-07T05:20:40Z",
        "id": "#247",
        "created_at": "2023-01-07T05:20:40Z",
        "original_relative_path": "javascript/tone_generator"
    },
    {
        "name": "The Pocket Guide to Debugging",
        "description": "Book notes - The Pocket Guide to Debugging by Julia Evans",
        "categories": "methods",
        "relative_path": "methods/the_pocket_guide_to_debugging",
        "updated_at": "2022-12-28T06:09:49Z",
        "id": "#246",
        "created_at": "2022-12-28T06:09:49Z",
        "original_relative_path": "methods/the_pocket_guide_to_debugging"
    },
    {
        "name": "Querying Atom Feeds",
        "description": "Techniques and examples for querying Atom Feeds with XPath and Nokogiri",
        "categories": "Ruby",
        "relative_path": "ruby/querying_atom_feeds",
        "updated_at": "2022-12-26T03:31:51Z",
        "id": "#245",
        "created_at": "2022-12-26T03:31:51Z",
        "original_relative_path": "ruby/querying_atom_feeds"
    },
    {
        "name": "Compiling Ruby",
        "description": "Compiling Ruby (2.6.5-p114) from source and some debugging with llvm",
        "categories": "Ruby, C",
        "relative_path": "rubylang/compiling",
        "updated_at": "2022-12-21T05:31:38Z",
        "id": "#244",
        "created_at": "2022-12-21T05:31:38Z",
        "original_relative_path": "rubylang/compiling"
    },
    {
        "name": "Image Resize",
        "description": "Simple image resizing with python and the Pillow library and a little yak shaving with EXIF tags",
        "categories": "python",
        "relative_path": "python/image_resize",
        "updated_at": "2022-12-21T05:02:14Z",
        "id": "#243",
        "created_at": "2022-12-21T05:02:14Z",
        "original_relative_path": "python/image_resize"
    },
    {
        "name": "Satellite Imagery Sources",
        "description": "Poking around free satellite imagery services",
        "categories": "tools, osint",
        "relative_path": "tools/satelliteimagerysources",
        "updated_at": "2022-12-19T03:16:47Z",
        "id": "#242",
        "created_at": "2022-12-19T03:16:47Z",
        "original_relative_path": "tools/SatelliteImagerySources"
    },
    {
        "name": "NTP with Ruby",
        "description": "All about the NTP protocol with examples in ruby",
        "categories": "Ruby",
        "relative_path": "ruby/ntp",
        "updated_at": "2022-11-13T05:06:15Z",
        "id": "#241",
        "created_at": "2022-11-13T05:06:15Z",
        "original_relative_path": "ruby/ntp"
    },
    {
        "name": "IPv4 Addresses with Ruby",
        "description": "All about dissecting IPv4 addresses with ruby including networks, netmasks and CIDR",
        "categories": "Ruby",
        "relative_path": "ruby/ipv4",
        "updated_at": "2022-11-09T14:04:02Z",
        "id": "#240",
        "created_at": "2022-11-09T14:04:02Z",
        "original_relative_path": "ruby/ipv4"
    },
    {
        "name": "Python Playground",
        "description": "Book notes - Python Playground, by Mahesh Venkitachalam, published by No Starch Press",
        "categories": "python, Books",
        "relative_path": "books/python-playground",
        "updated_at": "2022-11-09T10:28:32Z",
        "id": "#239",
        "created_at": "2022-11-09T10:28:32Z",
        "original_relative_path": "books/python-playground"
    },
    {
        "name": "favicons",
        "description": "All about favicons",
        "categories": "web",
        "relative_path": "web/favicons",
        "updated_at": "2022-11-05T16:13:59Z",
        "id": "#238",
        "created_at": "2022-11-05T16:13:59Z",
        "original_relative_path": "web/favicons"
    },
    {
        "name": "Self-signed Certs",
        "description": "Creating a self-signed certificate",
        "categories": "security",
        "relative_path": "security/self-signed-certs",
        "updated_at": "2022-10-20T01:07:20Z",
        "id": "#237",
        "created_at": "2022-10-20T01:07:20Z",
        "original_relative_path": "security/self-signed-certs"
    },
    {
        "name": "PKCS12",
        "description": "About PKCS #12 archive files",
        "categories": "security",
        "relative_path": "security/pkcs12",
        "updated_at": "2022-10-20T01:07:20Z",
        "id": "#236",
        "created_at": "2022-10-20T01:07:20Z",
        "original_relative_path": "security/PKCS12"
    },
    {
        "name": "WiFi Scanners",
        "description": "A quick survey of WiFi scanners",
        "categories": "tools, networking",
        "relative_path": "tools/wifi_scanners",
        "updated_at": "2022-10-19T14:32:55Z",
        "id": "#235",
        "created_at": "2022-10-19T14:32:55Z",
        "original_relative_path": "tools/wifi_scanners"
    },
    {
        "name": "Ruckus vSZ on AWS",
        "description": "Complete and validated demonstration of installing Ruckus Virtual SmartZone on AWS",
        "categories": "networking, WLAN",
        "relative_path": "infrastructure/ruckus/vsz_on_aws",
        "updated_at": "2022-10-18T14:16:38Z",
        "id": "#234",
        "created_at": "2022-10-18T14:16:38Z",
        "original_relative_path": "infrastructure/ruckus/vsz_on_aws"
    },
    {
        "name": "Adding APs to vSZ",
        "description": "Configuring a Ruckus R610 access point to be managed by a Ruckus Virtual SmartZone controller",
        "categories": "networking, WLAN",
        "relative_path": "infrastructure/ruckus/vsz_add_ap",
        "updated_at": "2022-10-18T14:16:38Z",
        "id": "#233",
        "created_at": "2022-10-18T14:16:38Z",
        "original_relative_path": "infrastructure/ruckus/vsz_add_ap"
    },
    {
        "name": "Convert SZ AP to Unleashed",
        "description": "Demonstrating the procedure for converting a SZ-managed Ruckus R610 AP to Unleashed",
        "categories": "networking, WLAN",
        "relative_path": "infrastructure/ruckus/convert_sz_ap_to_unleashed",
        "updated_at": "2022-10-18T14:16:38Z",
        "id": "#232",
        "created_at": "2022-10-18T14:16:38Z",
        "original_relative_path": "infrastructure/ruckus/convert_sz_ap_to_unleashed"
    },
    {
        "name": "cron",
        "description": "all about cron and OS-managed scheduled tasks",
        "categories": "tools",
        "relative_path": "tools/cron",
        "updated_at": "2022-09-05T14:41:47Z",
        "id": "#231",
        "created_at": "2022-09-05T14:41:47Z",
        "original_relative_path": "tools/cron"
    },
    {
        "name": "php include",
        "description": "How to include or require other files in a PHP script",
        "categories": "php",
        "relative_path": "php/include",
        "updated_at": "2022-09-05T14:31:17Z",
        "id": "#230",
        "created_at": "2022-09-05T14:31:17Z",
        "original_relative_path": "php/include"
    },
    {
        "name": "php md5",
        "description": "Are you still using MD5 in PHP?",
        "categories": "php",
        "relative_path": "php/md5",
        "updated_at": "2022-09-05T14:31:17Z",
        "id": "#229",
        "created_at": "2022-09-05T14:31:17Z",
        "original_relative_path": "php/md5"
    },
    {
        "name": "Split Files",
        "description": "Split a text file into parts with simple shell utilities",
        "categories": "bash",
        "relative_path": "bash/split_files",
        "updated_at": "2022-07-22T09:29:42Z",
        "id": "#228",
        "created_at": "2022-07-22T09:29:42Z",
        "original_relative_path": "bash/split_files"
    },
    {
        "name": "Docker Shell",
        "description": "How to get a bash shell in a docker instance",
        "categories": "docker",
        "relative_path": "docker/shell",
        "updated_at": "2022-07-07T05:35:51Z",
        "id": "#227",
        "created_at": "2022-07-07T05:35:51Z",
        "original_relative_path": "docker/shell"
    },
    {
        "name": "Python SNMP Servers",
        "description": "Researching simple pure Python SNMP Server options",
        "categories": "python, SNMP",
        "relative_path": "python/snmp_server",
        "updated_at": "2022-06-23T07:29:32Z",
        "id": "#226",
        "created_at": "2022-06-23T07:29:32Z",
        "original_relative_path": "python/snmp_server"
    },
    {
        "name": "XML Parsing with Ruby",
        "description": "About techniques for working with XML, HTML4, and HTML5 from Ruby with gems like nokogiri",
        "categories": "Ruby, XML, HTML, nokogiri",
        "relative_path": "ruby/xml_parsing",
        "updated_at": "2022-05-11T11:26:02Z",
        "id": "#225",
        "created_at": "2022-05-11T11:26:02Z",
        "original_relative_path": "ruby/xml_parsing"
    },
    {
        "name": "fullcalendar",
        "description": "Using the fullcalendar library for the web",
        "categories": "web, javascript",
        "relative_path": "web/fullcalendar",
        "updated_at": "2022-05-04T05:30:47Z",
        "id": "#224",
        "created_at": "2022-05-04T05:30:47Z",
        "original_relative_path": "web/fullcalendar"
    },
    {
        "name": "Ruby One-liners",
        "description": "All about one-liners with ruby",
        "categories": "Ruby",
        "relative_path": "ruby/one-liners",
        "updated_at": "2022-04-10T03:16:06Z",
        "id": "#223",
        "created_at": "2022-04-10T03:16:06Z",
        "original_relative_path": "ruby/one-liners"
    },
    {
        "name": "Bootstrap Date and Time Pickers",
        "description": "About date/time pickers with bootstrap",
        "categories": "web, javascript",
        "relative_path": "web/bootstrap_datetime_pickers",
        "updated_at": "2022-03-24T02:11:25Z",
        "id": "#222",
        "created_at": "2022-03-24T02:11:25Z",
        "original_relative_path": "web/bootstrap_datetime_pickers"
    },
    {
        "name": "bootstrap",
        "description": "About Bootstrap",
        "categories": "web, javascript",
        "relative_path": "web/bootstrap",
        "updated_at": "2022-03-24T02:11:25Z",
        "id": "#221",
        "created_at": "2022-03-24T02:11:25Z",
        "original_relative_path": "web/bootstrap"
    },
    {
        "name": "Making Static Libraries",
        "description": "Basics of building and using static libraries with C++",
        "categories": "C++",
        "relative_path": "cpp/static_library",
        "updated_at": "2021-11-12T18:00:30Z",
        "id": "#220",
        "created_at": "2021-11-12T18:00:30Z",
        "original_relative_path": "cpp/static_library"
    },
    {
        "name": "Binary Files",
        "description": "Simple binary file operations with C++",
        "categories": "C++",
        "relative_path": "cpp/binary_files",
        "updated_at": "2021-11-10T13:57:14Z",
        "id": "#219",
        "created_at": "2021-11-10T13:57:14Z",
        "original_relative_path": "cpp/binary_files"
    },
    {
        "name": "SFTP",
        "description": "About SSH File Transfer Protocol",
        "categories": "tools",
        "relative_path": "tools/sftp",
        "updated_at": "2021-11-10T10:52:54Z",
        "id": "#218",
        "created_at": "2021-11-10T10:52:54Z",
        "original_relative_path": "tools/sftp"
    },
    {
        "name": "SSH",
        "description": "About Secure Shell (SSH) and common SSH tips and tricks.",
        "categories": "tools",
        "relative_path": "tools/ssh",
        "updated_at": "2021-11-09T06:03:08Z",
        "id": "#217",
        "created_at": "2021-11-09T06:03:08Z",
        "original_relative_path": "tools/ssh"
    },
    {
        "name": "HTTP Mock Responses",
        "description": "Using Sinatra to craft simple HTTP web responses for mock integration testing",
        "categories": "Ruby",
        "relative_path": "ruby/http_mock_responses",
        "updated_at": "2021-11-02T14:53:49Z",
        "id": "#216",
        "created_at": "2021-11-02T14:53:49Z",
        "original_relative_path": "ruby/http_mock_responses"
    },
    {
        "name": "zeromq on macOS",
        "description": "Installing zeromq on macOS",
        "categories": "messaging, zeromq",
        "relative_path": "messaging/zeromq/install_macosx",
        "updated_at": "2021-11-02T14:53:49Z",
        "id": "#215",
        "created_at": "2021-11-02T14:53:49Z",
        "original_relative_path": "messaging/zeromq/install_macosx"
    },
    {
        "id": "#214",
        "name": "FreeRADIUS Server on macOS",
        "description": "All about running FreeRADIUS Server on macOS, both native build, and with Docker.",
        "categories": "RADIUS, macOS, infrastructure, docker",
        "relative_path": "infrastructure/radius/freeradius-server-macosx",
        "updated_at": "2021-11-02T14:53:49Z",
        "created_at": "2021-11-02T14:53:49Z",
        "original_relative_path": "infrastructure/radius/freeradius-server-macosx"
    },
    {
        "id": "#213",
        "name": "FreeRADIUS Client on macOS",
        "description": "All about running FreeRADIUS on macOS (currently a #fail, needs work)",
        "categories": "RADIUS, macOS, infrastructure",
        "relative_path": "infrastructure/radius/freeradius-client-macosx",
        "updated_at": "2021-11-02T14:53:49Z",
        "created_at": "2021-11-02T14:53:49Z",
        "original_relative_path": "infrastructure/radius/freeradius-client-macosx"
    },
    {
        "name": "SDL2 macOS Install",
        "description": "Installing the Simple DirectMedia Layer library on macOS, and running a basic verification program in C++",
        "categories": "C++, SDL",
        "relative_path": "cpp/sdl/install",
        "updated_at": "2021-11-02T14:53:49Z",
        "id": "#212",
        "created_at": "2021-11-02T14:53:49Z",
        "original_relative_path": "cpp/sdl/install"
    },
    {
        "id": "#211",
        "name": "Haskell/install_macosx",
        "description": "installing Haskell on macOS",
        "categories": "Haskell, macOS",
        "relative_path": "haskell/install_macosx",
        "updated_at": "2021-11-02T14:53:49Z",
        "created_at": "2021-11-02T14:53:49Z",
        "original_relative_path": "haskell/install_macosx"
    },
    {
        "name": "Elixir on macOS",
        "description": "Installing Elixir on macOS",
        "categories": "Elixir, docker, macOS",
        "relative_path": "elixir/install_macosx",
        "updated_at": "2021-11-02T14:53:49Z",
        "id": "#210",
        "created_at": "2021-11-02T14:53:49Z",
        "original_relative_path": "elixir/install_macosx"
    },
    {
        "name": "Installing Python 2 and 3 on macOS",
        "description": "Notes on installing and maintaining python 2 and 3 versions on macOS",
        "categories": "python",
        "relative_path": "python/install_macosx",
        "updated_at": "2021-11-02T14:53:49Z",
        "id": "#209",
        "created_at": "2021-11-02T14:53:49Z",
        "original_relative_path": "python/install_macosx"
    },
    {
        "id": "#208",
        "name": "Building MicroPython on macOS",
        "description": "Quick notes building MicroPython on desktop hardware. First tested with macOS/Intel, updated Jan-2026 with macOS on Apple Silicon and Ubuntu 24.04.",
        "categories": "python, MicroPython, macOS, ubuntu",
        "relative_path": "python/micropython/compiling-for-pc",
        "updated_at": "2021-11-02T14:53:49Z",
        "created_at": "2021-11-02T14:53:49Z",
        "original_relative_path": "python/micropython/compiling-for-pc"
    },
    {
        "id": "#207",
        "name": "Go on macOS",
        "description": "installing Go on macOS",
        "categories": "Go, macOS",
        "relative_path": "go/install_macosx",
        "updated_at": "2021-11-02T14:53:49Z",
        "created_at": "2021-11-02T14:53:49Z",
        "original_relative_path": "go/install_macosx"
    },
    {
        "name": "Building for ARM with Docker",
        "description": "Building 32-bit ARM v7 images with docker, tested on macOS and AWS",
        "categories": "docker, ARM",
        "relative_path": "docker/arm_builds",
        "updated_at": "2021-11-02T14:53:49Z",
        "id": "#206",
        "created_at": "2021-11-02T14:53:49Z",
        "original_relative_path": "docker/arm_builds"
    },
    {
        "name": "iReasoning MIB browser",
        "description": "Testing the iReasoning MIB browser on macOS",
        "categories": "tools, SNMP",
        "relative_path": "tools/mibbrowser",
        "updated_at": "2021-11-02T14:53:49Z",
        "id": "#205",
        "created_at": "2021-11-02T14:53:49Z",
        "original_relative_path": "tools/mibbrowser"
    },
    {
        "id": "#204",
        "name": "iproute2",
        "description": "about iproute2 and how to run it on macOS",
        "categories": "tools, macOS",
        "relative_path": "tools/iproute2",
        "updated_at": "2021-11-02T14:53:49Z",
        "created_at": "2021-11-02T14:53:49Z",
        "original_relative_path": "tools/iproute2"
    },
    {
        "id": "#203",
        "name": "Homebrew Tips and Tricks",
        "description": "homebrew (macOS package manager) tips and tricks",
        "categories": "tools, macOS",
        "relative_path": "tools/homebrew",
        "updated_at": "2021-11-02T14:53:49Z",
        "created_at": "2021-11-02T14:53:49Z",
        "original_relative_path": "tools/homebrew"
    },
    {
        "name": "arping",
        "description": "All about Address Resolution Protocol (ARP - RFC826) and installing arping on macOS",
        "categories": "tools",
        "relative_path": "tools/arping",
        "updated_at": "2021-11-02T14:53:49Z",
        "id": "#202",
        "created_at": "2021-11-02T14:53:49Z",
        "original_relative_path": "tools/arping"
    },
    {
        "name": "sips",
        "description": "Using sips - scriptable image processing system on macOS",
        "categories": "tools",
        "relative_path": "tools/sips",
        "updated_at": "2021-11-02T14:53:49Z",
        "id": "#201",
        "created_at": "2021-11-02T14:53:49Z",
        "original_relative_path": "tools/sips"
    },
    {
        "name": "macOS Cheatsheet",
        "description": "my favourite macOS tools, tips and tricks",
        "categories": "tools, macOS",
        "relative_path": "tools/macosx_cheats",
        "updated_at": "2021-11-02T14:53:49Z",
        "id": "#200",
        "created_at": "2021-11-02T14:53:49Z",
        "original_relative_path": "tools/macosx_cheats"
    },
    {
        "name": "Request Bin",
        "description": "Using request bin services to inspect HTTP events - Runscope self-hosted and newer Pipedream services with workflows aka programmable bins",
        "categories": "tools, api",
        "relative_path": "tools/requestbin",
        "updated_at": "2021-11-02T14:53:49Z",
        "id": "#199",
        "created_at": "2021-11-02T14:53:49Z",
        "original_relative_path": "tools/requestbin"
    },
    {
        "name": "ngrok",
        "description": "Creating publically-accessible URLs for services running locally",
        "categories": "tools",
        "relative_path": "tools/ngrok",
        "updated_at": "2021-11-02T14:53:49Z",
        "id": "#198",
        "created_at": "2021-11-02T14:53:49Z",
        "original_relative_path": "tools/ngrok"
    },
    {
        "name": "MySQL on macOS",
        "description": "Notes on installing and running MySQL client and/or server on macOS",
        "categories": "databases, MySQL",
        "relative_path": "databases/mysql/install_macosx",
        "updated_at": "2025-12-30T10:00:00Z",
        "id": "#197",
        "created_at": "2025-12-30T10:00:00Z",
        "original_relative_path": "databases/mysql/install_macosx"
    },
    {
        "name": "Redis Desktop Manager",
        "description": "Building and running the Redis Desktop Manager applicaiton on macOS",
        "categories": "databases, redis",
        "relative_path": "databases/redis/redis_desktop_manager",
        "updated_at": "2021-11-02T14:53:49Z",
        "id": "#196",
        "created_at": "2021-11-02T14:53:49Z",
        "original_relative_path": "databases/redis/redis_desktop_manager"
    },
    {
        "name": "About Redis",
        "description": "Redis basics and macOS installation",
        "categories": "databases, redis",
        "relative_path": "databases/redis/about",
        "updated_at": "2021-11-02T14:53:49Z",
        "id": "#195",
        "created_at": "2021-11-02T14:53:49Z",
        "original_relative_path": "databases/redis/about"
    },
    {
        "name": "Free Pascal",
        "description": "Installing and running the Free Pascal compiler on macOS",
        "categories": "Pascal, macOS",
        "relative_path": "pascal/free_pascal",
        "updated_at": "2021-11-02T14:53:49Z",
        "id": "#194",
        "created_at": "2021-11-02T14:53:49Z",
        "original_relative_path": "pascal/free_pascal"
    },
    {
        "name": "Zabbix 5 Docker",
        "description": "Running Zabbix 5 with Docker",
        "categories": "infrastructure, zabbix, monitoring, docker",
        "relative_path": "infrastructure/zabbix/dockerized5",
        "updated_at": "2021-11-02T14:07:32Z",
        "id": "#193",
        "created_at": "2021-11-02T14:07:32Z",
        "original_relative_path": "infrastructure/zabbix/dockerized5"
    },
    {
        "name": "Huey Task Priority",
        "description": "Using the huey task priority feature",
        "categories": "python, huey, async, queues",
        "relative_path": "python/huey/priority",
        "updated_at": "2021-08-25T15:07:35Z",
        "id": "#192",
        "created_at": "2021-08-25T15:07:35Z",
        "original_relative_path": "python/huey/priority"
    },
    {
        "name": "Monitoring Huey with NewRelic",
        "description": "Notes and examples os using NewRelic monitoring with Huey",
        "categories": "python, huey, async, queues",
        "relative_path": "python/huey/newrelic",
        "updated_at": "2021-08-25T13:49:54Z",
        "id": "#191",
        "created_at": "2021-08-25T13:49:54Z",
        "original_relative_path": "python/huey/newrelic"
    },
    {
        "name": "About Huey",
        "description": "Huey is a lightweight queuing system for python",
        "categories": "python, huey, async, queues",
        "relative_path": "python/huey/about",
        "updated_at": "2021-08-25T13:49:54Z",
        "id": "#190",
        "created_at": "2021-08-25T13:49:54Z",
        "original_relative_path": "python/huey/about"
    },
    {
        "name": "Engines in Rails 6",
        "description": "Looking into what is new or different with Rails 6 engines",
        "categories": "Ruby, Rails",
        "relative_path": "ruby/rails6/engines",
        "updated_at": "2021-06-25T08:47:19Z",
        "id": "#189",
        "created_at": "2021-06-25T08:47:19Z",
        "original_relative_path": "ruby/rails6/engines"
    },
    {
        "name": "Running Rails 6 Without Webpacker",
        "description": "Because sometimes just want to keep it simple with good old sprockets and the asset pipeline",
        "categories": "Ruby, Rails",
        "relative_path": "ruby/rails6/without_webpack",
        "updated_at": "2021-06-15T10:03:25Z",
        "id": "#188",
        "created_at": "2021-06-15T10:03:25Z",
        "original_relative_path": "ruby/rails6/without_webpack"
    },
    {
        "name": "Rails 6 with Docker for Production",
        "description": "All about running Rails 6 with Docker for production deployment",
        "categories": "docker, Rails",
        "relative_path": "docker/rails6_production",
        "updated_at": "2021-06-13T11:30:46Z",
        "id": "#187",
        "created_at": "2021-06-13T11:30:46Z",
        "original_relative_path": "docker/rails6_production"
    },
    {
        "name": "RailsConf 2021",
        "description": "Overview and notes from RailsConf 2021",
        "categories": "Ruby, Rails",
        "relative_path": "ruby/railsconf/2021",
        "updated_at": "2021-06-02T16:51:59Z",
        "id": "#186",
        "created_at": "2021-06-02T16:51:59Z",
        "original_relative_path": "ruby/RailsConf/2021"
    },
    {
        "name": "RubyConf 2020",
        "description": "Overview and notes from RubyConf 2020",
        "categories": "Ruby",
        "relative_path": "ruby/rubyconf/2020",
        "updated_at": "2021-06-02T16:02:25Z",
        "id": "#185",
        "created_at": "2021-06-02T16:02:25Z",
        "original_relative_path": "ruby/RubyConf/2020"
    },
    {
        "name": "aws-cli",
        "description": "Installing the running the AWS CLI",
        "categories": "tools, AWS",
        "relative_path": "tools/aws-cli",
        "updated_at": "2021-06-01T16:42:37Z",
        "id": "#184",
        "created_at": "2021-06-01T16:42:37Z",
        "original_relative_path": "tools/aws-cli"
    },
    {
        "name": "static",
        "description": "About the static keyword in C++ - static variables, static objects, static member variables, static member functions",
        "categories": "C++",
        "relative_path": "cpp/statics",
        "updated_at": "2021-06-01T14:11:43Z",
        "id": "#183",
        "created_at": "2021-06-01T14:11:43Z",
        "original_relative_path": "cpp/statics"
    },
    {
        "name": "SSL Certificate Chains",
        "description": "notes on investigating issues with server SSL certificate chains",
        "categories": "security",
        "relative_path": "security/ssl_cert_chains",
        "updated_at": "2021-05-31T16:49:19Z",
        "id": "#182",
        "created_at": "2021-05-31T16:49:19Z",
        "original_relative_path": "security/ssl_cert_chains"
    },
    {
        "name": "iperf/iperf3",
        "description": "iPerf3 is a tool for active measurements of the maximum achievable bandwidth on IP networks",
        "categories": "tools",
        "relative_path": "tools/iperf",
        "updated_at": "2021-05-30T17:23:55Z",
        "id": "#181",
        "created_at": "2021-05-30T17:23:55Z",
        "original_relative_path": "tools/iperf"
    },
    {
        "name": "Indirect References",
        "description": "Indirect variable de-referencing in bash scripts",
        "categories": "bash",
        "relative_path": "bash/indirect_references",
        "updated_at": "2021-05-30T13:26:11Z",
        "id": "#180",
        "created_at": "2021-05-30T13:26:11Z",
        "original_relative_path": "bash/indirect_references"
    },
    {
        "name": "Bash Reference Manual",
        "description": "the GNU Bash Reference Manual",
        "categories": "bash, Books",
        "relative_path": "books/bash-reference-manual",
        "updated_at": "2021-05-30T09:23:28Z",
        "id": "#179",
        "created_at": "2021-05-30T09:23:28Z",
        "original_relative_path": "books/bash-reference-manual"
    },
    {
        "name": "whalesay",
        "description": "Building and testing the whalesay docker demo",
        "categories": "docker",
        "relative_path": "docker/whalesay",
        "updated_at": "2021-05-06T02:33:39Z",
        "id": "#178",
        "created_at": "2021-05-06T02:33:39Z",
        "original_relative_path": "docker/whalesay"
    },
    {
        "name": "Basic SDL Graphics",
        "description": "Testing some basic windo and rendering functions with SDL library in C++.",
        "categories": "C++, SDL",
        "relative_path": "cpp/sdl/basic",
        "updated_at": "2021-05-04T13:29:12Z",
        "id": "#177",
        "created_at": "2021-05-04T13:29:12Z",
        "original_relative_path": "cpp/sdl/basic"
    },
    {
        "name": "Numeric Limits in C",
        "description": "Numeric limits information available in the C standard library (and finding another clang/gcc difference)",
        "categories": "C",
        "relative_path": "c/numeric_limits",
        "updated_at": "2021-04-30T14:08:23Z",
        "id": "#176",
        "created_at": "2021-04-30T14:08:23Z",
        "original_relative_path": "c/numeric_limits"
    },
    {
        "name": "Numeric Limits in C++",
        "description": "Numeric limits information available in the C++ standard library",
        "categories": "C++",
        "relative_path": "cpp/numeric_limits",
        "updated_at": "2021-04-30T14:08:23Z",
        "id": "#175",
        "created_at": "2021-04-30T14:08:23Z",
        "original_relative_path": "cpp/numeric_limits"
    },
    {
        "name": "Float Format",
        "description": "Testing floating point number formatting with the C++",
        "categories": "C++",
        "relative_path": "cpp/float_format",
        "updated_at": "2021-04-27T17:12:35Z",
        "id": "#174",
        "created_at": "2021-04-27T17:12:35Z",
        "original_relative_path": "cpp/float_format"
    },
    {
        "name": "Palindromes",
        "description": "Examples of how to code a palidrome check in C++",
        "categories": "C++",
        "relative_path": "cpp/palindromes",
        "updated_at": "2021-04-27T14:31:38Z",
        "id": "#173",
        "created_at": "2021-04-27T14:31:38Z",
        "original_relative_path": "cpp/palindromes"
    },
    {
        "id": "#172",
        "name": "Hello World in C",
        "description": "the clich\u00e9d starting point, in C",
        "categories": "C",
        "relative_path": "c/hello",
        "updated_at": "2021-04-27T13:49:46Z",
        "created_at": "2021-04-27T13:49:46Z",
        "original_relative_path": "c/hello"
    },
    {
        "name": "Hello World in C++",
        "description": "the clich\u00e9d starting point, in C++",
        "categories": "C++",
        "relative_path": "cpp/hello",
        "updated_at": "2021-04-27T13:49:46Z",
        "id": "#171",
        "created_at": "2021-04-27T13:49:46Z",
        "original_relative_path": "cpp/hello"
    },
    {
        "name": "Bitwise Operations",
        "description": "All about bitwize operations in Ruby",
        "categories": "Ruby",
        "relative_path": "ruby/bitwise_operations",
        "updated_at": "2021-04-26T16:32:47Z",
        "id": "#170",
        "created_at": "2021-04-26T16:32:47Z",
        "original_relative_path": "ruby/bitwise_operations"
    },
    {
        "name": "std::string::find",
        "description": "A closer look at the find function for strings in C++",
        "categories": "C++",
        "relative_path": "cpp/string_find",
        "updated_at": "2021-04-23T14:18:20Z",
        "id": "#169",
        "created_at": "2021-04-23T14:18:20Z",
        "original_relative_path": "cpp/string_find"
    },
    {
        "name": "Hands-On System Programming with C++",
        "description": "Book notes - Hands-On System Programming with C++ by Dr. Rian Quinn",
        "categories": "C++, Books",
        "relative_path": "books/hands-on-system-programming-with-cpp",
        "updated_at": "2021-04-23T14:18:20Z",
        "id": "#168",
        "created_at": "2021-04-23T14:18:20Z",
        "original_relative_path": "books/hands-on-system-programming-with-cpp"
    },
    {
        "name": "Browser Connection Management",
        "description": "Notes on how web browsers manage network connections",
        "categories": "web, networking",
        "relative_path": "web/browser_connection_management",
        "updated_at": "2021-04-23T14:12:23Z",
        "id": "#167",
        "created_at": "2021-04-23T14:12:23Z",
        "original_relative_path": "web/browser_connection_management"
    },
    {
        "name": "Proc v Lambda",
        "description": "Exploring differences and similarities between procs and lambdas in Ruby",
        "categories": "Ruby, closure",
        "relative_path": "ruby/proc_v_lambda",
        "updated_at": "2021-04-20T15:32:54Z",
        "id": "#166",
        "created_at": "2021-04-20T15:32:54Z",
        "original_relative_path": "ruby/proc_v_lambda"
    },
    {
        "name": "YubiKey",
        "description": "A closer look at the YubiKey hardware security token, how it works, the CLI and GUI, and how it can be used with a range of services. Also demonstrate how to setup with Wasabi Cloud Storage - an example of a service that supports 2-factor authentication but not specifically the YubiKey.",
        "categories": "security, MFA",
        "relative_path": "security/yubikey",
        "updated_at": "2021-04-15T17:09:32Z",
        "id": "#165",
        "created_at": "2021-04-15T17:09:32Z",
        "original_relative_path": "security/yubikey"
    },
    {
        "name": "Password Strength Testers",
        "description": "Checking out various Javascript-based password strength testers and trying to find one that best implements latest NIST guidelines.",
        "categories": "javascript, security",
        "relative_path": "javascript/password_strength_testers",
        "updated_at": "2021-04-15T17:08:47Z",
        "id": "#164",
        "created_at": "2021-04-15T17:08:47Z",
        "original_relative_path": "javascript/password_strength_testers"
    },
    {
        "name": "Regular Expressions and String Indexes",
        "description": "When string indexes are better than regex, and when regex can help writing a string index",
        "categories": "Ruby",
        "relative_path": "ruby/regex_and_string_indexes",
        "updated_at": "2021-04-10T03:59:38Z",
        "id": "#163",
        "created_at": "2021-04-10T03:59:38Z",
        "original_relative_path": "ruby/regex_and_string_indexes"
    },
    {
        "name": "Loops in Rust",
        "description": "All about loops in rust",
        "categories": "Rust",
        "relative_path": "rust/loops",
        "updated_at": "2021-04-10T03:16:23Z",
        "id": "#162",
        "created_at": "2021-04-10T03:16:23Z",
        "original_relative_path": "rust/loops"
    },
    {
        "name": "Loops in C",
        "description": "All about loops in C",
        "categories": "C",
        "relative_path": "c/loops",
        "updated_at": "2021-04-09T17:31:30Z",
        "id": "#161",
        "created_at": "2021-04-09T17:31:30Z",
        "original_relative_path": "c/loops"
    },
    {
        "name": "Ruby Style",
        "description": "On style guides and resources for ruby",
        "categories": "Ruby",
        "relative_path": "ruby/style",
        "updated_at": "2021-04-09T16:37:57Z",
        "id": "#160",
        "created_at": "2021-04-09T16:37:57Z",
        "original_relative_path": "ruby/style"
    },
    {
        "name": "Color Pickers for the Web",
        "description": "Looking at easy ways to enable a color picker on a web page",
        "categories": "javascript, HTML",
        "relative_path": "web/color_picker",
        "updated_at": "2021-04-09T16:14:56Z",
        "id": "#159",
        "created_at": "2021-04-09T16:14:56Z",
        "original_relative_path": "web/color_picker"
    },
    {
        "name": "Iterating Lists with Indices",
        "description": "Revising methods for adding indexes to lists since PEP 3113 removed tuple parameter unpacking",
        "categories": "python",
        "relative_path": "python/list_with_index",
        "updated_at": "2021-02-25T15:31:51Z",
        "id": "#158",
        "created_at": "2021-02-25T15:31:51Z",
        "original_relative_path": "python/list_with_index"
    },
    {
        "name": "Reducing Overlapping Ranges",
        "description": "Looking at solutions for how to aggregate a series of ranges while excluding any overlaps (e.g. set of date ranges)",
        "categories": "Ruby",
        "relative_path": "ruby/reducing_overlapping_ranges",
        "updated_at": "2021-02-05T13:58:46Z",
        "id": "#157",
        "created_at": "2021-02-05T13:58:46Z",
        "original_relative_path": "ruby/reducing_overlapping_ranges"
    },
    {
        "name": "Doorkeeper",
        "description": "Learning about the Doorkeeper gem and testing it for adding OAuth2 provider capabilities to Rails applications",
        "categories": "Ruby, Rails, security",
        "relative_path": "ruby/doorkeeper",
        "updated_at": "2021-01-13T09:20:42Z",
        "id": "#156",
        "created_at": "2021-01-13T09:20:42Z",
        "original_relative_path": "ruby/doorkeeper"
    },
    {
        "name": "pyenv",
        "description": "Using pyenv for managing multiple python environments",
        "categories": "python",
        "relative_path": "python/pyenv",
        "updated_at": "2020-12-26T08:02:37Z",
        "id": "#155",
        "created_at": "2020-12-26T08:02:37Z",
        "original_relative_path": "python/pyenv"
    },
    {
        "name": "Modern Front-End Development for Rails",
        "description": "Book notes - Modern Front-End Development for Rails, By Noel Rappin, published by The Pragmatic Programmers",
        "categories": "Ruby, Rails, javascript, Books",
        "relative_path": "books/modern-front-end-development-for-rails",
        "updated_at": "2020-12-09T07:19:12Z",
        "id": "#154",
        "created_at": "2020-12-09T07:19:12Z",
        "original_relative_path": "books/modern-front-end-development-for-rails"
    },
    {
        "name": "Docker for Rails Developers",
        "description": "Book notes - Docker for Rails Developers, By Rob Isenberg, published by The Pragmatic Programmers",
        "categories": "docker, Rails, Books",
        "relative_path": "books/docker-for-rails-developers",
        "updated_at": "2020-12-09T07:19:12Z",
        "id": "#153",
        "created_at": "2020-12-09T07:19:12Z",
        "original_relative_path": "books/docker-for-rails-developers"
    },
    {
        "name": "Trumpeter Catalog Skin",
        "description": "A simple and fast offline Trumpeter model catalog skin, using some nokogiri magic",
        "categories": "Ruby",
        "relative_path": "ruby/trumpeter_skin",
        "updated_at": "2020-12-07T11:03:07Z",
        "id": "#152",
        "created_at": "2020-12-07T11:03:07Z",
        "original_relative_path": "ruby/trumpeter_skin"
    },
    {
        "name": "Devise with Rails 6",
        "description": "Running devise with Rails 6",
        "categories": "Ruby, Rails, security",
        "relative_path": "ruby/rails6/devise",
        "updated_at": "2020-11-07T05:05:55Z",
        "id": "#151",
        "created_at": "2020-11-07T05:05:55Z",
        "original_relative_path": "ruby/rails6/devise"
    },
    {
        "name": "Rails 6 with Docker",
        "description": "All about running Rails 6 with Docker",
        "categories": "docker, Ruby, Rails",
        "relative_path": "docker/rails6",
        "updated_at": "2020-10-14T10:49:20Z",
        "id": "#150",
        "created_at": "2020-10-14T10:49:20Z",
        "original_relative_path": "docker/rails6"
    },
    {
        "name": "drb",
        "description": "dRuby (drb) is a distributed object system for Ruby, included in the standard library",
        "categories": "Ruby",
        "relative_path": "ruby/drb",
        "updated_at": "2020-10-10T02:31:30Z",
        "id": "#149",
        "created_at": "2020-10-10T02:31:30Z",
        "original_relative_path": "ruby/drb"
    },
    {
        "name": "Bit Fields",
        "description": "Using bitfields in C",
        "categories": "C",
        "relative_path": "c/bitfields",
        "updated_at": "2020-05-09T09:16:34Z",
        "id": "#148",
        "created_at": "2020-05-09T09:16:34Z",
        "original_relative_path": "c/bitfields"
    },
    {
        "name": "Bitwise Operations",
        "description": "Summary and demonstration of all the usual bit operations in C",
        "categories": "C",
        "relative_path": "c/bit_operations",
        "updated_at": "2020-05-09T07:19:22Z",
        "id": "#147",
        "created_at": "2020-05-09T07:19:22Z",
        "original_relative_path": "c/bit_operations"
    },
    {
        "name": "Simple URIs with addressable",
        "description": "Using the addressable gem for better handling of URIs/URLs",
        "categories": "Ruby",
        "relative_path": "ruby/simple_uris_with_addressable",
        "updated_at": "2020-05-08T17:16:25Z",
        "id": "#146",
        "created_at": "2020-05-08T17:16:25Z",
        "original_relative_path": "ruby/simple_uris_with_addressable"
    },
    {
        "name": "printf partial strings",
        "description": "Learning how printf can be instructed to select a limited number of characters from a string",
        "categories": "C",
        "relative_path": "c/printf_partial_string",
        "updated_at": "2020-04-08T14:52:22Z",
        "id": "#145",
        "created_at": "2020-04-08T14:52:22Z",
        "original_relative_path": "c/printf_partial_string"
    },
    {
        "name": "Redis Cookbook",
        "description": "Book notes - Redis Cookbook, By Tiago Macedo and Fred Oliveira, published by O'Reilly",
        "categories": "databases, redis, Books",
        "relative_path": "books/redis-cookbook",
        "updated_at": "2020-03-22T01:38:00Z",
        "id": "#144",
        "created_at": "2020-03-22T01:38:00Z",
        "original_relative_path": "books/redis-cookbook"
    },
    {
        "name": "Console Tables",
        "description": "Generating data tables in the console from Array, Hash, or ActiveRecord objects with the tablesmith gem",
        "categories": "Ruby",
        "relative_path": "ruby/console_tables",
        "updated_at": "2020-03-12T23:47:02Z",
        "id": "#143",
        "created_at": "2020-03-12T23:47:02Z",
        "original_relative_path": "ruby/console_tables"
    },
    {
        "name": "Console Barcharts",
        "description": "Print barcharts to the console in ascii or with unicode block elements",
        "categories": "Ruby",
        "relative_path": "ruby/console_barcharts",
        "updated_at": "2020-03-12T23:36:13Z",
        "id": "#142",
        "created_at": "2020-03-12T23:36:13Z",
        "original_relative_path": "ruby/console_barcharts"
    },
    {
        "name": "Zabbix Programmatic Configuration with Ruby",
        "description": "Configuring zabbix via the API, with examples using zabbix-client ruby gem",
        "categories": "infrastructure, zabbix, Ruby",
        "relative_path": "infrastructure/zabbix/ruby-programmatic-config",
        "updated_at": "2020-03-11T23:28:13Z",
        "id": "#141",
        "created_at": "2020-03-11T23:28:13Z",
        "original_relative_path": "infrastructure/zabbix/ruby-programmatic-config"
    },
    {
        "name": "Memo Methods",
        "description": "Comparing and testing various memoization methods and gems in Ruby",
        "categories": "Ruby, design patterns",
        "relative_path": "ruby/memo_methods",
        "updated_at": "2020-03-11T14:29:15Z",
        "id": "#140",
        "created_at": "2020-03-11T14:29:15Z",
        "original_relative_path": "ruby/memo_methods"
    },
    {
        "name": "Line Continuations in HTML",
        "description": "CSS and Javascript solutions for indicating line continuations in web pages",
        "categories": "web, HTML, CSS, javascript",
        "relative_path": "web/line_continuations",
        "updated_at": "2020-03-10T19:29:18Z",
        "id": "#139",
        "created_at": "2020-03-10T19:29:18Z",
        "original_relative_path": "web/line_continuations"
    },
    {
        "name": "CSS Cookbook",
        "description": "Book notes - CSS Cookbook, 3rd Edition by Christopher Schmitt, published by O'Reilly",
        "categories": "CSS, Books",
        "relative_path": "books/css-cookbook",
        "updated_at": "2020-03-08T19:38:18Z",
        "id": "#138",
        "created_at": "2020-03-08T19:38:18Z",
        "original_relative_path": "books/css-cookbook"
    },
    {
        "name": "Cross-browser X Library",
        "description": "Playing with the old inner solar system demo for the cross-browser javascript X library",
        "categories": "javascript",
        "relative_path": "javascript/cbx",
        "updated_at": "2020-03-07T03:19:55Z",
        "id": "#137",
        "created_at": "2020-03-07T03:19:55Z",
        "original_relative_path": "javascript/cbx"
    },
    {
        "name": "Using InfluxDb 2.x with Ruby",
        "description": "Testing out the official ruby client calling a InfluxDb 2.0.0-beta server running in Docker",
        "categories": "databases, influxdb, docker, Ruby",
        "relative_path": "databases/influxdb/ruby_client2",
        "updated_at": "2020-03-05T09:03:11Z",
        "id": "#136",
        "created_at": "2020-03-05T09:03:11Z",
        "original_relative_path": "databases/influxdb/ruby_client2"
    },
    {
        "name": "Using InfluxDb 1.x with Ruby",
        "description": "Testing out the official ruby client calling a InfluxDb 1.7.9 server running in Docker.",
        "categories": "databases, influxdb, docker, Ruby",
        "relative_path": "databases/influxdb/ruby_client",
        "updated_at": "2020-03-05T09:03:11Z",
        "id": "#135",
        "created_at": "2020-03-05T09:03:11Z",
        "original_relative_path": "databases/influxdb/ruby_client"
    },
    {
        "name": "jQuery Date-Time Selectors",
        "description": "A Quick Survey of jQuery Date-Time Selector libraries and approaches",
        "categories": "javascript",
        "relative_path": "javascript/jquerydatetime",
        "updated_at": "2020-03-04T12:24:45Z",
        "id": "#134",
        "created_at": "2020-03-04T12:24:45Z",
        "original_relative_path": "javascript/jQueryDateTime"
    },
    {
        "name": "DirSize",
        "description": "Directory Size Scanner for OS/2 v2.0 written in REXX",
        "categories": "REXX, OS/2",
        "relative_path": "rexx/dirsize",
        "updated_at": "2020-03-04T11:18:35Z",
        "id": "#133",
        "created_at": "2020-03-04T11:18:35Z",
        "original_relative_path": "rexx/dirsize"
    },
    {
        "name": "ShowLong",
        "description": "Expose Long/HPFS filenames with REXX on OS/2",
        "categories": "REXX, OS/2",
        "relative_path": "rexx/showlong",
        "updated_at": "2020-03-04T11:18:35Z",
        "id": "#132",
        "created_at": "2020-03-04T11:18:35Z",
        "original_relative_path": "rexx/showlong"
    },
    {
        "name": "Visual Archiver",
        "description": "An Archive Management Interface for OS/2 v2.0 written in REXX",
        "categories": "REXX, OS/2",
        "relative_path": "rexx/visual_archiver",
        "updated_at": "2020-03-04T11:18:35Z",
        "id": "#131",
        "created_at": "2020-03-04T11:18:35Z",
        "original_relative_path": "rexx/visual_archiver"
    },
    {
        "name": "databases Tweets",
        "description": "Tweeting from your Oracle database with short urls",
        "categories": "databases, Oracle",
        "relative_path": "databases/oracle/ora_tweet_with_shorturls",
        "updated_at": "2020-03-03T13:59:43Z",
        "id": "#130",
        "created_at": "2020-03-03T13:59:43Z",
        "original_relative_path": "databases/oracle/ORA_Tweet_With_Shorturls"
    },
    {
        "name": "Ruby Loop",
        "description": "All the various ways of looping in Ruby",
        "categories": "Ruby",
        "relative_path": "ruby/loops",
        "updated_at": "2020-02-22T07:51:21Z",
        "id": "#129",
        "created_at": "2020-02-22T07:51:21Z",
        "original_relative_path": "ruby/loops"
    },
    {
        "name": "Docker on CentOS 8",
        "description": "Installing and running Docker on CentOS 8",
        "categories": "docker",
        "relative_path": "docker/centos8_install",
        "updated_at": "2020-02-18T16:41:09Z",
        "id": "#128",
        "created_at": "2020-02-18T16:41:09Z",
        "original_relative_path": "docker/CentOS8_install"
    },
    {
        "name": "TCP Wrappers",
        "description": "The basics of TCP wrappers",
        "categories": "linux",
        "relative_path": "tools/tcp_wrappers",
        "updated_at": "2020-02-18T14:55:19Z",
        "id": "#127",
        "created_at": "2020-02-18T14:55:19Z",
        "original_relative_path": "tools/tcp_wrappers"
    },
    {
        "name": "Variable Fonts",
        "description": "Understanding the new standards for variable CSS fonts",
        "categories": "CSS, font",
        "relative_path": "web/variable_fonts",
        "updated_at": "2020-02-16T13:05:09Z",
        "id": "#126",
        "created_at": "2020-02-16T13:05:09Z",
        "original_relative_path": "web/variable_fonts"
    },
    {
        "name": "Loop Optimization",
        "description": "Looking at how C compilers optimize loops",
        "categories": "C",
        "relative_path": "c/loop_optimization",
        "updated_at": "2020-02-16T06:42:21Z",
        "id": "#125",
        "created_at": "2020-02-16T06:42:21Z",
        "original_relative_path": "c/loop_optimization"
    },
    {
        "name": "About Pascal",
        "description": "Pascal In a Nutshell",
        "categories": "Pascal",
        "relative_path": "pascal/about",
        "updated_at": "2020-02-16T06:17:11Z",
        "id": "#124",
        "created_at": "2020-02-16T06:17:11Z",
        "original_relative_path": "pascal/about"
    },
    {
        "name": "Linux Server Hacks",
        "description": "Book notes - Linux Server Hacks by Rob Flickenger and Linux Server Hacks, Volume Two (Tips & Tools for Connecting, Monitoring, and Troubleshooting) by William von Hagen and Brian K. Jones, published by O'Reilly",
        "categories": "infrastructure, linux, Books",
        "relative_path": "books/linux-server-hacks",
        "updated_at": "2020-02-16T02:52:10Z",
        "id": "#123",
        "created_at": "2020-02-16T02:52:10Z",
        "original_relative_path": "books/linux-server-hacks"
    },
    {
        "name": "Finding Files",
        "description": "Examples of various ways to find files",
        "categories": "bash",
        "relative_path": "bash/finding_files",
        "updated_at": "2020-02-15T09:25:04Z",
        "id": "#122",
        "created_at": "2020-02-15T09:25:04Z",
        "original_relative_path": "bash/finding_files"
    },
    {
        "name": "Docker Cookbook (Packt)",
        "description": "Book notes - Docker Cookbook, 2nd Edition by Ken Cochrane, Jeeva S. Chelladhurai, Neependra K Khare, published by Packt",
        "categories": "docker, Books",
        "relative_path": "books/docker-cookbook-packt",
        "updated_at": "2020-02-06T15:53:45Z",
        "id": "#121",
        "created_at": "2020-02-06T15:53:45Z",
        "original_relative_path": "books/docker-cookbook-packt"
    },
    {
        "name": "21st Century C",
        "description": "Book notes - '21st Century C' by Ben Klemens, published by O'Reilly",
        "categories": "C, Books",
        "relative_path": "books/21st-century-c",
        "updated_at": "2020-02-06T15:39:18Z",
        "id": "#120",
        "created_at": "2020-02-06T15:39:18Z",
        "original_relative_path": "books/21st-century-c"
    },
    {
        "name": "Practical C Programming",
        "description": "Book notes - Practical C Programming, 3rd Edition by Steve Oualline, published by O'Reilly",
        "categories": "C, Books",
        "relative_path": "books/practical-c-programming",
        "updated_at": "2020-02-06T15:39:18Z",
        "id": "#119",
        "created_at": "2020-02-06T15:39:18Z",
        "original_relative_path": "books/practical-c-programming"
    },
    {
        "name": "The Rust Programming Language",
        "description": "Book notes - The Rust Programming Language by Steve Klabnik, published by Mozilla Research",
        "categories": "Rust, Books",
        "relative_path": "books/rust-programming-language",
        "updated_at": "2020-02-06T15:39:18Z",
        "id": "#118",
        "created_at": "2020-02-06T15:39:18Z",
        "original_relative_path": "books/rust-programming-language"
    },
    {
        "name": "Programming Elixir",
        "description": "Book notes - Programming Elixir by Dave Thomas, published by The Pragmatic Bookshelf",
        "categories": "Elixir, Books",
        "relative_path": "books/programming-elixir",
        "updated_at": "2020-02-06T15:39:18Z",
        "id": "#117",
        "created_at": "2020-02-06T15:39:18Z",
        "original_relative_path": "books/programming-elixir"
    },
    {
        "name": "Docker Cookbook (O'Reilly)",
        "description": "Book notes - Docker Cookbook, 3rd Edition by Steve Oualline, published by O'Reilly",
        "categories": "docker, Books",
        "relative_path": "books/docker-cookbook-oreilly",
        "updated_at": "2020-02-06T15:39:18Z",
        "id": "#116",
        "created_at": "2020-02-06T15:39:18Z",
        "original_relative_path": "books/docker-cookbook-oreilly"
    },
    {
        "name": "Basic Request-Reply in C",
        "description": "Basic ZeroMQ 'hello world' example of the request-reply messaging pattern in C",
        "categories": "messaging, zeromq, C",
        "relative_path": "messaging/zeromq/c/request_reply",
        "updated_at": "2020-02-03T17:21:20Z",
        "id": "#115",
        "created_at": "2020-02-03T17:21:20Z",
        "original_relative_path": "messaging/zeromq/c/request_reply"
    },
    {
        "name": "Rickshaw",
        "description": "Testing out the D3-based Rickshaw time series graph library",
        "categories": "javascript, graphics",
        "relative_path": "javascript/rickshaw",
        "updated_at": "2020-02-03T14:03:04Z",
        "id": "#114",
        "created_at": "2020-02-03T14:03:04Z",
        "original_relative_path": "javascript/rickshaw"
    },
    {
        "name": "Mastering Zabbix",
        "description": "Book notes - Mastering Zabbix by Andrea Dalle Vacche, Stefano Kewan Lee, published by PacktPub",
        "categories": "infrastructure, zabbix, Books",
        "relative_path": "books/mastering-zabbix",
        "updated_at": "2020-02-02T13:17:04Z",
        "id": "#113",
        "created_at": "2020-02-02T13:17:04Z",
        "original_relative_path": "books/mastering-zabbix"
    },
    {
        "name": "Zabbix API Ruby Clients",
        "description": "A quick survey and test of various ruby options for using the Zabbix API",
        "categories": "infrastructure, zabbix, Ruby",
        "relative_path": "infrastructure/zabbix/ruby-clients",
        "updated_at": "2020-02-02T11:01:51Z",
        "id": "#112",
        "created_at": "2020-02-02T11:01:51Z",
        "original_relative_path": "infrastructure/zabbix/ruby-clients"
    },
    {
        "name": "Zabbix Docker",
        "description": "Running Zabbix with Docker",
        "categories": "infrastructure, zabbix, monitoring, docker",
        "relative_path": "infrastructure/zabbix/dockerized",
        "updated_at": "2020-02-02T07:58:51Z",
        "id": "#111",
        "created_at": "2020-02-02T07:58:51Z",
        "original_relative_path": "infrastructure/zabbix/dockerized"
    },
    {
        "name": "About Zabbix",
        "description": "Zabbix in a Nutshell",
        "categories": "infrastructure, zabbix, monitoring",
        "relative_path": "infrastructure/zabbix/about",
        "updated_at": "2020-02-02T07:58:51Z",
        "id": "#110",
        "created_at": "2020-02-02T07:58:51Z",
        "original_relative_path": "infrastructure/zabbix/about"
    },
    {
        "name": "ZeroMQ (book)",
        "description": "Book notes - ZeroMQ by Pieter Hintjens, published by O'Reilly",
        "categories": "messaging, zeromq, Books",
        "relative_path": "books/zeromq",
        "updated_at": "2020-02-01T09:01:43Z",
        "id": "#109",
        "created_at": "2020-02-01T09:01:43Z",
        "original_relative_path": "books/zeromq"
    },
    {
        "name": "About Zeromq",
        "description": "Zeromq in a nutshell with a quick test of using the library from C",
        "categories": "messaging, zeromq, C",
        "relative_path": "messaging/zeromq/about",
        "updated_at": "2020-02-01T08:49:18Z",
        "id": "#108",
        "created_at": "2020-02-01T08:49:18Z",
        "original_relative_path": "messaging/zeromq/about"
    },
    {
        "name": "Elixir Basics",
        "description": "Exploring basic language features of Elixir",
        "categories": "Elixir",
        "relative_path": "elixir/basics",
        "updated_at": "2020-02-01T07:45:35Z",
        "id": "#107",
        "created_at": "2020-02-01T07:45:35Z",
        "original_relative_path": "elixir/basics"
    },
    {
        "id": "#106",
        "name": "About Elm",
        "description": "Elm (the language) in a nutshell",
        "categories": "Elm",
        "relative_path": "elm/about",
        "updated_at": "2020-02-01T06:29:46Z",
        "created_at": "2020-02-01T06:29:46Z",
        "original_relative_path": "elm/about"
    },
    {
        "name": "About Elixir",
        "description": "Elixir in a nutshell",
        "categories": "Elixir",
        "relative_path": "elixir/about",
        "updated_at": "2020-02-01T06:29:46Z",
        "id": "#105",
        "created_at": "2020-02-01T06:29:46Z",
        "original_relative_path": "elixir/about"
    },
    {
        "name": "Testing with Rust",
        "description": "How to write and organise tests for rust",
        "categories": "Rust",
        "relative_path": "rust/testing",
        "updated_at": "2020-02-01T04:49:54Z",
        "id": "#104",
        "created_at": "2020-02-01T04:49:54Z",
        "original_relative_path": "rust/testing"
    },
    {
        "name": "Using Cargo",
        "description": "Using Cargo to create and manage a rust project",
        "categories": "Rust, cargo",
        "relative_path": "rust/project_with_cargo",
        "updated_at": "2020-01-30T18:21:09Z",
        "id": "#103",
        "created_at": "2020-01-30T18:21:09Z",
        "original_relative_path": "rust/project_with_cargo"
    },
    {
        "name": "Error Function",
        "description": "Methods for calculating the Gauss error function in C with standard libraries and the GNU Scientific Library",
        "categories": "C",
        "relative_path": "c/error_function",
        "updated_at": "2020-01-30T16:23:24Z",
        "id": "#102",
        "created_at": "2020-01-30T16:23:24Z",
        "original_relative_path": "c/error_function"
    },
    {
        "name": "RSS and Atom",
        "description": "About RSS and Atom feeds for publishing and podcasting",
        "categories": "formats, rss, rdf, atom, Books",
        "relative_path": "formats/rss_atom",
        "updated_at": "2020-01-26T07:32:40Z",
        "id": "#101",
        "created_at": "2020-01-26T07:32:40Z",
        "original_relative_path": "formats/rss_atom"
    },
    {
        "name": "Cacti",
        "description": "About the cacti network monitoring tool, including how to run it in Docker",
        "categories": "infrastructure, monitoring",
        "relative_path": "infrastructure/cacti",
        "updated_at": "2020-01-26T06:17:04Z",
        "id": "#100",
        "created_at": "2020-01-26T06:17:04Z",
        "original_relative_path": "infrastructure/cacti"
    },
    {
        "name": "Programming Interactivity",
        "description": "Book notes - Programming Interactivity 2nd Edition, by Joshua Noble published by O'Reilly",
        "categories": "design, arduino, Books",
        "relative_path": "design/programming_interactivity",
        "updated_at": "2020-01-25T17:31:59Z",
        "id": "#099",
        "created_at": "2020-01-25T17:31:59Z",
        "original_relative_path": "design/programming_interactivity"
    },
    {
        "name": "Rails AntiPatterns",
        "description": "Book notes - Rails AntiPatterns by Chad Pytel and Tammer Saleh, published by Addison-Wesley Professional",
        "categories": "Ruby, Rails, Books",
        "relative_path": "books/rails-antipatterns",
        "updated_at": "2020-01-25T16:27:01Z",
        "id": "#098",
        "created_at": "2020-01-25T16:27:01Z",
        "original_relative_path": "books/rails-antipatterns"
    },
    {
        "name": "Running Metasploit with Docker",
        "description": "Investigating how to run Metasploit in a Docker container",
        "categories": "security, docker",
        "relative_path": "security/metasploit/dockerized",
        "updated_at": "2020-01-22T15:49:07Z",
        "id": "#097",
        "created_at": "2020-01-22T15:49:07Z",
        "original_relative_path": "security/metasploit/dockerized"
    },
    {
        "name": "Metasploit Penetration Testing Cookbook",
        "description": "Book notes - Metasploit Penetration Testing Cookbook, Second Edition by Monika Agarwal, Abhinav Singh",
        "categories": "security, Books",
        "relative_path": "books/metasploit-penetration-testing-cookbook",
        "updated_at": "2020-01-22T15:49:07Z",
        "id": "#096",
        "created_at": "2020-01-22T15:49:07Z",
        "original_relative_path": "books/metasploit-penetration-testing-cookbook"
    },
    {
        "name": "Pointers in C",
        "description": "All about pointers in C",
        "categories": "C",
        "relative_path": "c/pointers",
        "updated_at": "2020-01-22T15:16:17Z",
        "id": "#095",
        "created_at": "2020-01-22T15:16:17Z",
        "original_relative_path": "c/pointers"
    },
    {
        "name": "Scripting YouTube",
        "description": "An experiment in scripting the YouTube player with external controls and the IFrame API",
        "categories": "javascript",
        "relative_path": "javascript/scripting_youtube",
        "updated_at": "2020-01-11T09:24:50Z",
        "id": "#094",
        "created_at": "2020-01-11T09:24:50Z",
        "original_relative_path": "javascript/scripting_youtube"
    },
    {
        "name": "Ruby 2.7 New Features",
        "description": "Investigating new features in Ruby 2.7.0, released 2019-12-25",
        "categories": "Ruby",
        "relative_path": "ruby/new_features_27",
        "updated_at": "2020-01-08T14:43:34Z",
        "id": "#093",
        "created_at": "2020-01-08T14:43:34Z",
        "original_relative_path": "ruby/new_features_27"
    },
    {
        "name": "About InfluxDB",
        "description": "Learning the basics of InfluxDB and running a demo with Docker",
        "categories": "databases, influxdb, docker",
        "relative_path": "databases/influxdb/about",
        "updated_at": "2020-01-07T16:41:34Z",
        "id": "#092",
        "created_at": "2020-01-07T16:41:34Z",
        "original_relative_path": "databases/influxdb/about"
    },
    {
        "name": "Private PodFeed",
        "description": "description",
        "categories": "Ruby, rss",
        "relative_path": "ruby/privatepodfeed",
        "updated_at": "2019-12-31T05:06:57Z",
        "id": "#091",
        "created_at": "2019-12-31T05:06:57Z",
        "original_relative_path": "ruby/PrivatePodFeed"
    },
    {
        "name": "QR Codes with Python",
        "description": "Generating QR codes with python, as images and as C header files for embedded applications",
        "categories": "python, C",
        "relative_path": "python/qrcodes",
        "updated_at": "2019-12-28T05:57:09Z",
        "id": "#090",
        "created_at": "2019-12-28T05:57:09Z",
        "original_relative_path": "python/qrcodes"
    },
    {
        "name": "emacs",
        "description": "closer look at emacs",
        "categories": "tools, editors",
        "relative_path": "tools/emacs",
        "updated_at": "2019-12-14T14:52:24Z",
        "id": "#089",
        "created_at": "2019-12-14T14:52:24Z",
        "original_relative_path": "tools/emacs"
    },
    {
        "name": "About Prometheus",
        "description": "Learning the basics of Prometheus and running a demo with Docker and a Sinatra Ruby target application",
        "categories": "databases, prometheus, Ruby",
        "relative_path": "databases/prometheus/about",
        "updated_at": "2019-11-05T09:47:56Z",
        "id": "#088",
        "created_at": "2019-11-05T09:47:56Z",
        "original_relative_path": "databases/prometheus/about"
    },
    {
        "name": "About YAML",
        "description": "Notes on structure, generation and validation of YAML.",
        "categories": "formats, yaml",
        "relative_path": "formats/yaml",
        "updated_at": "2019-11-05T09:47:35Z",
        "id": "#087",
        "created_at": "2019-11-05T09:47:35Z",
        "original_relative_path": "formats/yaml"
    },
    {
        "name": "SVG Animation",
        "description": "All about SVG for web design and animation",
        "categories": "CSS, SVG",
        "relative_path": "web/svg_animation",
        "updated_at": "2019-11-03T04:31:16Z",
        "id": "#086",
        "created_at": "2019-11-03T04:31:16Z",
        "original_relative_path": "web/svg_animation"
    },
    {
        "name": "Browser Security",
        "description": "notes and summaries of key browser security and vulnerabilities",
        "categories": "web",
        "relative_path": "web/browser_security",
        "updated_at": "2019-11-02T03:58:45Z",
        "id": "#085",
        "created_at": "2019-11-02T03:58:45Z",
        "original_relative_path": "web/browser_security"
    },
    {
        "name": "Google Chart Basics",
        "description": "Getting up and running and understanding the latest from Google Charts",
        "categories": "javascript, graphics",
        "relative_path": "javascript/google_charts/basics",
        "updated_at": "2019-09-22T02:28:16Z",
        "id": "#084",
        "created_at": "2019-09-22T02:28:16Z",
        "original_relative_path": "javascript/google_charts/basics"
    },
    {
        "name": "Dynamically Updating D3 Charts",
        "description": "How to dynamically update data in a D3 document",
        "categories": "javascript, graphics",
        "relative_path": "javascript/d3/dynamically_updating_chart",
        "updated_at": "2019-09-16T16:09:46Z",
        "id": "#083",
        "created_at": "2019-09-16T16:09:46Z",
        "original_relative_path": "javascript/d3/dynamically_updating_chart"
    },
    {
        "name": "D3 Basics",
        "description": "Getting up and running and understanding the latest in D3.js",
        "categories": "javascript, graphics",
        "relative_path": "javascript/d3/basics",
        "updated_at": "2019-09-16T16:09:46Z",
        "id": "#082",
        "created_at": "2019-09-16T16:09:46Z",
        "original_relative_path": "javascript/d3/basics"
    },
    {
        "name": "Implementing a Dictionary",
        "description": "An example of using struct-based C to implement a somewhat object-oriented dictionary",
        "categories": "C",
        "relative_path": "c/implementing_a_dictionary",
        "updated_at": "2019-09-09T17:17:57Z",
        "id": "#081",
        "created_at": "2019-09-09T17:17:57Z",
        "original_relative_path": "c/implementing_a_dictionary"
    },
    {
        "name": "make",
        "description": "Notes on make and makefiles",
        "categories": "tools",
        "relative_path": "tools/make",
        "updated_at": "2019-09-08T15:46:46Z",
        "id": "#080",
        "created_at": "2019-09-08T15:46:46Z",
        "original_relative_path": "tools/make"
    },
    {
        "name": "[Boost].SML",
        "description": "Initial tests with [Boost].SML - a C++14 State Machine Library",
        "categories": "C++",
        "relative_path": "cpp/boost-sml",
        "updated_at": "2019-09-08T15:44:50Z",
        "id": "#079",
        "created_at": "2019-09-08T15:44:50Z",
        "original_relative_path": "cpp/boost-sml"
    },
    {
        "name": "Starting Redis with and old CircleCI Image",
        "description": "Notes on dealing with a Redis issue on an old Ubuntu 14.04 docker image with CircleCI",
        "categories": "docker, ubuntu, redis, ci",
        "relative_path": "docker/starting_redis_with_old_circleci_image",
        "updated_at": "2019-08-14T11:44:07Z",
        "id": "#078",
        "created_at": "2019-08-14T11:44:07Z",
        "original_relative_path": "docker/starting_redis_with_old_circleci_image"
    },
    {
        "name": "punch",
        "description": "Testing Punch for static site generation (obsolete)",
        "categories": "staticweb, node",
        "relative_path": "staticweb/punch",
        "updated_at": "2019-08-12T09:37:14Z",
        "id": "#077",
        "created_at": "2019-08-12T09:37:14Z",
        "original_relative_path": "staticweb/punch"
    },
    {
        "name": "Reading MDB Files",
        "description": "Reading Microsoft Access database files on a Mac with Python",
        "categories": "python",
        "relative_path": "python/reading_mdb",
        "updated_at": "2019-08-12T08:56:15Z",
        "id": "#076",
        "created_at": "2019-08-12T08:56:15Z",
        "original_relative_path": "python/reading_mdb"
    },
    {
        "name": "Ruby on Rails 6",
        "description": "Running Rails 6 (beta1), learning about changes and new features, and testing out my favourite gems including: HAML",
        "categories": "Ruby, Rails, haml",
        "relative_path": "ruby/rails6",
        "updated_at": "2019-07-24T15:02:34Z",
        "id": "#075",
        "created_at": "2019-07-24T15:02:34Z",
        "original_relative_path": "ruby/rails6"
    },
    {
        "name": "Sinatra Echo Tools",
        "description": "A Sinatra app that provides a number of remote request debugging tools, and can be run with Docker - the tardate/echo-tools image is available on docker hub.",
        "categories": "Ruby, Sinatra, docker",
        "relative_path": "ruby/sinatra_echo",
        "updated_at": "2019-07-20T11:03:51Z",
        "id": "#074",
        "created_at": "2019-07-20T11:03:51Z",
        "original_relative_path": "ruby/sinatra_echo"
    },
    {
        "name": "MySQL Cheat Sheet",
        "description": "Basic administration and data management command notes",
        "categories": "databases, MySQL",
        "relative_path": "databases/mysql/cheats",
        "updated_at": "2019-07-20T08:29:16Z",
        "id": "#073",
        "created_at": "2019-07-20T08:29:16Z",
        "original_relative_path": "databases/mysql/cheats"
    },
    {
        "name": "PostgreSQL Cheat Sheet",
        "description": "Basic administration and data management command notes",
        "categories": "databases, PostgreSQL",
        "relative_path": "databases/postgresql/cheats",
        "updated_at": "2019-07-20T08:29:16Z",
        "id": "#072",
        "created_at": "2019-07-20T08:29:16Z",
        "original_relative_path": "databases/postgresql/cheats"
    },
    {
        "name": "MAC Address Generation with Ruby",
        "description": "all about MAC and generating random MAC addresses",
        "categories": "Ruby",
        "relative_path": "ruby/random_mac_generation",
        "updated_at": "2019-07-20T04:58:08Z",
        "id": "#071",
        "created_at": "2019-07-20T04:58:08Z",
        "original_relative_path": "ruby/random_mac_generation"
    },
    {
        "name": "HMAC Generation with Ruby",
        "description": "All about hash-based message authentication code (HMAC) generation with Ruby",
        "categories": "Ruby",
        "relative_path": "ruby/hmac",
        "updated_at": "2019-07-20T04:58:08Z",
        "id": "#070",
        "created_at": "2019-07-20T04:58:08Z",
        "original_relative_path": "ruby/hmac"
    },
    {
        "id": "#069",
        "name": "Top level imports",
        "description": "or: why not to put an __init__.py in your top level folder",
        "categories": "python",
        "relative_path": "python/top_level_imports",
        "updated_at": "2019-07-20T04:58:08Z",
        "created_at": "2019-07-20T04:58:08Z",
        "original_relative_path": "python/top_level_imports"
    },
    {
        "id": "#068",
        "name": "Twisted Client-Server with Tests",
        "description": "writing client-server code with twisted and tests",
        "categories": "python",
        "relative_path": "python/twisted_client_server",
        "updated_at": "2019-07-20T04:58:08Z",
        "created_at": "2019-07-20T04:58:08Z",
        "original_relative_path": "python/twisted_client_server"
    },
    {
        "id": "#067",
        "name": "python/simple_cli_with_begins",
        "description": "Using the begins library to write command line scripts without all the cruft",
        "categories": "python, CLI",
        "relative_path": "python/simple_cli_with_begins",
        "updated_at": "2019-07-20T04:58:08Z",
        "created_at": "2019-07-20T04:58:08Z",
        "original_relative_path": "python/simple_cli_with_begins"
    },
    {
        "name": "MAC Address Generation with Python",
        "description": "all about MAC and generating random MAC addresses",
        "categories": "python",
        "relative_path": "python/random_mac_generation",
        "updated_at": "2019-07-20T04:58:08Z",
        "id": "#066",
        "created_at": "2019-07-20T04:58:08Z",
        "original_relative_path": "python/random_mac_generation"
    },
    {
        "name": "flake8-blame",
        "description": "Who busted Python style-guide rules?",
        "categories": "python, bash",
        "relative_path": "python/flake8-blame",
        "updated_at": "2019-07-20T04:58:08Z",
        "id": "#065",
        "created_at": "2019-07-20T04:58:08Z",
        "original_relative_path": "python/flake8-blame"
    },
    {
        "id": "#064",
        "name": "Using Python with the imgur API",
        "description": "Using Python with the imgur API and demonstrate scanning imgur albums for image links",
        "categories": "python, imgur",
        "relative_path": "python/imgur",
        "updated_at": "2019-07-20T04:58:08Z",
        "created_at": "2019-07-20T04:58:08Z",
        "original_relative_path": "python/imgur"
    },
    {
        "id": "#063",
        "name": "Finding Python Libraries",
        "description": "How to find great python libraries and resources",
        "categories": "python",
        "relative_path": "python/finding_libraries",
        "updated_at": "2019-07-20T04:58:08Z",
        "created_at": "2019-07-20T04:58:08Z",
        "original_relative_path": "python/finding_libraries"
    },
    {
        "id": "#062",
        "name": "Decorating Class Methods",
        "description": "all about decorating class methods and preserving the ability to introspect",
        "categories": "python",
        "relative_path": "python/decorating_class_methods",
        "updated_at": "2019-07-20T04:58:08Z",
        "created_at": "2019-07-20T04:58:08Z",
        "original_relative_path": "python/decorating_class_methods"
    },
    {
        "id": "#061",
        "name": "Python quirks - late-bound closures",
        "description": "Python quirks - late-bound closures",
        "categories": "python",
        "relative_path": "python/quirks/late_bound_closures",
        "updated_at": "2019-07-20T04:58:08Z",
        "created_at": "2019-07-20T04:58:08Z",
        "original_relative_path": "python/quirks/late_bound_closures"
    },
    {
        "id": "#060",
        "name": "Python quirks - mutable default params",
        "description": "Python quirks - mutable default params",
        "categories": "python",
        "relative_path": "python/quirks/mutable_default_params",
        "updated_at": "2019-07-20T04:58:08Z",
        "created_at": "2019-07-20T04:58:08Z",
        "original_relative_path": "python/quirks/mutable_default_params"
    },
    {
        "id": "#059",
        "name": "Web Clients with Twisted",
        "description": "writing web client code with twisted and tests",
        "categories": "python",
        "relative_path": "python/twisted_web_client",
        "updated_at": "2019-07-20T04:58:08Z",
        "created_at": "2019-07-20T04:58:08Z",
        "original_relative_path": "python/twisted_web_client"
    },
    {
        "name": "s3sync",
        "description": "Using Amazon S3 or Wasabi for offsite data backup and long term storage",
        "categories": "tools, S3, AWS, Wasabi",
        "relative_path": "tools/s3sync",
        "updated_at": "2019-06-09T05:40:15Z",
        "id": "#058",
        "created_at": "2019-06-09T05:40:15Z",
        "original_relative_path": "tools/s3sync"
    },
    {
        "name": "Temporary Files with Ruby",
        "description": "Using Temporary Files with Ruby",
        "categories": "Ruby",
        "relative_path": "ruby/tempfiles",
        "updated_at": "2019-06-09T05:39:40Z",
        "id": "#057",
        "created_at": "2019-06-09T05:39:40Z",
        "original_relative_path": "ruby/tempfiles"
    },
    {
        "name": "regression",
        "description": "Implementing linear regression, logistic regression and multi-nominal logistic regression with tensorflow-js and node",
        "categories": "node, regression, tensorflow",
        "relative_path": "node/regression",
        "updated_at": "2019-03-02T10:24:13Z",
        "id": "#056",
        "created_at": "2019-03-02T10:24:13Z",
        "original_relative_path": "node/regression"
    },
    {
        "name": "knn-tf",
        "description": "A demonstration of the k-nearest neighbors algorithm implemented using tensorflow-js with node.js",
        "categories": "node, knn, tensorflow",
        "relative_path": "node/knn-tf",
        "updated_at": "2019-03-02T10:16:13Z",
        "id": "#055",
        "created_at": "2019-03-02T10:16:13Z",
        "original_relative_path": "node/knn-tf"
    },
    {
        "name": "plinko",
        "description": "A demonstration of the k-nearest neighbors algorithm implemented in javascript in a browser",
        "categories": "javascript, knn",
        "relative_path": "javascript/plinko",
        "updated_at": "2019-03-02T10:08:34Z",
        "id": "#054",
        "created_at": "2019-03-02T10:08:34Z",
        "original_relative_path": "javascript/plinko"
    },
    {
        "name": "loadcsv",
        "description": "Loading CSV files with node.js in a form suitable for use in statistical/machine learning algorithms",
        "categories": "node, CSV",
        "relative_path": "node/loadcsv",
        "updated_at": "2019-03-02T09:53:03Z",
        "id": "#053",
        "created_at": "2019-03-02T09:53:03Z",
        "original_relative_path": "node/loadcsv"
    },
    {
        "name": "vscode",
        "description": "Trying out Visual Studio Code",
        "categories": "tools, editors",
        "relative_path": "tools/vscode",
        "updated_at": "2019-02-26T12:29:41Z",
        "id": "#052",
        "created_at": "2019-02-26T12:29:41Z",
        "original_relative_path": "tools/vscode"
    },
    {
        "name": "Ruby on Rails 5",
        "description": "Features and demonstration of Rails 5",
        "categories": "Ruby, Rails",
        "relative_path": "ruby/rails5",
        "updated_at": "2019-02-25T14:32:51Z",
        "id": "#051",
        "created_at": "2019-02-25T14:32:51Z",
        "original_relative_path": "ruby/rails5"
    },
    {
        "name": "Ruby on Rails 4",
        "description": "Features and demonstration of Rails 4",
        "categories": "Ruby, Rails",
        "relative_path": "ruby/rails4",
        "updated_at": "2019-02-25T14:32:51Z",
        "id": "#050",
        "created_at": "2019-02-25T14:32:51Z",
        "original_relative_path": "ruby/rails4"
    },
    {
        "name": "Ruby on Rails 3",
        "description": "Features and demonstration of Rails 3.",
        "categories": "Ruby, Rails",
        "relative_path": "ruby/rails3",
        "updated_at": "2019-02-25T14:32:51Z",
        "id": "#049",
        "created_at": "2019-02-25T14:32:51Z",
        "original_relative_path": "ruby/rails3"
    },
    {
        "name": "deleting_roles",
        "description": "Notes on methods to inspect PostgreSQL role permissions, revoke permissions and drop roles",
        "categories": "databases, PostgreSQL",
        "relative_path": "databases/postgresql/deleting_roles",
        "updated_at": "2019-02-23T10:42:26Z",
        "id": "#048",
        "created_at": "2019-02-23T10:42:26Z",
        "original_relative_path": "databases/postgresql/deleting_roles"
    },
    {
        "name": "Sync Folder",
        "description": "Comparing methods for synchronizing local folders - cp, rsync",
        "categories": "bash, rsync",
        "relative_path": "bash/sync_folder",
        "updated_at": "2019-02-23T10:42:01Z",
        "id": "#047",
        "created_at": "2019-02-23T10:42:01Z",
        "original_relative_path": "bash/sync_folder"
    },
    {
        "name": "C++/DoubleTrouble",
        "description": "Investigting some of the pitfalls of directly reading doubles from a stream, then going down the rabbit hole of bugs and variations in the LLVM/Clang and GCC implementations of the C++ standard library.",
        "categories": "C++",
        "relative_path": "cpp/doubletrouble",
        "updated_at": "2019-01-05T09:12:40Z",
        "id": "#046",
        "created_at": "2019-01-05T09:12:40Z",
        "original_relative_path": "cpp/DoubleTrouble"
    },
    {
        "name": "C++/about",
        "description": "My place for notes on C++ resources and references",
        "categories": "C++",
        "relative_path": "cpp/about",
        "updated_at": "2019-01-05T09:12:40Z",
        "id": "#045",
        "created_at": "2019-01-05T09:12:40Z",
        "original_relative_path": "cpp/about"
    },
    {
        "name": "JSON Parsing",
        "description": "Generating pretty JSON with Ruby and dealing with quirks",
        "categories": "Ruby",
        "relative_path": "ruby/json_parsing",
        "updated_at": "2018-12-16T16:09:16Z",
        "id": "#044",
        "created_at": "2018-12-16T16:09:16Z",
        "original_relative_path": "ruby/json_parsing"
    },
    {
        "name": "Memory Profiling",
        "description": "About memory profiling in Ruby",
        "categories": "Ruby",
        "relative_path": "ruby/memory_profiling",
        "updated_at": "2018-10-03T11:54:22Z",
        "id": "#043",
        "created_at": "2018-10-03T11:54:22Z",
        "original_relative_path": "ruby/memory_profiling"
    },
    {
        "name": "Class Structures and Scoping",
        "description": "about class structures and scoping in python",
        "categories": "python",
        "relative_path": "python/class_structures_and_scoping",
        "updated_at": "2018-10-03T11:54:22Z",
        "id": "#042",
        "created_at": "2018-10-03T11:54:22Z",
        "original_relative_path": "python/class_structures_and_scoping"
    },
    {
        "name": "Celery",
        "description": "About Celery, a distributed task queue system for python",
        "categories": "python",
        "relative_path": "python/celery",
        "updated_at": "2018-10-03T11:54:22Z",
        "id": "#041",
        "created_at": "2018-10-03T11:54:22Z",
        "original_relative_path": "python/celery"
    },
    {
        "name": "SQL to CSV",
        "description": "Methods for generating CSV output from a PostgreSQL SQL query",
        "categories": "databases, PostgreSQL, PostgreSQL, CSV",
        "relative_path": "databases/postgresql/sql2csv",
        "updated_at": "2018-10-03T11:54:00Z",
        "id": "#040",
        "created_at": "2018-10-03T11:54:00Z",
        "original_relative_path": "databases/postgresql/sql2csv"
    },
    {
        "name": "Copying Tables",
        "description": "notes on copying table strictures and data with SQL",
        "categories": "databases, SQL",
        "relative_path": "databases/postgresql/copy_table",
        "updated_at": "2018-10-03T11:54:00Z",
        "id": "#039",
        "created_at": "2018-10-03T11:54:00Z",
        "original_relative_path": "databases/postgresql/copy_table"
    },
    {
        "name": "Bash if and test",
        "description": "All about if/then test constructs in Bash scripting",
        "categories": "bash",
        "relative_path": "bash/if_and_test",
        "updated_at": "2018-09-25T21:45:35Z",
        "id": "#038",
        "created_at": "2018-09-25T21:45:35Z",
        "original_relative_path": "bash/if_and_test"
    },
    {
        "name": "Sort by Numbers",
        "description": "Sorting text numerically in the shell using the special --version-sort mode of the sort utility",
        "categories": "bash",
        "relative_path": "bash/sort_by_numbers",
        "updated_at": "2018-09-25T21:45:35Z",
        "id": "#037",
        "created_at": "2018-09-25T21:45:35Z",
        "original_relative_path": "bash/sort_by_numbers"
    },
    {
        "name": "Bash Function Inference",
        "description": "How to test for the presence of functions in order to branch to arbitrary functions by name",
        "categories": "bash",
        "relative_path": "bash/function_inference",
        "updated_at": "2018-04-18T16:30:13Z",
        "id": "#036",
        "created_at": "2018-04-18T16:30:13Z",
        "original_relative_path": "bash/function_inference"
    },
    {
        "id": "#035",
        "name": "Bash Case Statement",
        "description": "How to use case statements in the bash shell",
        "categories": "bash",
        "relative_path": "bash/case_statement",
        "updated_at": "2018-04-17T16:02:33Z",
        "created_at": "2018-04-17T16:02:33Z",
        "original_relative_path": "bash/case_statement"
    },
    {
        "id": "#034",
        "name": "Bash File Locks",
        "description": "How to implement simple resource semaphores with file locks",
        "categories": "bash",
        "relative_path": "bash/file_locks",
        "updated_at": "2017-10-09T15:23:07Z",
        "created_at": "2017-10-09T15:23:07Z",
        "original_relative_path": "bash/file_locks"
    },
    {
        "id": "#033",
        "name": "Parsing Environment Settings",
        "description": "Techniques for parsing environment variables with bash built-in features only",
        "categories": "bash",
        "relative_path": "bash/parse_env_setting",
        "updated_at": "2017-10-09T13:16:53Z",
        "created_at": "2017-10-09T13:16:53Z",
        "original_relative_path": "bash/parse_env_setting"
    },
    {
        "id": "#032",
        "name": "Iterating Character Arrays",
        "description": "Iterating Character Arrays in C",
        "categories": "C",
        "relative_path": "c/iterating_char_arrays",
        "updated_at": "2017-09-24T13:39:40Z",
        "created_at": "2017-09-24T13:39:40Z",
        "original_relative_path": "c/iterating_char_arrays"
    },
    {
        "id": "#031",
        "name": "Hello World with C#/mono",
        "description": "Hello World with C#/mono",
        "categories": "Mono, C#",
        "relative_path": "mono/hello",
        "updated_at": "2017-02-19T09:20:41Z",
        "created_at": "2017-02-19T09:20:41Z",
        "original_relative_path": "mono/hello"
    },
    {
        "id": "#030",
        "name": "Handling Time in C#/mono",
        "description": "Handling Time in C#/mono",
        "categories": "Mono, C#",
        "relative_path": "mono/time",
        "updated_at": "2017-02-19T09:20:41Z",
        "created_at": "2017-02-19T09:20:41Z",
        "original_relative_path": "mono/time"
    },
    {
        "id": "#029",
        "name": "About C# with Mono",
        "description": "About C# with Mono",
        "categories": "Mono, C#",
        "relative_path": "mono/about",
        "updated_at": "2017-02-19T09:20:41Z",
        "created_at": "2017-02-19T09:20:41Z",
        "original_relative_path": "mono/about"
    },
    {
        "id": "#028",
        "name": "Bash Loops",
        "description": "All about Bash loops",
        "categories": "bash",
        "relative_path": "bash/loops",
        "updated_at": "2017-02-19T05:49:47Z",
        "created_at": "2017-02-19T05:49:47Z",
        "original_relative_path": "bash/loops"
    },
    {
        "id": "#027",
        "name": "staticweb/jekyll",
        "description": "Test-driving some techniques for building static sites with Jekyll",
        "categories": "Jekyll, static",
        "relative_path": "staticweb/jekyll",
        "updated_at": "2016-12-25T10:31:39Z",
        "created_at": "2016-12-25T10:31:39Z",
        "original_relative_path": "staticweb/jekyll"
    },
    {
        "id": "#026",
        "name": "Hash Define or Const?",
        "description": "Comparing the use of `#define` preprocessor macros and `const` statements",
        "categories": "C",
        "relative_path": "c/define_const",
        "updated_at": "2016-12-25T07:44:11Z",
        "created_at": "2016-12-25T07:44:11Z",
        "original_relative_path": "c/define_const"
    },
    {
        "id": "#025",
        "name": "a Kiss FFT Example",
        "description": "test drive the Kiss FFT C library with an example",
        "categories": "C, FFT",
        "relative_path": "fft/running_kissfft_example",
        "updated_at": "2016-09-13T22:35:42Z",
        "created_at": "2016-09-13T22:35:42Z",
        "original_relative_path": "fft/running_kissfft_example"
    },
    {
        "id": "#024",
        "name": "Hello world in Go",
        "description": "exploring Go with the simplest example",
        "categories": "Go",
        "relative_path": "go/hello_world",
        "updated_at": "2016-09-10T13:53:45Z",
        "created_at": "2016-09-10T13:53:45Z",
        "original_relative_path": "go/hello_world"
    },
    {
        "id": "#023",
        "name": "About Go",
        "description": "Go language - my tl;dr summary",
        "categories": "Go",
        "relative_path": "go/about",
        "updated_at": "2016-09-10T01:00:27Z",
        "created_at": "2016-09-10T01:00:27Z",
        "original_relative_path": "go/about"
    },
    {
        "id": "#022",
        "name": "gRPC Explainer - Ruby version",
        "description": "hardware excuse generator with gRPC - Ruby client and server example",
        "categories": "gRPC, Ruby, messaging",
        "relative_path": "messaging/grpc/explainer/ruby",
        "updated_at": "2016-07-10T13:14:48Z",
        "created_at": "2016-07-10T13:14:48Z",
        "original_relative_path": "messaging/grpc/explainer/ruby"
    },
    {
        "id": "#021",
        "name": "gRPC Explainer - Node.js version",
        "description": "hardware excuse generator with gRPC - Node client example",
        "categories": "gRPC, node, messaging",
        "relative_path": "messaging/grpc/explainer/node",
        "updated_at": "2016-07-10T13:14:48Z",
        "created_at": "2016-07-10T13:14:48Z",
        "original_relative_path": "messaging/grpc/explainer/node"
    },
    {
        "id": "#020",
        "name": "gRPC Explainer - C# Version",
        "description": "hardware excuse generator with gRPC - C# client example",
        "categories": "gRPC, C#, messaging",
        "relative_path": "messaging/grpc/explainer/csharp",
        "updated_at": "2016-07-10T13:14:48Z",
        "created_at": "2016-07-10T13:14:48Z",
        "original_relative_path": "messaging/grpc/explainer/csharp"
    },
    {
        "id": "#019",
        "name": "gRPC Explainer - C++ Version",
        "description": "hardware excuse generator with gRPC - C++ client example",
        "categories": "gRPC, C++, messaging",
        "relative_path": "messaging/grpc/explainer/cpp",
        "updated_at": "2016-07-10T13:14:48Z",
        "created_at": "2016-07-10T13:14:48Z",
        "original_relative_path": "messaging/grpc/explainer/cpp"
    },
    {
        "id": "#018",
        "name": "gRPC Explainer - Python version",
        "description": "hardware excuse generator with gRPC - Python client example",
        "categories": "gRPC, python, messaging",
        "relative_path": "messaging/grpc/explainer/python",
        "updated_at": "2016-07-10T13:14:48Z",
        "created_at": "2016-07-10T13:14:48Z",
        "original_relative_path": "messaging/grpc/explainer/python"
    },
    {
        "id": "#017",
        "name": "gRPC Explainer",
        "description": "hardware excuse generator with gRPC",
        "categories": "gRPC, messaging",
        "relative_path": "messaging/grpc/explainer",
        "updated_at": "2016-07-10T13:14:48Z",
        "created_at": "2016-07-10T13:14:48Z",
        "original_relative_path": "messaging/grpc/explainer"
    },
    {
        "id": "#016",
        "name": "RADIUS",
        "description": "RADIUS - my tl;dr summary",
        "categories": "RADIUS, infrastructure",
        "relative_path": "infrastructure/radius/about",
        "updated_at": "2016-07-10T13:14:48Z",
        "created_at": "2016-07-10T13:14:48Z",
        "original_relative_path": "infrastructure/radius/about"
    },
    {
        "id": "#015",
        "name": "Progress Bars with Bootstrap",
        "description": "Progress Bars with Bootstrap",
        "categories": "javascript",
        "relative_path": "javascript/progress_bars_bootstrap",
        "updated_at": "2016-07-10T13:14:48Z",
        "created_at": "2016-07-10T13:14:48Z",
        "original_relative_path": "javascript/progress_bars_bootstrap"
    },
    {
        "id": "#014",
        "name": "Javascript/highcharts_with_bower",
        "description": "Highcharts with Bower",
        "categories": "javascript",
        "relative_path": "javascript/highcharts_with_bower",
        "updated_at": "2016-07-10T13:14:48Z",
        "created_at": "2016-07-10T13:14:48Z",
        "original_relative_path": "javascript/highcharts_with_bower"
    },
    {
        "id": "#013",
        "name": "Ribbon Charts with plotly.js",
        "description": "Interactive Ribbon Charts with plotly.js",
        "categories": "javascript",
        "relative_path": "javascript/plotly_ribbon_charts",
        "updated_at": "2016-07-10T13:14:48Z",
        "created_at": "2016-07-10T13:14:48Z",
        "original_relative_path": "javascript/plotly_ribbon_charts"
    },
    {
        "id": "#012",
        "name": "C++/exception_handling",
        "description": "C++ exception handling",
        "categories": "C++",
        "relative_path": "cpp/exception_handling",
        "updated_at": "2016-07-10T13:14:48Z",
        "created_at": "2016-07-10T13:14:48Z",
        "original_relative_path": "cpp/exception_handling"
    },
    {
        "id": "#011",
        "name": "Process Lines",
        "description": "Process a File/Stream Line-by-Line in Bash",
        "categories": "bash",
        "relative_path": "bash/process_lines",
        "updated_at": "2016-07-10T13:14:48Z",
        "created_at": "2016-07-10T13:14:48Z",
        "original_relative_path": "bash/process_lines"
    },
    {
        "id": "#010",
        "name": "Select Menus",
        "description": "simple multiple-choice user input",
        "categories": "bash",
        "relative_path": "bash/select_menu",
        "updated_at": "2016-07-10T13:14:48Z",
        "created_at": "2016-07-10T13:14:48Z",
        "original_relative_path": "bash/select_menu"
    },
    {
        "id": "#009",
        "name": "About Haskell",
        "description": "Haskell - my tl;dr summary",
        "categories": "Haskell",
        "relative_path": "haskell/about",
        "updated_at": "2016-07-10T13:14:48Z",
        "created_at": "2016-07-10T13:14:48Z",
        "original_relative_path": "haskell/about"
    },
    {
        "id": "#008",
        "name": "Hello World! in Haskell",
        "description": "Haskell - Hello World",
        "categories": "Haskell",
        "relative_path": "haskell/hello_world",
        "updated_at": "2016-07-10T13:14:48Z",
        "created_at": "2016-07-10T13:14:48Z",
        "original_relative_path": "haskell/hello_world"
    },
    {
        "id": "#007",
        "name": "Elm/hello_clock",
        "description": "2D graphics with elm",
        "categories": "Elm",
        "relative_path": "elm/hello_clock",
        "updated_at": "2016-07-10T13:14:48Z",
        "created_at": "2016-07-10T13:14:48Z",
        "original_relative_path": "elm/hello_clock"
    },
    {
        "id": "#006",
        "name": "Rust/about",
        "description": "Rust - my tl;dr summary",
        "categories": "Rust",
        "relative_path": "rust/about",
        "updated_at": "2016-07-10T13:14:48Z",
        "created_at": "2016-07-10T13:14:48Z",
        "original_relative_path": "rust/about"
    },
    {
        "id": "#005",
        "name": "Hello World in Rust",
        "description": "Rust - Hello World with concurrency",
        "categories": "Rust",
        "relative_path": "rust/hello_world",
        "updated_at": "2016-07-10T13:14:48Z",
        "created_at": "2016-07-10T13:14:48Z",
        "original_relative_path": "rust/hello_world"
    },
    {
        "id": "#004",
        "name": "Catalog",
        "description": "a Javascript Datatables catalog for GitHub Pages",
        "categories": "tools, javascript",
        "relative_path": "catalog",
        "updated_at": "2016-07-10T13:14:48Z",
        "created_at": "2016-07-10T13:14:48Z",
        "original_relative_path": "catalog"
    },
    {
        "id": "#003",
        "name": "Fixing the First Line of a File",
        "description": "patching text files with Perl - fix the first line only",
        "categories": "Perl",
        "relative_path": "perl/fix_first_line",
        "updated_at": "2016-07-10T13:14:48Z",
        "created_at": "2016-07-10T13:14:48Z",
        "original_relative_path": "perl/fix_first_line"
    },
    {
        "id": "#002",
        "name": "Patching Text Files",
        "description": "patching text files with Perl",
        "categories": "Perl",
        "relative_path": "perl/patch_file",
        "updated_at": "2016-07-10T13:14:48Z",
        "created_at": "2016-07-10T13:14:48Z",
        "original_relative_path": "perl/patch_file"
    },
    {
        "id": "#001",
        "name": "envsubst",
        "description": "substitute shell variables in text",
        "categories": "tools, bash",
        "relative_path": "tools/envsubst",
        "updated_at": "2016-07-10T13:14:48Z",
        "created_at": "2016-07-10T13:14:48Z",
        "original_relative_path": "tools/envsubst"
    }
]