41554 blogs · [ { "id": "01a08759-43ef-72b3-abee-3d851aa5230c", "title": "Overriding Flakes Inputs in Hydra", "url": "https://brianmckenna.org/blog/hydra_dynamic_flakes", "published_at": "2025-01-17T00:00:00+00:00" }, { "id": "01a08759-43f0-716b-9649-80417207aa6e", "title": "Off-Grid Men's Shed", "url": "https://brianmckenna.org/blog/off_grid_mens_shed", "published_at": "2024-06-14T00:00:00+00:00" }, { "id": "01a08759-43f0-716b-9649-8041722656ad", "title": "Type system of Fortnite's Verse language", "url": "https://brianmckenna.org/blog/verse_types", "published_at": "2023-03-29T00:00:00+00:00" }, { "id": "01a08759-43f0-716b-9649-8041727cc53f", "title": "Architecture diagrams should be code", "url": "https://brianmckenna.org/blog/architecture_code", "published_at": "2023-01-09T00:00:00+00:00" }, { "id": "01a08759-43f0-716b-9649-8041732216d4", "title": "Higher Kinded Parametricity", "url": "https://brianmckenna.org/blog/higher_kinded_parametricity", "published_at": "2018-12-24T00:00:00+00:00" }, { "id": "01a08759-43f0-716b-9649-80417370b42d", "title": "Polymorphic Programming", "url": "https://brianmckenna.org/blog/polymorphic_programming", "published_at": "2018-01-07T00:00:00+00:00" }, { "id": "01a08759-43f0-716b-9649-804173a88eaf", "title": "Constraints are for methods, not data", "url": "https://brianmckenna.org/blog/constraints_are_for_methods", "published_at": "2017-11-22T00:00:00+00:00" }, { "id": "01a08759-43f0-716b-9649-80417407c6b7", "title": "10x Engineers were the Silver Bullet", "url": "https://brianmckenna.org/blog/softwerewolves", "published_at": "2017-11-21T00:00:00+00:00" }, { "id": "01a08759-43f0-716b-9649-804174f7b17d", "title": "Tool Subsumption and Silver Bullets", "url": "https://brianmckenna.org/blog/tool_subsumption", "published_at": "2017-10-09T00:00:00+00:00" }, { "id": "01a08759-43f0-716b-9649-80417577b0ce", "title": "Haskell on Android using Eta", "url": "https://brianmckenna.org/blog/eta_android", "published_at": "2017-05-23T00:00:00+00:00" }, { "id": "01a08759-43f0-716b-9649-8041765b425a", "title": "Running Unpatched Binaries on NixOS", "url": "https://brianmckenna.org/blog/running_binaries_on_nixos", "published_at": "2017-03-22T00:00:00+00:00" }, { "id": "01a08759-43f0-716b-9649-8041765d6fc2", "title": "How to stop functional programming", "url": "https://brianmckenna.org/blog/howtostopfp", "published_at": "2016-02-23T00:00:00+00:00" }, { "id": "01a08759-43f0-716b-9649-804177280c74", "title": "Don't write code on line #45", "url": "https://brianmckenna.org/blog/line45", "published_at": "2016-02-22T00:00:00+00:00" }, { "id": "01a08759-43f0-716b-9649-80417740e0d1", "title": "Optimising the PureScript Compiler", "url": "https://brianmckenna.org/blog/optimising_the_purescript_compiler", "published_at": "2015-06-11T00:00:00+00:00" }, { "id": "01a08759-43f0-716b-9649-8041776f4c9d", "title": "QuickChecking non-Haskell Code", "url": "https://brianmckenna.org/blog/crosscheck", "published_at": "2015-03-10T00:00:00+00:00" }, { "id": "01a08759-43f0-716b-9649-804177c1f773", "title": "This Blog Uses Idris", "url": "https://brianmckenna.org/blog/idris_blog", "published_at": "2015-02-12T00:00:00+00:00" }, { "id": "01a08759-43f0-716b-9649-804177e4ccea", "title": "EvenOdd in Agda, Idris, Haskell, Scala", "url": "https://brianmckenna.org/blog/evenodd_agda_idris_haskell_scala", "published_at": "2014-01-23T00:00:00+00:00" }, { "id": "01a08759-43f0-716b-9649-804177fe8fdc", "title": "Idris as a Library", "url": "https://brianmckenna.org/blog/idris_library", "published_at": "2013-12-22T00:00:00+00:00" }, { "id": "01a08759-43f0-716b-9649-8041787eaacc", "title": "Scala Code Linting via WartRemover 0.4", "url": "https://brianmckenna.org/blog/wartremover_point_four", "published_at": "2013-09-16T00:00:00+00:00" }, { "id": "01a08759-43f0-716b-9649-804179034661", "title": "Odd Odd Even Agda Proof, Take (suc (suc zero))", "url": "https://brianmckenna.org/blog/plus_equals_even_take_2", "published_at": "2013-08-03T00:00:00+00:00" }, { "id": "01a08759-43f1-7002-ab83-5b4c6fe9d8db", "title": "Bottom-up Type Annotation with the Cofree Comonad", "url": "https://brianmckenna.org/blog/type_annotation_cofree", "published_at": "2013-07-06T00:00:00+00:00" }, { "id": "01a08759-43f1-7002-ab83-5b4c708693ab", "title": "Row Polymorphism Isn't Subtyping", "url": "https://brianmckenna.org/blog/row_polymorphism_isnt_subtyping", "published_at": "2013-05-05T00:00:00+00:00" }, { "id": "01a08759-43f1-7002-ab83-5b4c7124716f", "title": "Read-only Guest tmux Sessions", "url": "https://brianmckenna.org/blog/guest_tmux", "published_at": "2013-04-29T00:00:00+00:00" }, { "id": "01a08759-43f1-7002-ab83-5b4c71b772a1", "title": "Category Theory for Promises/A+", "url": "https://brianmckenna.org/blog/category_theory_promisesaplus", "published_at": "2013-04-09T00:00:00+00:00" }, { "id": "01a08759-43f1-7002-ab83-5b4c72126aff", "title": "Applicative Validation in JavaScript", "url": "https://brianmckenna.org/blog/applicative_validation_js", "published_at": "2013-03-27T00:00:00+00:00" }, { "id": "01a08759-43f1-7002-ab83-5b4c73009a5e", "title": "Haskell Buildpack for Heroku", "url": "https://brianmckenna.org/blog/haskell_buildpack_heroku", "published_at": "2012-11-07T00:00:00+00:00" }, { "id": "01a08759-43f1-7002-ab83-5b4c7367b200", "title": "bilby.js - QuickCheck", "url": "https://brianmckenna.org/blog/bilby_quickcheck", "published_at": "2012-09-16T00:00:00+00:00" }, { "id": "01a08759-43f1-7002-ab83-5b4c73e82bef", "title": "Introducing bilby.js", "url": "https://brianmckenna.org/blog/bilby", "published_at": "2012-09-09T00:00:00+00:00" }, { "id": "01a08759-43f1-7002-ab83-5b4c743044fe", "title": "Roy - Constraint Typing", "url": "https://brianmckenna.org/blog/roy_constraint_typing", "published_at": "2012-09-02T00:00:00+00:00" }, { "id": "01a08759-43f1-7002-ab83-5b4c7482a3a0", "title": "GLL Combinators - Whitespace Fix", "url": "https://brianmckenna.org/blog/gll_combinators_whitespace", "published_at": "2012-08-26T00:00:00+00:00" }, { "id": "01a08759-43f1-7002-ab83-5b4c74c7af81", "title": "Dripper git support", "url": "https://brianmckenna.org/blog/dripper_git", "published_at": "2012-08-19T00:00:00+00:00" }, { "id": "01a08759-43f1-7002-ab83-5b4c75946c2d", "title": "ScalaSyd - Monad Transformers", "url": "https://brianmckenna.org/blog/scalasyd_monad_transformers", "published_at": "2012-08-12T00:00:00+00:00" }, { "id": "01a08759-43f1-7002-ab83-5b4c765e52b5", "title": "OSXMonad using StackSet", "url": "https://brianmckenna.org/blog/osxmonad_stacks", "published_at": "2012-08-05T00:00:00+00:00" }, { "id": "01a08759-43f1-7002-ab83-5b4c76da7769", "title": "OSXMonad as an XMonad library", "url": "https://brianmckenna.org/blog/osxmonad_library", "published_at": "2012-07-29T00:00:00+00:00" }, { "id": "01a08759-43f1-7002-ab83-5b4c777405d6", "title": "OS X Tiling Window Manager", "url": "https://brianmckenna.org/blog/osx_tiling_window_manager", "published_at": "2012-07-22T00:00:00+00:00" }, { "id": "01a08759-43f1-7002-ab83-5b4c779229f2", "title": "JavaScript ad hoc single dispatch library", "url": "https://brianmckenna.org/blog/js_adhoc_single_dispatch", "published_at": "2012-07-15T00:00:00+00:00" }, { "id": "01a08759-43f1-7002-ab83-5b4c7853fcfc", "title": "SpainJS", "url": "https://brianmckenna.org/blog/spainjs_roy", "published_at": "2012-07-08T00:00:00+00:00" }, { "id": "01a08759-43f1-7002-ab83-5b4c78fe90e4", "title": "CraftyJS running character demo", "url": "https://brianmckenna.org/blog/craftyjs_runner", "published_at": "2012-07-01T00:00:00+00:00" }, { "id": "01a08759-43f1-7002-ab83-5b4c79243782", "title": "Foldable1/Traverse1 for scalaz", "url": "https://brianmckenna.org/blog/scalaz_foldable1", "published_at": "2012-06-24T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb366a08bb", "title": "Using ScalaCheck with Akka and Specs2", "url": "https://brianmckenna.org/blog/akka_scalacheck_specs2", "published_at": "2012-06-17T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb372311d4", "title": "Roy - IEEE Article", "url": "https://brianmckenna.org/blog/roy_ieee", "published_at": "2012-06-10T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb375867e8", "title": "GovHack 2012", "url": "https://brianmckenna.org/blog/govhack_2012", "published_at": "2012-06-03T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb37dcbe6c", "title": "Naggly", "url": "https://brianmckenna.org/blog/naggly", "published_at": "2012-05-27T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb37e2d23b", "title": "Haskell on Heroku", "url": "https://brianmckenna.org/blog/haskell_on_heroku", "published_at": "2012-05-20T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb380b6f47", "title": "Roy - Jasmine tests", "url": "https://brianmckenna.org/blog/roy_jasmine_tests", "published_at": "2012-05-13T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb38637beb", "title": "Roy - Type-class function constraints", "url": "https://brianmckenna.org/blog/roy_type_classes_functions", "published_at": "2012-05-06T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb38d69811", "title": "Roy - Initial Source Maps", "url": "https://brianmckenna.org/blog/roy_sourcemaps", "published_at": "2012-04-29T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb38f31a2e", "title": "Roy - Type-classes and how they fix primitives", "url": "https://brianmckenna.org/blog/roy_type_classes", "published_at": "2012-04-22T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb39d2a6f5", "title": "Roy - Highlighting on Website", "url": "https://brianmckenna.org/blog/roy_site_highlighting", "published_at": "2012-04-15T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb39e6c2fe", "title": "Roy - CLI Compile Browser Modules", "url": "https://brianmckenna.org/blog/roy_cli_browser_modules", "published_at": "2012-03-25T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb3a63ebcf", "title": "Roy - Modules in master", "url": "https://brianmckenna.org/blog/roy_modules_master", "published_at": "2012-03-18T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb3ae951e3", "title": "Roy - Breaking Changes", "url": "https://brianmckenna.org/blog/roy_breaking_changes", "published_at": "2012-03-11T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb3bc01528", "title": "Ray - Roy on Play", "url": "https://brianmckenna.org/blog/ray", "published_at": "2012-03-04T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb3c05c4eb", "title": "Diabetes Fundraiser Poster", "url": "https://brianmckenna.org/blog/diabetes_poster", "published_at": "2012-02-26T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb3cf728f2", "title": "Roy - fp-syd", "url": "https://brianmckenna.org/blog/fpsyd_presentation_roy", "published_at": "2012-02-19T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb3d2ac5a4", "title": "Roy - REPL Improvements", "url": "https://brianmckenna.org/blog/roy_repl_improvements", "published_at": "2012-02-12T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb3d2b490f", "title": "Roy - DOM Tests", "url": "https://brianmckenna.org/blog/roy_dom", "published_at": "2012-02-05T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb3e059832", "title": "Roy - Browser Modules", "url": "https://brianmckenna.org/blog/roy_browser_modules", "published_at": "2012-01-29T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb3eb7fc0e", "title": "Roy - node.js Modules", "url": "https://brianmckenna.org/blog/roy_node_modules", "published_at": "2012-01-22T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb3fa8ffd0", "title": "Roy - Type System Documentation", "url": "https://brianmckenna.org/blog/roy_docs_types", "published_at": "2012-01-15T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb4030c606", "title": "Type Errors as Warnings", "url": "https://brianmckenna.org/blog/type_errors_as_warnings", "published_at": "2012-01-11T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb40d3246f", "title": "Roy - Documentation", "url": "https://brianmckenna.org/blog/roy_docs", "published_at": "2012-01-08T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb40ea4588", "title": "Roy - Literate Roy", "url": "https://brianmckenna.org/blog/literate_roy", "published_at": "2012-01-01T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb4198cc29", "title": "Rome - Roy as Chrome Extension", "url": "https://brianmckenna.org/blog/roy_chrome_rome", "published_at": "2011-12-25T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb420ad76a", "title": "Roy - Separate Compilation", "url": "https://brianmckenna.org/blog/roy_separate_compilation", "published_at": "2011-12-18T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb42af5e92", "title": "Roy - Pretty Printing", "url": "https://brianmckenna.org/blog/roy_pretty_printing", "published_at": "2011-12-11T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb435fe70c", "title": "Roy - Recursive Data", "url": "https://brianmckenna.org/blog/roy_recursive_data", "published_at": "2011-12-04T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb443a2bad", "title": "Roy's Big Week", "url": "https://brianmckenna.org/blog/big_roy_news", "published_at": "2011-11-27T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb4482799e", "title": "SydJS Presentation on altJS", "url": "https://brianmckenna.org/blog/sydjs_presentation_altjs", "published_at": "2011-11-20T00:00:00+00:00" }, { "id": "01a08759-43f2-725f-ba76-32fb457c0676", "title": "BigText Slideshow", "url": "https://brianmckenna.org/blog/bigtext_slideshow", "published_at": "2011-11-13T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc1095b95ac", "title": "S-expression Compiler in Scala", "url": "https://brianmckenna.org/blog/sexp_scala", "published_at": "2011-11-06T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc109a7992b", "title": "Launch48 Sydney", "url": "https://brianmckenna.org/blog/launch48", "published_at": "2011-10-30T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc109ee3e7d", "title": "Roy - Type Aliases", "url": "https://brianmckenna.org/blog/roy_aliases", "published_at": "2011-10-23T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc10ae5fd88", "title": "Roy - Tuples", "url": "https://brianmckenna.org/blog/roy_tuples", "published_at": "2011-10-16T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc10b177ef0", "title": "Roy - Deep Pattern Matching", "url": "https://brianmckenna.org/blog/roy_deep_matching", "published_at": "2011-10-09T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc10b499828", "title": "Roy Improvements", "url": "https://brianmckenna.org/blog/roy_improvements", "published_at": "2011-10-02T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc10bfe01a3", "title": "Time Lapse", "url": "https://brianmckenna.org/blog/time_lapse", "published_at": "2011-09-25T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc10c799bbe", "title": "PyWeek #13", "url": "https://brianmckenna.org/blog/pyweek_13", "published_at": "2011-09-18T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc10cc1114d", "title": "JReversePro", "url": "https://brianmckenna.org/blog/jrevpro", "published_at": "2011-09-11T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc10d2aeec6", "title": "Cloud9 User Script", "url": "https://brianmckenna.org/blog/cloud9_user_script", "published_at": "2011-09-04T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc10dfe0464", "title": "PyWeek - 8 pixels and Python reloading", "url": "https://brianmckenna.org/blog/pyweek_8px_reload", "published_at": "2011-08-28T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc10ea53ea2", "title": "Odd Odd Even Agda Proof", "url": "https://brianmckenna.org/blog/plus_equals_even", "published_at": "2011-08-21T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc10f222f49", "title": "GDD HTML5 Challenge", "url": "https://brianmckenna.org/blog/html5xgdd", "published_at": "2011-08-14T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc10f418d55", "title": "Ringneck - PASM to JS", "url": "https://brianmckenna.org/blog/ringneck", "published_at": "2011-08-07T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc1102277d6", "title": "Climacs", "url": "https://brianmckenna.org/blog/climacs", "published_at": "2011-07-31T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc110a3da9d", "title": "Escaping Callback Hell with ClojureScript macros", "url": "https://brianmckenna.org/blog/cps_transform_js", "published_at": "2011-07-24T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc111166613", "title": "Roy - Tests (finally)", "url": "https://brianmckenna.org/blog/roy_tests", "published_at": "2011-07-17T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc1117f78b1", "title": "Learn Nintendo DS a Haskell", "url": "https://brianmckenna.org/blog/learn_nintendo_ds_a_haskell", "published_at": "2011-07-10T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc1120340a3", "title": "Roy - Meta-programming and a REPL", "url": "https://brianmckenna.org/blog/roy_repl_macros", "published_at": "2011-07-03T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc112bb1227", "title": "Roy - Standard Library", "url": "https://brianmckenna.org/blog/roy_standard_library", "published_at": "2011-06-26T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc113972255", "title": "Roy - Monad Syntax", "url": "https://brianmckenna.org/blog/roy_monad_syntax", "published_at": "2011-06-19T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc113c28fd0", "title": "Roy - Structural Typing", "url": "https://brianmckenna.org/blog/roy_structural", "published_at": "2011-06-12T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc114223845", "title": "Roy - Simple Pattern Matching", "url": "https://brianmckenna.org/blog/roy_pattern_matching", "published_at": "2011-06-05T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc114ecb7a9", "title": "Roy", "url": "https://brianmckenna.org/blog/roy", "published_at": "2011-05-29T00:00:00+00:00" }, { "id": "01a08759-43f3-726b-82de-5fc11588b5d4", "title": "Simple Lexer in JavaScript", "url": "https://brianmckenna.org/blog/js_lexer", "published_at": "2011-05-22T00:00:00+00:00" }, { "id": "01a08759-43f4-71eb-b68f-c01e6331da98", "title": "Type Inference in JavaScript", "url": "https://brianmckenna.org/blog/js_type_inference", "published_at": "2011-05-15T00:00:00+00:00" }, { "id": "01a08759-43f4-71eb-b68f-c01e6365bae2", "title": "Minimalist Android Scala Environment", "url": "https://brianmckenna.org/blog/minimalist_android_scala_env", "published_at": "2010-12-28T00:00:00+00:00" }, { "id": "01a08759-43f4-71eb-b68f-c01e6437b0b5", "title": "Haskell: From a Parallel Perspective", "url": "https://brianmckenna.org/blog/haskell_parallel_perspective", "published_at": "2010-10-13T00:00:00+00:00" }, { "id": "01a08759-43f4-71eb-b68f-c01e64ae02e1", "title": "When I was 3...", "url": "https://brianmckenna.org/blog/3yr_old_brian", "published_at": "2010-09-06T00:00:00+00:00" }, { "id": "01a08759-43f4-71eb-b68f-c01e64b9181e", "title": "Wanted: Unparallel project in need of good optimisation", "url": "https://brianmckenna.org/blog/wanted_unparallel_project", "published_at": "2010-07-29T00:00:00+00:00" } ] posts Claim your blog
Back to BAM Weblog
Blog · corpus.blog/blogs/brianmckenna.org/posts

BAM Weblog

brianmckenna.org

2025

2024

2023

2018

2017

2016

2015

2014

2013

2012

2011

29 May 2011

2010