41554 blogs · [ { "id": "01a08742-817f-7219-a89f-a1f96b51fbd0", "title": "Destructuring with computed keys", "url": "https://blog.ambrosebs.com", "published_at": "2026-07-07T23:55:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2c9d36593", "title": "GitHub Copilot coding agent with Clojure", "url": "https://blog.ambrosebs.com/copilot-agents-clojure", "published_at": "2025-12-10T00:00:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2caa9ddb3", "title": "Optimizing syntax-quote", "url": "https://blog.ambrosebs.com/2025/04/20/optimizing-syntax-quote.html", "published_at": "2025-04-20T05:56:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2cab5f11a", "title": "Infinite rest", "url": "https://blog.ambrosebs.com/2024/07/09/infinite-rest.html", "published_at": "2024-07-09T23:46:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2cb082b95", "title": "Functional Collections and Arity Exceptions", "url": "https://blog.ambrosebs.com/2022/10/02/functional-collections-arity-exceptions.html", "published_at": "2022-10-02T03:19:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2cb97d849", "title": "Test-asserting Threads", "url": "https://blog.ambrosebs.com/2022/09/27/multithreaded-clojure-test-assertions.html", "published_at": "2022-09-27T06:15:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2cc401221", "title": "Growing macros", "url": "https://blog.ambrosebs.com/2022/09/25/growing-macros.html", "published_at": "2022-09-25T23:06:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2cd34463b", "title": "Future Memory Leaks", "url": "https://blog.ambrosebs.com/2022/09/11/futures-memory-leak.html", "published_at": "2022-09-11T00:44:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2cdfcf227", "title": "Unrolling every-pred and some-fn", "url": "https://blog.ambrosebs.com/2022/09/10/unrolling-some-fn-every-pred.html", "published_at": "2022-09-10T21:53:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2ce68db4c", "title": "A Significant clojure.test Enhancement", "url": "https://blog.ambrosebs.com/2022/09/08/clojure-test-uncaught.html", "published_at": "2022-09-08T17:23:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2ce96631f", "title": "Fun ways to break your Macros", "url": "https://blog.ambrosebs.com/2022/09/08/break-your-macros.html", "published_at": "2022-09-08T04:36:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2cf699256", "title": "Instrumenting Clojure protocols", "url": "https://blog.ambrosebs.com/2022/09/08/schema-defprotocol.html", "published_at": "2022-09-08T01:13:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2d0386623", "title": "Developing Clojure patches with Pull Requests", "url": "https://blog.ambrosebs.com/2022/08/29/developing-clojure-patches-with-pull-requests.html", "published_at": "2022-08-29T03:43:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2d094f355", "title": "Spec2 experience", "url": "https://blog.ambrosebs.com/2020/04/26/spec2-experience.html", "published_at": "2020-04-26T08:00:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2d098f7be", "title": "What are types in Clojure?", "url": "https://blog.ambrosebs.com/2020/03/30/what-type-clojure.html", "published_at": "2020-03-30T08:00:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2d148980f", "title": "Responsive blog layout", "url": "https://blog.ambrosebs.com/2019/07/23/responsive-layout.html", "published_at": "2019-07-23T08:00:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2d1a5e1b6", "title": "The Road to Typed Clojure 1.0: Part 1", "url": "https://blog.ambrosebs.com/2018/09/20/towards-typed-clj.html", "published_at": "2018-09-20T02:00:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2d1fd6645", "title": "A Typed-Macro Writer’s Toolkit", "url": "https://blog.ambrosebs.com/2018/04/20/macro-writers-toolkit.html", "published_at": "2018-04-20T08:00:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2d2c6471e", "title": "Leaning on a Garbage Collector A Little Too Hard", "url": "https://blog.ambrosebs.com/2018/04/13/how-to-merge-recursive-specs.html", "published_at": "2018-04-13T01:30:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2d3698dfa", "title": "How to generate specs for your Clojure project", "url": "https://blog.ambrosebs.com/2018/04/12/how-to-generate-your-specs.html", "published_at": "2018-04-12T01:00:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2d3f3023d", "title": "Who doesn't want unsound type systems?", "url": "https://blog.ambrosebs.com/2018/04/09/unsoundness-reply.html", "published_at": "2018-04-09T01:00:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2d4427a0d", "title": "Macros across boundaries", "url": "https://blog.ambrosebs.com/2018/04/07/gradual-macro.html", "published_at": "2018-04-07T01:30:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2d505fefa", "title": "Are unsound type systems wrong?", "url": "https://blog.ambrosebs.com/2018/04/07/unsoundness-in-untyped-types.html", "published_at": "2018-04-07T01:00:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2d5aa68f3", "title": "How I create Automatic Annotation Tools (Quals defense)", "url": "https://blog.ambrosebs.com/2018/04/04/automatic-annotations-quals.html", "published_at": "2018-04-04T08:00:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2d69b0541", "title": "Automatic Annotations: Inferring Function Types", "url": "https://blog.ambrosebs.com/2016/08/15/infer-functions.html", "published_at": "2016-08-15T08:00:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2d757ab01", "title": "Basics of automatic annotations", "url": "https://blog.ambrosebs.com/2016/08/13/runtime-infer-basics.html", "published_at": "2016-08-13T08:00:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2d76997e3", "title": "Introducing Automatic Annotations", "url": "https://blog.ambrosebs.com/2016/08/07/automatic-annotations.html", "published_at": "2016-08-07T08:00:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2d8143599", "title": "Gradual typing for Clojure", "url": "https://blog.ambrosebs.com/2015/06/19/gradual-typing.html", "published_at": "2015-06-19T08:00:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2d8db984e", "title": "Typed DOM interactions with Typed Clojurescript: Part 1", "url": "https://blog.ambrosebs.com/2013/10/11/typed-dom-interactions.html", "published_at": "2013-10-11T00:00:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2d9abcbc5", "title": "Typed Clojurescript Playground", "url": "https://blog.ambrosebs.com/2013/10/06/preview-typed-clojurescript.html", "published_at": "2013-10-06T00:00:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2da7bfe63", "title": "Typed Clojure prevents Null Pointer Exceptions", "url": "https://blog.ambrosebs.com/2013/10/04/null-pointer.html", "published_at": "2013-10-04T08:00:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2db19fb60", "title": "Red/Black tree rebalancing invariants (with plain maps)", "url": "https://blog.ambrosebs.com/2013/10/03/rbt-tree-preview.html", "published_at": "2013-10-03T00:00:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2db6964aa", "title": "The link between CinC and Typed Clojure", "url": "https://blog.ambrosebs.com/2013/10/01/link-cinc-typed-clojure.html", "published_at": "2013-10-01T00:00:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2dbc5ec0b", "title": "Funding full-time development on Typed Clojure{Script}", "url": "https://blog.ambrosebs.com/2013/09/28/crowdfunding.html", "published_at": "2013-09-28T23:00:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2dc2dd163", "title": "Simple local reasoning with assertions", "url": "https://blog.ambrosebs.com/2013/09/08/simple-reasoning-assertions-core-typed.html", "published_at": "2013-09-08T23:00:00+00:00" }, { "id": "01a08742-8183-7113-a7ba-cbe2dc8f1310", "title": "Using core.typed at the REPL", "url": "https://blog.ambrosebs.com/typed/clojure,/core.typed,/clojure/2013/09/03/core-typed-repl.html", "published_at": "2013-09-03T12:00:00+00:00" }, { "id": "01a08742-819f-7033-b47a-bff05b31d623", "title": "Using polymorphic higher-order functions", "url": "https://blog.ambrosebs.com/typed/clojure,/core.typed,/clojure/2013/09/03/polymorphic-hof.html", "published_at": "2013-09-03T00:00:00+00:00" }, { "id": "01a08742-819f-7033-b47a-bff05ba77823", "title": "Invariants via immutability", "url": "https://blog.ambrosebs.com/typed/clojure,/core.typed,/clojure/2013/08/16/first-steps-with-core-typed.html", "published_at": "2013-08-16T16:22:50+00:00" } ] posts Claim your blog
Back to blog.ambrosebs.com
Blog · corpus.blog/blogs/blog.ambrosebs.com/posts

blog.ambrosebs.com

blog.ambrosebs.com

2026

2025

2024

2022

2020

2019

2018

2016

2015

2013