41554 blogs · [ { "id": "01a0952f-4570-729f-bf76-ab3b906fa5f4", "title": "A Logic GUI", "url": "https://occasionallycogent.com/logui_ecs_intro/index.html", "published_at": "2026-09-10T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc465958772", "title": "Base Case", "url": "https://occasionallycogent.com/recurse_week_one/index.html", "published_at": "2026-05-22T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc46633b993", "title": "Books of 2025", "url": "https://occasionallycogent.com/books_of_2025/index.html", "published_at": "2025-12-31T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc4667b938d", "title": "Prolog Projects Tips", "url": "https://occasionallycogent.com/prolog_project_helpers/index.html", "published_at": "2025-12-09T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc466b4961c", "title": "Coming Out Strong", "url": "https://occasionallycogent.com/coming_out/index.html", "published_at": "2025-09-22T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc467b16278", "title": "An Unsweetened Memory", "url": "https://occasionallycogent.com/memory_of_sweet_and_sour/index.html", "published_at": "2025-06-10T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc467cbb274", "title": "Social Update", "url": "https://occasionallycogent.com/social_update/index.html", "published_at": "2025-05-08T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc467d1817a", "title": "Quick Tip: Interval Trees in Prolog", "url": "https://occasionallycogent.com/prolog_interval_tree/index.html", "published_at": "2025-04-05T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc46801c6e4", "title": "Auto-Formatting Prolog Code", "url": "https://occasionallycogent.com/prolog_code_formatter/index.html", "published_at": "2025-03-28T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc46861157a", "title": "Self-Indulgent Design Refresh", "url": "https://occasionallycogent.com/design_refresh/index.html", "published_at": "2025-03-26T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc468f692ae", "title": "Books of 2024", "url": "https://occasionallycogent.com/books_of_2024/index.html", "published_at": "2024-12-31T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc469231f30", "title": "Holding Stationæry", "url": "https://occasionallycogent.com/holding_stationaery/index.html", "published_at": "2024-02-29T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc469e03ae9", "title": "ClojureScript contra Rust", "url": "https://occasionallycogent.com/cljs_v_rs/index.html", "published_at": "2024-01-31T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc46a0cce6d", "title": "Books of 2023", "url": "https://occasionallycogent.com/books_of_2023/index.html", "published_at": "2024-01-01T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc46a3d1e16", "title": "Tailwind \"Versus\" CSS", "url": "https://occasionallycogent.com/tailwind_and_css/index.html", "published_at": "2023-07-13T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc46b347ed2", "title": "Practical Relaxation", "url": "https://occasionallycogent.com/practical_relaxation/index.html", "published_at": "2023-07-02T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc46c25ae64", "title": "Philosophical Excursions", "url": "https://occasionallycogent.com/recent_excursions/index.html", "published_at": "2023-06-22T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc46c328bc7", "title": "Brief Thoughts on \"AI\" and LLMs", "url": "https://occasionallycogent.com/i_can_call_you_betty/index.html", "published_at": "2023-05-09T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc46d2a7e7f", "title": "Books of 2022", "url": "https://occasionallycogent.com/books_of_2022/index.html", "published_at": "2023-01-01T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc46d8323a3", "title": "Our Vacation", "url": "https://occasionallycogent.com/our_vacation/index.html", "published_at": "2022-07-24T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc46d8d0457", "title": "Focus on the Mac", "url": "https://occasionallycogent.com/focus_on_the_mac/index.html", "published_at": "2022-06-06T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc46daa7a08", "title": "Automaking Prolog, Part Two", "url": "https://occasionallycogent.com/automake_details/index.html", "published_at": "2022-02-23T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc46e1a20c5", "title": "Automaking Prolog", "url": "https://occasionallycogent.com/automake_genesis/index.html", "published_at": "2022-02-15T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc46e405761", "title": "Books of 2021", "url": "https://occasionallycogent.com/books_of_2021/index.html", "published_at": "2022-01-01T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc46eaef3fc", "title": "Levenshtein Distance in Prolog", "url": "https://occasionallycogent.com/levenshtein_distance/index.html", "published_at": "2021-11-06T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc46f30d4d5", "title": "Maximalist Minimalism", "url": "https://occasionallycogent.com/minimalist_maximalism/index.html", "published_at": "2021-10-18T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc46fac7f0a", "title": "One Year of Writing", "url": "https://occasionallycogent.com/one_year_of_writing/index.html", "published_at": "2021-08-23T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc47043acc8", "title": "Emacs Completes Me", "url": "https://occasionallycogent.com/emacs_new_completions_helper/index.html", "published_at": "2021-07-25T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc47056f3da", "title": "Some Emacs advice", "url": "https://occasionallycogent.com/emacs_advice/index.html", "published_at": "2021-06-17T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc470a2f277", "title": "The Problem With Free Software…", "url": "https://occasionallycogent.com/problem_with_foss/index.html", "published_at": "2021-05-19T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc471472bb6", "title": "Books of 2020", "url": "https://occasionallycogent.com/books_of_2020/index.html", "published_at": "2020-12-31T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc471c3df56", "title": "Customizing the Emacs Modeline: Video Edition", "url": "https://occasionallycogent.com/custom_emacs_modeline_video_edition/index.html", "published_at": "2020-10-04T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc4721d3570", "title": "Getting Evil with Emacs", "url": "https://occasionallycogent.com/getting_evil_with_emacs/index.html", "published_at": "2020-09-19T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc472bc0bdc", "title": "Introspective Emacs", "url": "https://occasionallycogent.com/introspective_emacs/index.html", "published_at": "2020-09-13T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc472eddb31", "title": "Reading with Emacs", "url": "https://occasionallycogent.com/reading_with_emacs/index.html", "published_at": "2020-09-07T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc4736ce530", "title": "Intermediate Emacs: Customizing Helm", "url": "https://occasionallycogent.com/intermediate_emacs_helm/index.html", "published_at": "2020-08-30T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc4740d418f", "title": "An Emacs Configuration Overview", "url": "https://occasionallycogent.com/emacs_config_intro/index.html", "published_at": "2020-08-22T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc474d20b2a", "title": "Programming Isn't Coding", "url": "https://occasionallycogent.com/programming_isnt_coding/index.html", "published_at": "2020-08-02T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc4757bf02e", "title": "Translating Idioms", "url": "https://occasionallycogent.com/translating_idioms/index.html", "published_at": "2020-05-24T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc47598556a", "title": "Building Bard", "url": "https://occasionallycogent.com/building_bard/index.html", "published_at": "2020-04-25T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc475e2aac4", "title": "Continuations in Prolog", "url": "https://occasionallycogent.com/continuations_in_prolog/index.html", "published_at": "2020-03-05T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc476a5a0e6", "title": "Books of 2019", "url": "https://occasionallycogent.com/books_of_2019/index.html", "published_at": "2019-12-31T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc4775a0034", "title": "helm-switch-shell", "url": "https://occasionallycogent.com/helm_switch_shell/index.html", "published_at": "2019-12-05T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc47791ca97", "title": "Adding JSON Feed Support", "url": "https://occasionallycogent.com/added_json_feed/index.html", "published_at": "2019-12-05T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc47804a37b", "title": "Reading Email in Emacs", "url": "https://occasionallycogent.com/mail_in_emacs/index.html", "published_at": "2019-11-13T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc47820df7f", "title": "Prolog Fundamentals Catchup", "url": "https://occasionallycogent.com/prolog_fundamentals_catchup/index.html", "published_at": "2019-09-17T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc47854d812", "title": "A Prolog Language Server", "url": "https://occasionallycogent.com/prolog_language_server/index.html", "published_at": "2019-09-08T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc47940ca0a", "title": "A Very Specific Prolog Warning", "url": "https://occasionallycogent.com/a_very_specific_prolog_warning/index.html", "published_at": "2019-07-07T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc479f84f5d", "title": "/A Pattern Language/ versus /Design Patterns/", "url": "https://occasionallycogent.com/a_pattern_language_vs_design_patterns/index.html", "published_at": "2019-06-30T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc47a17a3ec", "title": "Writing a Custom Helm Source in Emacs", "url": "https://occasionallycogent.com/emacs_custom_helm_source/index.html", "published_at": "2019-04-28T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc47a8aa924", "title": "Git Over Email?", "url": "https://occasionallycogent.com/git_via_email/index.html", "published_at": "2019-04-07T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc47b789bb7", "title": "Against Mindless Software Minimalism", "url": "https://occasionallycogent.com/against_mindless_minimalism/index.html", "published_at": "2019-03-24T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc47ba13c87", "title": "Customizing the Emacs Modeline", "url": "https://occasionallycogent.com/custom_emacs_modeline/index.html", "published_at": "2019-03-17T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc47c025480", "title": "Books of 2018", "url": "https://occasionallycogent.com/books_of_2018/index.html", "published_at": "2018-12-31T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc47cd2aa9f", "title": "A Prolog Nerdsnipe", "url": "https://occasionallycogent.com/prolog_nerdsnipe/index.html", "published_at": "2018-12-24T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc47d6c5097", "title": "Extended DCGs in Prolog", "url": "https://occasionallycogent.com/prolog_edcgs/index.html", "published_at": "2018-12-09T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc47e14e485", "title": "New Blog Setup!", "url": "https://occasionallycogent.com/new_blog_setup/index.html", "published_at": "2018-12-04T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc47e2d4d82", "title": "Emacs custom helm actions", "url": "https://occasionallycogent.com/emacs_custom_helm_actions/index.html", "published_at": "2018-11-23T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc47ebeeb3f", "title": "Thoughts on /Democracy in America/", "url": "https://occasionallycogent.com/democracy_in_america/index.html", "published_at": "2018-10-10T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc47f95307e", "title": "Emacs prettify-symbols-mode in Comments", "url": "https://occasionallycogent.com/emacs_prettify_comments/index.html", "published_at": "2018-09-25T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc480187e4e", "title": "Writing an HTTP/2 Client in Prolog", "url": "https://occasionallycogent.com/http2_client_in_prolog/index.html", "published_at": "2018-08-26T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc48066de7e", "title": "SHA-1 Hash in Pure Prolog", "url": "https://occasionallycogent.com/sha1_in_prolog/index.html", "published_at": "2018-05-01T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc4809e498f", "title": "How to Invert the Mersenne Twister's Temper (If You're Bad at Bit Twiddling)", "url": "https://occasionallycogent.com/inverting_the_mersenne_temper/index.html", "published_at": "2018-04-20T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc48166ef1e", "title": "The Whys and Whats of Braid", "url": "https://occasionallycogent.com/why_and_what_braid/index.html", "published_at": "2018-03-28T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc481afb75d", "title": "Discovering an Old Language", "url": "https://occasionallycogent.com/discovering_an_old_language/index.html", "published_at": "2018-03-24T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc4827b282c", "title": "What Does Mutability Mean?", "url": "https://occasionallycogent.com/mutability/index.html", "published_at": "2018-03-18T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc482ef8a85", "title": "Politics in Programming Pedagogy", "url": "https://occasionallycogent.com/politics_in_programming/index.html", "published_at": "2018-02-21T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc483aee012", "title": "Books I Read in 2017", "url": "https://occasionallycogent.com/books_of_2017/index.html", "published_at": "2018-01-01T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc483d90b90", "title": "Disabling Transit Write Caching in Clojure", "url": "https://occasionallycogent.com/clojure_transit_hacks/index.html", "published_at": "2017-12-21T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc483fd76f9", "title": "Elixir Deployment Woes", "url": "https://occasionallycogent.com/elixir_deployment_woes/index.html", "published_at": "2017-12-02T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc484c48ead", "title": "An Elixir Gotcha", "url": "https://occasionallycogent.com/an-elixir-gotcha/index.html", "published_at": "2017-11-15T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc4859b8c78", "title": "Small Teams", "url": "https://occasionallycogent.com/small_teams/index.html", "published_at": "2017-11-11T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc485e265cd", "title": "One Week With the Model 01", "url": "https://occasionallycogent.com/one_week_model01/index.html", "published_at": "2017-10-30T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc486d192d5", "title": "Keyboardio Arrives!", "url": "https://occasionallycogent.com/keyboard_arrived/index.html", "published_at": "2017-10-23T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc486e34315", "title": "Keyboardio Cometh, Pt 4", "url": "https://occasionallycogent.com/keyboardio_pt4/index.html", "published_at": "2017-10-22T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc487a3574d", "title": "Keyboardio Cometh, Pt 3", "url": "https://occasionallycogent.com/keyboardio_pt3/index.html", "published_at": "2017-10-19T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc4883a986d", "title": "Keyboardio Cometh, Pt 2", "url": "https://occasionallycogent.com/keyboardio_pt2/index.html", "published_at": "2017-10-18T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc488473e31", "title": "Keyboardio Cometh, Pt 1", "url": "https://occasionallycogent.com/keyboardio_pt1/index.html", "published_at": "2017-10-16T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc488dd81eb", "title": "Games, Programming, and Authorial Intent", "url": "https://occasionallycogent.com/games_and_programming/index.html", "published_at": "2017-10-15T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc489cb782f", "title": "The Mystery of the Transforming Bicycle", "url": "https://occasionallycogent.com/bike_caper/index.html", "published_at": "2017-10-10T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc48a7cf73a", "title": "How I Learned to Stop Worrying and Love Free Software", "url": "https://occasionallycogent.com/from_open_to_free/index.html", "published_at": "2017-09-18T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc48b081525", "title": "I Don't Want to be Static", "url": "https://occasionallycogent.com/static-type-systems/index.html", "published_at": "2017-06-06T04:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc48b232aea", "title": "How We Use Datomic", "url": "https://occasionallycogent.com/how-we-use-datomic/index.html", "published_at": "2017-01-15T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc48bb33427", "title": "Learning to Draw", "url": "https://occasionallycogent.com/learning-to-draw/index.html", "published_at": "2017-01-01T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc48c806aca", "title": "Books I Read in 2016", "url": "https://occasionallycogent.com/books-of-2016/index.html", "published_at": "2017-01-01T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc48d70d90d", "title": "Trying Kakoune", "url": "https://occasionallycogent.com/trying-kakoune/index.html", "published_at": "2016-12-18T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc48e62caf6", "title": "Exploring Io", "url": "https://occasionallycogent.com/exploring-io/index.html", "published_at": "2016-12-15T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc48edb7648", "title": "Strength Sports", "url": "https://occasionallycogent.com/strength-sports/index.html", "published_at": "2016-12-08T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc48ef15f5a", "title": "Teaching Programming", "url": "https://occasionallycogent.com/teaching-programming/index.html", "published_at": "2016-12-03T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc48f976b10", "title": "Greasing the Groove", "url": "https://occasionallycogent.com/greasing-the-groove/index.html", "published_at": "2016-12-02T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc48fad76da", "title": "Reverse Factorial", "url": "https://occasionallycogent.com/reverse-factorial/index.html", "published_at": "2016-11-30T05:00:00+00:00" }, { "id": "01a0821d-c5df-70d2-a106-fdc48fe05ea8", "title": "My Sister's Birthday, Perlin Noise, and Ancient Mammals", "url": "https://occasionallycogent.com/perlin-noise-in-clojure/index.html", "published_at": "2016-11-25T05:00:00+00:00" } ] posts Claim your blog
Back to James Cash
Blog · corpus.blog/blogs/occasionallycogent.com/posts

James Cash

occasionallycogent.com

2026

2025

2024

2023

2022

2021

2020

2019

2018

2017

2016