41554 blogs · [ { "id": "01a0871f-6445-7184-8ddd-b764b3bd336d", "title": "One month with Github Copilot", "url": "https://adambard.com/blog/one-month-with-copilot/", "published_at": "2023-03-31T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764b47eeaf5", "title": "Transitioning Later for Reddit from Docker Machines to Digital Ocean Kubernetes", "url": "https://adambard.com/blog/transitioning-from-docker-machines-to-kubernetes/", "published_at": "2020-07-26T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764b4b7e1a6", "title": "Getting a handle on Reduce", "url": "https://adambard.com/blog/getting-a-handle-on-reduce/", "published_at": "2018-12-17T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764b5052e14", "title": "Programatically Liquidating my Steam Inventory", "url": "https://adambard.com/blog/programatically-liquidating-my-steam-inventory/", "published_at": "2018-05-23T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764b5b8db25", "title": "One-box stream processing with CSP", "url": "https://adambard.com/blog/stream-processing-core-async/", "published_at": "2018-02-18T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764b68f37b3", "title": "Running a Side Business as a Programmer: The story of Later for Reddit", "url": "https://adambard.com/blog/later-for-reddit-in-review/", "published_at": "2017-12-19T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764b6b6803a", "title": "Javascript FP design pattern: Binding functions", "url": "https://adambard.com/blog/javascript-design-pattern-binding-functions/", "published_at": "2017-09-16T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764b7a4c597", "title": "Bucklescript vs Elm vs Typescript: Typed Javascript showdown!", "url": "https://adambard.com/blog/reason-vs-elm-vs-typescript/", "published_at": "2017-09-03T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764b89b9d2b", "title": "OCaml for the impatient", "url": "https://adambard.com/blog/getting-started-with-ocaml/", "published_at": "2017-08-28T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764b9656358", "title": "Best Practices for Javascript Library Versioning", "url": "https://adambard.com/blog/on-library-versioning/", "published_at": "2017-08-13T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764b96862e3", "title": "Domain modelling with clojure.spec", "url": "https://adambard.com/blog/domain-modeling-with-clojure-spec/", "published_at": "2017-08-06T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764b9fd879e", "title": "What programming language should I learn? (2017 edition)", "url": "https://adambard.com/blog/what-programming-language/", "published_at": "2017-03-23T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764babbb933", "title": "On Advice (featuring just one piece of it)", "url": "https://adambard.com/blog/ideas/", "published_at": "2016-11-04T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764bacb1f82", "title": "Basic site monitoring with Riemann", "url": "https://adambard.com/blog/basic-website-monitoring-with-riemann/", "published_at": "2016-08-23T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764bae85b1e", "title": "What’s in a namespace?", "url": "https://adambard.com/blog/whats-in-a-namespace/", "published_at": "2016-04-15T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764bbb5d080", "title": "Write and deploy your own self-hosted Readability clone", "url": "https://adambard.com/blog/self-hosted-readability-on-heroku-with-nodejs/", "published_at": "2016-03-29T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764bbf36644", "title": "Composible Architecture: A real-world example.", "url": "https://adambard.com/blog/composible-architecture-a-real-world-example/", "published_at": "2016-03-27T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764bcab2379", "title": "React.js in the small", "url": "https://adambard.com/blog/react-in-the-small/", "published_at": "2016-03-26T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764bcd355b0", "title": "The Web is (finally) a mature platform", "url": "https://adambard.com/blog/the-web-is-a-mature-platform/", "published_at": "2016-03-19T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764bd97ca32", "title": "Clojure SQL Migration Libaries", "url": "https://adambard.com/blog/clojure-migration-libraries/", "published_at": "2016-02-28T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764bdf8f95b", "title": "Plotting Reddit post frequencies with d3", "url": "https://adambard.com/blog/plotting-reddit-post-frequencies-with-d3/", "published_at": "2016-02-20T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764be8352e8", "title": "Failjure: Exception-free error handling for Clojure", "url": "https://adambard.com/blog/introducing-failjure/", "published_at": "2016-01-30T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764beaccc4d", "title": "Clojurescript Boot Live-Reload Weasel Vim-Fireplace Piggieback", "url": "https://adambard.com/blog/clojurescript-boot-fireplace/", "published_at": "2016-01-11T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764bede58b3", "title": "Deploying a Clojure web app with Pallet", "url": "https://adambard.com/blog/deploying-a-clojure-project-with-pallet/", "published_at": "2016-01-04T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764bf48da52", "title": "Clojure SQL library showdown", "url": "https://adambard.com/blog/clojure-sql-libs-compared/", "published_at": "2015-12-28T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764bf769690", "title": "Password Authentication/Authorization for Clojure", "url": "https://adambard.com/blog/buddy-password-auth-example/", "published_at": "2015-12-17T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764bffee815", "title": "Clojure auth with buddy", "url": "https://adambard.com/blog/clojure-auth-with-buddy/", "published_at": "2015-12-15T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764c0171edc", "title": "Using Letsencrypt with Nginx", "url": "https://adambard.com/blog/using-letsencrypt-with-nginx/", "published_at": "2015-12-04T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764c0a5f971", "title": "Introducing Unpythonic", "url": "https://adambard.com/blog/introducing-unpython/", "published_at": "2015-10-19T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764c18ed38e", "title": "Writing Friendlier Clojure", "url": "https://adambard.com/blog/write-friendlier-clojure/", "published_at": "2015-10-01T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764c215b72e", "title": "React.js for incremental text games", "url": "https://adambard.com/blog/incremental-text-games/", "published_at": "2015-07-12T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764c29c9603", "title": "Ripping off Circular.io in Clojure", "url": "https://adambard.com/blog/ripping-off-circular/", "published_at": "2015-06-15T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764c32ca2bc", "title": "Easy custom auth in Clojure with Friend", "url": "https://adambard.com/blog/easy-auth-with-friend/", "published_at": "2015-06-10T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764c3314465", "title": "Throwing together a weekend project with boot-clj", "url": "https://adambard.com/blog/throwing-together-worldclassifiedlist/", "published_at": "2015-06-08T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764c3cb2fae", "title": "Building a graph-powered suggestion engine for redditlater with Loom", "url": "https://adambard.com/blog/building-a-suggestion-engine-for-redditlater/", "published_at": "2015-06-07T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764c3fd94ad", "title": "My first time using boot over leiningen", "url": "https://adambard.com/blog/i-finally-get-boot/", "published_at": "2015-06-05T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764c4b8647a", "title": "My favorite old webdev tools", "url": "https://adambard.com/blog/webdev-tools-rundown-2015/", "published_at": "2015-04-09T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764c505074b", "title": "Interfacing Frege and Ring", "url": "https://adambard.com/blog/interfacing-frege-and-ring/", "published_at": "2014-12-21T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764c51f29be", "title": "Implementing multimethods in Python", "url": "https://adambard.com/blog/implementing-multimethods-in-python/", "published_at": "2014-12-11T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764c57a6204", "title": "Functional vs Object-oriented approaches to validation", "url": "https://adambard.com/blog/oo-vs-functional-form-validation/", "published_at": "2014-12-07T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764c6189001", "title": "Back from Clojure Part 1: Python", "url": "https://adambard.com/blog/back-from-clojure-python/", "published_at": "2014-12-01T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764c693e829", "title": "My life as a homeless transient.", "url": "https://adambard.com/blog/life-as-a-homeless-transient/", "published_at": "2014-11-27T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764c70b548b", "title": "Clojure is still not for geniuses", "url": "https://adambard.com/blog/clojure-is-not-even-for-clever-people/", "published_at": "2014-11-24T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764c7d682e1", "title": "Clojure is not for geniuses", "url": "https://adambard.com/blog/clojure-is-not-for-geniuses/", "published_at": "2014-11-18T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764c84993ae", "title": "What language should you learn?", "url": "https://adambard.com/blog/what-language-should-you-learn/", "published_at": "2014-10-30T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764c8cfd6dc", "title": "A clojure cup retrospective", "url": "https://adambard.com/blog/clojure-cup-retrospective/", "published_at": "2014-09-29T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764c927d3a4", "title": "Compojure apps, in the style of Sinatra", "url": "https://adambard.com/blog/sinatra-docs-in-clojure/", "published_at": "2014-09-05T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764c9e4efaf", "title": "Deploying a Clojure web app to a VPS", "url": "https://adambard.com/blog/deploying-a-clojure-web-app-on-digitalocean/", "published_at": "2014-08-28T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764ca96ad0d", "title": "Using Kotlin from your Clojure projects", "url": "https://adambard.com/blog/use-kotlin-with-clojure/", "published_at": "2014-08-23T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764caec51ae", "title": "A url shortener service in 35 lines of Clojure", "url": "https://adambard.com/blog/a-clojure-url-shortener-service/", "published_at": "2014-08-22T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764cb9de461", "title": "Using Parquet + Protobufs with Spark", "url": "https://adambard.com/blog/parquet-protobufs-spark/", "published_at": "2014-08-20T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764cc87137d", "title": "Embedded MapReduce with Flambo", "url": "https://adambard.com/blog/embedded-mapreduce-with-flambo/", "published_at": "2014-08-18T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764ccd77456", "title": "Ten reasons to use Clojure/ClojureScript on your next web dev project", "url": "https://adambard.com/blog/ten-reasons-to-use-clojure/", "published_at": "2014-08-15T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764cd65c91e", "title": "A simple Clojurescript app", "url": "https://adambard.com/blog/a-simple-clojurescript-app/", "published_at": "2014-08-13T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764cde93e63", "title": "Top Github Languages of 2014 (So far)", "url": "https://adambard.com/blog/top-github-languages-2014/", "published_at": "2014-08-01T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764ceaab2ec", "title": "My Top Clojure Articles", "url": "https://adambard.com/blog/greatest-clojure-hits/", "published_at": "2014-07-07T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764cf3f8fbd", "title": "5 mistakes I made writing my first Clojure application", "url": "https://adambard.com/blog/five-mistakes-clojure-newbies-make/", "published_at": "2014-07-02T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764cfba24ab", "title": "DIY NoSQL part deux: interchangeable parts", "url": "https://adambard.com/blog/diy-nosql-revisited/", "published_at": "2014-06-30T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764cff8ba24", "title": "Java to Clojure: \"Refactoring\" refactored functionally", "url": "https://adambard.com/blog/refactoring-refactored/", "published_at": "2014-06-10T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764d0e2766f", "title": "\"DIY NoSQL\" in Clojure", "url": "https://adambard.com/blog/diy-nosql-in-clojure/", "published_at": "2014-06-02T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764d1d69e9a", "title": "The nitty-gritty of a Clojure web app", "url": "https://adambard.com/blog/how-redditlater-works/", "published_at": "2014-05-14T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764d270f025", "title": "In Defense of Coffeescript", "url": "https://adambard.com/blog/in-defense-of-coffeescript/", "published_at": "2014-04-06T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764d32c96d9", "title": "Elasticsearch Rosetta Stone", "url": "https://adambard.com/blog/elasticsearch-rosetta-stone/", "published_at": "2014-03-20T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764d42a6e75", "title": "Set up Flask with webassets", "url": "https://adambard.com/blog/fresh-flask-setup/", "published_at": "2014-02-20T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764d4619f7b", "title": "Just what does \"code as data\" mean anyway?", "url": "https://adambard.com/blog/what-is-homoiconicity/", "published_at": "2014-01-19T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764d5204d0a", "title": "The many flavors of concurrency in Clojure", "url": "https://adambard.com/blog/clojure-concurrency-smorgasbord/", "published_at": "2013-12-06T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764d5b28e47", "title": "Angular in the small", "url": "https://adambard.com/blog/angular-in-the-small/", "published_at": "2013-11-16T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764d5c3c0ef", "title": "Common Rules in Cryptography", "url": "https://adambard.com/blog/common-rules-of-cryptography/", "published_at": "2013-11-07T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764d618fcb1", "title": "What your datastore says about you", "url": "https://adambard.com/blog/what-your-datastore-says-about-you/", "published_at": "2013-10-08T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764d655d9d6", "title": "Clojure's core.typed vs Haskell", "url": "https://adambard.com/blog/core-typed-vs-haskell/", "published_at": "2013-09-29T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764d6b56469", "title": "On secure SSL: The least every developer should know", "url": "https://adambard.com/blog/the-new-ssl-basics/", "published_at": "2013-09-10T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764d7222bd7", "title": "Top Github Languages for 2013 (so far)", "url": "https://adambard.com/blog/top-github-languages-for-2013-so-far/", "published_at": "2013-08-30T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764d7f1f8f8", "title": "Fixing \"Could not generate DH keypair\" on RedditLater.com", "url": "https://adambard.com/blog/fixing-redditlater/", "published_at": "2013-08-21T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764d8b13465", "title": "3 new programming languages to watch", "url": "https://adambard.com/blog/3-languages-to-watch/", "published_at": "2013-08-06T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764d9409fed", "title": "3 Wrong Ways to Store a Password", "url": "https://adambard.com/blog/3-wrong-ways-to-store-a-password/", "published_at": "2013-07-11T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764da3bdc2b", "title": "Live development is the way of the future", "url": "https://adambard.com/blog/fireplace-dot-vim-clojures-secret-weapon/", "published_at": "2013-07-10T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764db1528df", "title": "Reducers explained (through Python)", "url": "https://adambard.com/blog/reducers-explained-through-python/", "published_at": "2013-07-07T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764dbd19daf", "title": "Learn C in Y minutes", "url": "https://adambard.com/blog/learn-c-n-y-minutes/", "published_at": "2013-06-28T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764dcc4e4c2", "title": "Learn X in Y Minutes", "url": "https://adambard.com/blog/learn-x-in-y-minutes/", "published_at": "2013-06-26T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764dcf9d38f", "title": "Learn Clojure in 15 minutes, perhaps", "url": "https://adambard.com/blog/clojure-in-15-minutes/", "published_at": "2013-06-24T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764ddad4af9", "title": "You use PHP because you don't know better.", "url": "https://adambard.com/blog/you-write-php-because-you-dont-know-better/", "published_at": "2013-06-19T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764deaa881d", "title": "Clojure.core: Batteries (almost) included", "url": "https://adambard.com/blog/clojure-batteries-included/", "published_at": "2013-06-13T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764dfa1cc43", "title": "Structured Clojure: Protocols and multimethods (oh my!)", "url": "https://adambard.com/blog/structured-clojure-protocols-and-multimethods/", "published_at": "2013-06-04T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764e03b7d7a", "title": "Improving your Clojure code with core.reducers", "url": "https://adambard.com/blog/clojure-reducers-for-mortals/", "published_at": "2013-05-27T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764e137011b", "title": "Big wins: Multi-armed bandit testing.", "url": "https://adambard.com/blog/multi-armed-bandit-testing/", "published_at": "2013-05-22T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764e1e5edc3", "title": "Idea: Device-specific screenshots (or, Abusing Retina.js on Addressbin)", "url": "https://adambard.com/blog/abusing-retina-on-addressbin/", "published_at": "2013-05-19T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764e26565cf", "title": "\"Good Enough\" error handling in Clojure", "url": "https://adambard.com/blog/acceptable-error-handling-in-clojure/", "published_at": "2013-05-13T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764e3188b43", "title": "Clojure web apps: Zero to 'Hello World' on Heroku in Clojure in 15 minutes.", "url": "https://adambard.com/blog/getting-started-with-clojure-web-apps/", "published_at": "2013-04-07T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764e3bd3de7", "title": "Why Clojure? Part 2: Effortless async by design", "url": "https://adambard.com/blog/why-clojure-part-2-async-magic/", "published_at": "2013-04-05T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764e441e2c1", "title": "Middleman + Enlive: The best thing since PHP", "url": "https://adambard.com/blog/middleman-enlive-your-new-god/", "published_at": "2013-04-02T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764e4f778d7", "title": "The same app 4 times: PHP vs Python vs Ruby vs Clojure", "url": "https://adambard.com/blog/php-ruby-python-clojure-webapps-by-example/", "published_at": "2013-03-25T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764e5241d0e", "title": "Cover Letters: Then and now", "url": "https://adambard.com/blog/cover-letters-then-and-now/", "published_at": "2013-02-28T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764e536170d", "title": "Trending: The iOS Stock Viewer that's better than the stock viewer", "url": "https://adambard.com/blog/you-need-trending/", "published_at": "2013-01-03T00:00:00+00:00" }, { "id": "01a0871f-6445-7184-8ddd-b764e591ef67", "title": "Welcome to the blog, mark III", "url": "https://adambard.com/blog/welcome-to-the-blog-mark-3/", "published_at": "2012-12-21T00:00:00+00:00" } ] posts Claim your blog
Back to Adam Bard
Blog · corpus.blog/blogs/adambard.com/posts

Adam Bard

adambard.com

2023

2020

2018

2017

2016

2015

2014

2013

2012