# Adam Bard

Recent content in Adam Bard writes about making websites on Adam Bard, Handsome Web Developer

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## One month with Github Copilot

DevFeed: [One month with Github Copilot](<https://devfeed.tech/articles/one-month-with-github-copilot-32147.md>)

Original publisher: [Read original article](<https://adambard.com/blog/one-month-with-copilot/>)

Published: 2023-03-31T00:00:00Z

Content type: article

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [GitHub Copilot](<https://devfeed.tech/topics/github-copilot.md>), [Code](<https://devfeed.tech/topics/code.md>), [ide](<https://devfeed.tech/topics/ide.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>)

Tags: [autocomplete](<https://devfeed.tech/tags/autocomplete.md>), [code](<https://devfeed.tech/tags/code.md>), [copilot](<https://devfeed.tech/tags/copilot.md>), [developer](<https://devfeed.tech/tags/developer.md>), [function](<https://devfeed.tech/tags/function.md>), [github-copilot](<https://devfeed.tech/tags/github-copilot.md>), [ide](<https://devfeed.tech/tags/ide.md>), [if-statement](<https://devfeed.tech/tags/if-statement.md>), [intellisense](<https://devfeed.tech/tags/intellisense.md>), [patterns](<https://devfeed.tech/tags/patterns.md>), [usability](<https://devfeed.tech/tags/usability.md>)

### AI overview

The author reviews a month of using GitHub Copilot, describing it as an IDE-based coding assistant that generates fast suggestions from function names, docstrings, control-flow statements, and short cues. The article highlights its ability to complete larger code patterns, document functions, and generate example usage, while noting that its output may lack nuance and often needs touchups.

### Source excerpt

I've been trialling Github Copilot for some weeks now, and so far I've been very impressed. It's clear to me that this and similar tools will become a permanent part of many programmers' toolkits (at least until the AI gets so clever that it obviates our jobs completely).

## Transitioning Later for Reddit from Docker Machines to Digital Ocean Kubernetes

DevFeed: [Transitioning Later for Reddit from Docker Machines to Digital Ocean Kubernetes](<https://devfeed.tech/articles/transitioning-later-for-reddit-from-docker-machines-to-digital-ocean-kubernetes-32168.md>)

Original publisher: [Read original article](<https://adambard.com/blog/transitioning-from-docker-machines-to-kubernetes/>)

Published: 2020-07-26T00:00:00Z

Content type: tutorial

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [Kubernetes](<https://devfeed.tech/topics/kubernetes.md>), [migration](<https://devfeed.tech/topics/migration.md>), [Docker](<https://devfeed.tech/topics/docker.md>), [Digital Ocean](<https://devfeed.tech/topics/digital-ocean.md>), [Deployment](<https://devfeed.tech/topics/deployment.md>), [Ubuntu](<https://devfeed.tech/topics/ubuntu.md>)

Tags: [deployment](<https://devfeed.tech/tags/deployment.md>), [digital-ocean](<https://devfeed.tech/tags/digital-ocean.md>), [docker](<https://devfeed.tech/tags/docker.md>), [kubernetes](<https://devfeed.tech/tags/kubernetes.md>), [migration](<https://devfeed.tech/tags/migration.md>), [ubuntu](<https://devfeed.tech/tags/ubuntu.md>)

### AI overview

A writeup of migrating Later for Reddit from docker-machine-based infrastructure to DigitalOcean's hosted Kubernetes service. It describes the migration's motivations, including aging infrastructure, disk-space issues, an Ubuntu 16.04 upgrade, deployment workflow concerns, and the benefits the author expects from Kubernetes.

### Source excerpt

I recently completed a migration from my old docker-machine-based infrastructure (so 2016!) to Digital Ocean's hosted kubernetes service. The bulk of the work was completed in a single evening. It went almost seamlessly, but not so seamlessly that I wasn't able to learn a few things. The goal of this writeup is not to serve as comprehensive documentation, but hopefully you'll take away some ideas about how to get your own setup rolling.

## Getting a handle on Reduce

DevFeed: [Getting a handle on Reduce](<https://devfeed.tech/articles/getting-a-handle-on-reduce-32126.md>)

Original publisher: [Read original article](<https://adambard.com/blog/getting-a-handle-on-reduce/>)

Published: 2018-12-17T00:00:00Z

Content type: tutorial

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Data structures](<https://devfeed.tech/topics/data-structures.md>), [React](<https://devfeed.tech/topics/react.md>)

Tags: [data-structures](<https://devfeed.tech/tags/data-structures.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [programming](<https://devfeed.tech/tags/programming.md>), [react](<https://devfeed.tech/tags/react.md>), [redux](<https://devfeed.tech/tags/redux.md>)

### AI overview

An approachable introduction to the higher-order function reduce, also known as fold or aggregate. The article explains how reduce relates to functional programming, immutable data structures, loops, list comprehensions, React, and Redux.

### Source excerpt

Although traditional algol-inspired languages remain dominant, over the past decade or so, functional programming techniques utilizing immutable data structures have seen widespread adoption in a variety of domains. From React and friends on the frontend to Map-Reduce and the vast ecosystem of thus-inspired data warehousing systems that power some of the world's largest software applications, the ability to navigate such applications is now a must-have skill for many programmers. The subject of today's article is a higher-order function called reduce, also known as fold, aggregate, and others. Reduce is a fundamentally useful tool, but I find that many developers have trouble grasping and using it. My hope here is to make an approachable introduction to reduce.

## Programmatically Liquidating a Steam Inventory

DevFeed: [Programmatically Liquidating a Steam Inventory](<https://devfeed.tech/articles/programatically-liquidating-my-steam-inventory-32152.md>)

Original publisher: [Read original article](<https://adambard.com/blog/programatically-liquidating-my-steam-inventory/>)

Published: 2018-05-23T00:00:00Z

Content type: tutorial

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [Script](<https://devfeed.tech/topics/script.md>), [Authentication](<https://devfeed.tech/topics/authentication.md>), [Cookies](<https://devfeed.tech/topics/cookies.md>), [GitHub](<https://devfeed.tech/topics/github.md>), [API](<https://devfeed.tech/topics/api.md>)

Tags: [authentication](<https://devfeed.tech/tags/authentication.md>), [code](<https://devfeed.tech/tags/code.md>), [cookies](<https://devfeed.tech/tags/cookies.md>), [github](<https://devfeed.tech/tags/github.md>), [script](<https://devfeed.tech/tags/script.md>)

### AI overview

The article documents a script that automates selling items from a Steam inventory. It describes the authentication flow, inventory and item requests, price checks, sales process, and use of persistent cookies because Steam does not provide a publicly documented API for this task.

### Source excerpt

I don't know about you, but every so often my Steam Inventory gets a bit out of control. I have no use for Don't Starve trading cards, but it's not really worth my time to individually sell each item for a few cents. However, what is worth my time, apparently, is creating a script to do it for me. This turned out to be quite a winding road, which I've documented here.

## One-box stream processing with CSP

DevFeed: [One-box stream processing with CSP](<https://devfeed.tech/articles/one-box-stream-processing-with-csp-32160.md>)

Original publisher: [Read original article](<https://adambard.com/blog/stream-processing-core-async/>)

Published: 2018-02-18T00:00:00Z

Content type: tutorial

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [streaming-data-processing](<https://devfeed.tech/topics/streaming-data-processing.md>), [Clojure](<https://devfeed.tech/topics/clojure.md>), [stream-processing](<https://devfeed.tech/topics/stream-processing.md>), [Concurrent Programming](<https://devfeed.tech/topics/concurrent-programming.md>), [distributed-systems](<https://devfeed.tech/topics/distributed-systems.md>)

Tags: [clojure](<https://devfeed.tech/tags/clojure.md>), [concurrent](<https://devfeed.tech/tags/concurrent.md>), [core-async](<https://devfeed.tech/tags/core-async.md>), [coroutine](<https://devfeed.tech/tags/coroutine.md>), [distributed-computing](<https://devfeed.tech/tags/distributed-computing.md>), [distributed-system](<https://devfeed.tech/tags/distributed-system.md>), [flink](<https://devfeed.tech/tags/flink.md>), [spark](<https://devfeed.tech/tags/spark.md>), [stream](<https://devfeed.tech/tags/stream.md>), [stream-processing](<https://devfeed.tech/tags/stream-processing.md>)

### AI overview

This article presents a small-scale stream-processing architecture in Clojure using core.async and component libraries. It describes modular components connected by asynchronous queues and explains how stream-processing design principles can support reusable, loosely coupled systems without requiring a distributed stream processor.

### Source excerpt

If you're like me (that is, employed by an ad tech company), stream processing is usually associated with frameworks like Storm, Flink, Spark Streaming, and other such solutions. However, a lot of real-life software can be described as stream processing - data comes in one end, is transformed or aggregated, and goes somewhere else. Many of these workloads don't justify the overhead of a stream processor, but that doesn't mean they can't benefit from some of the lessons of stream processing systems.

## Running a Side Business as a Programmer: The story of Later for Reddit

DevFeed: [Running a Side Business as a Programmer: The story of Later for Reddit](<https://devfeed.tech/articles/running-a-side-business-as-a-programmer-the-story-of-later-for-reddit-32140.md>)

Original publisher: [Read original article](<https://adambard.com/blog/later-for-reddit-in-review/>)

Published: 2017-12-19T00:00:00Z

Content type: opinion

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [Reddit](<https://devfeed.tech/topics/reddit.md>), [Website](<https://devfeed.tech/topics/website.md>), [Algorithm](<https://devfeed.tech/topics/algorithm.md>), [API](<https://devfeed.tech/topics/api.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [maintenance](<https://devfeed.tech/tags/maintenance.md>), [pricing](<https://devfeed.tech/tags/pricing.md>), [ranking](<https://devfeed.tech/tags/ranking.md>), [reddit](<https://devfeed.tech/tags/reddit.md>), [revenue](<https://devfeed.tech/tags/revenue.md>), [side-projects](<https://devfeed.tech/tags/side-projects.md>), [website](<https://devfeed.tech/tags/website.md>)

### AI overview

A programmer recounts building Later for Reddit to schedule Reddit posts at better times and describes how the project evolved from a free service into a paid side business.

### Source excerpt

For the past 5 years, I've run a website called Later for Reddit. For the past 2 years, it's actually been making money. Here's how that happened. I used to spend a lot of time on Reddit (insert Mitch Hedberg joke here). I also used to spend a lot of time writing side projects, often late into the night. One problem I frequently had at the intersection of those two hobbies was that, when I posted my sweet new thing to Reddit after I finished getting it ready at 2am, it never had a chance of getting seen.

## Javascript FP design pattern: Binding functions

DevFeed: [Javascript FP design pattern: Binding functions](<https://devfeed.tech/articles/javascript-fp-design-pattern-binding-functions-32139.md>)

Original publisher: [Read original article](<https://adambard.com/blog/javascript-design-pattern-binding-functions/>)

Published: 2017-09-16T00:00:00Z

Content type: tutorial

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [coding](<https://devfeed.tech/topics/coding.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [design-patterns](<https://devfeed.tech/tags/design-patterns.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [functions](<https://devfeed.tech/tags/functions.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

An approachable introduction to a functional JavaScript design pattern for binding functions. It explains wrapped values, bindable functions, and how the pattern can safely compose operations such as handling nullable values.

### Source excerpt

Ok, ok, monads have been done. They've even been done by me before. But, functional programming is still popular, monads are still very useful for programming in an FP style, and people are entering the field every day. So here's another attempt at an approachable introduction to usefully apply this pattern to everyday coding problems.

## Comparing BuckleScript/ReasonML, Elm, and TypeScript for Web Development

DevFeed: [Comparing BuckleScript/ReasonML, Elm, and TypeScript for Web Development](<https://devfeed.tech/articles/bucklescript-vs-elm-vs-typescript-typed-javascript-showdown-32154.md>)

Original publisher: [Read original article](<https://adambard.com/blog/reason-vs-elm-vs-typescript/>)

Published: 2017-09-03T00:00:00Z

Content type: comparison

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [TypeScript](<https://devfeed.tech/topics/typescript.md>), [Elm](<https://devfeed.tech/topics/elm.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Tooling](<https://devfeed.tech/topics/tooling.md>), [Reason](<https://devfeed.tech/topics/reason.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>), [Webpack](<https://devfeed.tech/topics/webpack.md>)

Tags: [compare](<https://devfeed.tech/tags/compare.md>), [elm](<https://devfeed.tech/tags/elm.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [tooling](<https://devfeed.tech/tags/tooling.md>), [typescript](<https://devfeed.tech/tags/typescript.md>)

### AI overview

This article compares BuckleScript/ReasonML, Elm, and TypeScript as typed languages that compile to JavaScript. It examines their features, build ecosystems, editor tooling, JavaScript interoperability, and coding experience, with small examples in each language.

### Source excerpt

You, a web developer, have probably heard of Typescript, may have heard of Elm, and you might even have heard of Bucklescript/ReasonML as well. Each of these represents a compiles-to-javascript language with strong type support, but each has some different opinions, philosophies, and features. In this article I'll walk you through the features of each of these options and compare their build ecosystems, editor tooling, and javascript interop. In addition, as is my habit, I've written up a small example in each of these languages. (Well, actually, I've taken one of Elm's small demos and re-created it in the other two). I'll discuss my impressions of the tooling and the coding experience along the way.

## Getting Started with OCaml and OPAM

DevFeed: [Getting Started with OCaml and OPAM](<https://devfeed.tech/articles/ocaml-for-the-impatient-32128.md>)

Original publisher: [Read original article](<https://adambard.com/blog/getting-started-with-ocaml/>)

Published: 2017-08-28T00:00:00Z

Content type: tutorial

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [OCaml](<https://devfeed.tech/topics/ocaml.md>)

Tags: [getting-started](<https://devfeed.tech/tags/getting-started.md>), [install](<https://devfeed.tech/tags/install.md>), [ocaml](<https://devfeed.tech/tags/ocaml.md>)

### AI overview

A beginner-oriented guide to setting up OCaml with OPAM, selecting an OCaml version, creating a project directory, adding source files, and preparing a local OPAM project.

### Source excerpt

Ocaml is a rad language with some regrettably underdocumented parts. Or, perhaps, overdocumented - since OCaml attracts people who are interested in rigorous correctness, what documentation exists tends to be rigorous and correct, and also tedious. This guide will be none of those. Let's go!

## Best Practices for Javascript Library Versioning

DevFeed: [Best Practices for Javascript Library Versioning](<https://devfeed.tech/articles/best-practices-for-javascript-library-versioning-32146.md>)

Original publisher: [Read original article](<https://adambard.com/blog/on-library-versioning/>)

Author: What

Published: 2017-08-13T00:00:00Z

Content type: opinion

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Dependency management](<https://devfeed.tech/topics/dependency-management.md>), [Library](<https://devfeed.tech/topics/library.md>), [React](<https://devfeed.tech/topics/react.md>)

Tags: [best-practices](<https://devfeed.tech/tags/best-practices.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [dependency-management](<https://devfeed.tech/tags/dependency-management.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [library](<https://devfeed.tech/tags/library.md>), [versioning](<https://devfeed.tech/tags/versioning.md>)

### AI overview

The article argues that JavaScript library developers often mishandle dependency versioning, making upgrades painful, and recommends Semantic Versioning. It explains that patch releases should contain non-breaking bug fixes, minor releases should add functionality without changing the public API, and major releases should contain public API changes.

### Source excerpt

I spend most of my time on this blog talking about Clojure, but IRL I work on a lot of projects written in a lot of languages. Lately, much of my time has been spent writing and maintaining React-based frontends in Javascript. As far as I can tell, no language has solved the problem of dependency management. Some libraries are better than others, but upgrading dependencies is always an uncomfortable experience. That being said, I've never experienced more pain doing so than in Javascript's ecosystem.

## Domain modelling with clojure.spec

DevFeed: [Domain modelling with clojure.spec](<https://devfeed.tech/articles/domain-modelling-with-clojure-spec-32118.md>)

Original publisher: [Read original article](<https://adambard.com/blog/domain-modeling-with-clojure-spec/>)

Published: 2017-08-06T00:00:00Z

Content type: tutorial

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [Clojure](<https://devfeed.tech/topics/clojure.md>), [data](<https://devfeed.tech/topics/data.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [RSS Feed](<https://devfeed.tech/topics/rss-feed.md>), [API](<https://devfeed.tech/topics/api.md>), [F#](<https://devfeed.tech/topics/fsharp.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [clojure](<https://devfeed.tech/tags/clojure.md>), [data](<https://devfeed.tech/tags/data.md>), [demo](<https://devfeed.tech/tags/demo.md>), [functions](<https://devfeed.tech/tags/functions.md>), [guide](<https://devfeed.tech/tags/guide.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [schema](<https://devfeed.tech/tags/schema.md>), [validation](<https://devfeed.tech/tags/validation.md>)

### AI overview

This tutorial demonstrates how to use Clojure.spec to model and validate data and functions while developing an RSS feed fetcher and formatter. The example retrieves Hacker News items, filters domains using a blacklist, and fetches cleaned article content through Mercury's API.

### Source excerpt

Clojure.spec is, among other things, Clojure's official answer to tools like Typed Clojure and Plumatic's Schema. It represents an attempt to apply some validation to data and functions, without compromising Clojure's dynamism and data-is-data philosophy. In this post, I'll be working through a sample program by first outlining and modelling it with the help of clojure.spec, then using spec to guide me while I develop the implementation.

## What programming language should I learn? (2017 edition)

DevFeed: [What programming language should I learn? (2017 edition)](<https://devfeed.tech/articles/what-programming-language-should-i-learn-2017-edition-32175.md>)

Original publisher: [Read original article](<https://adambard.com/blog/what-programming-language/>)

Published: 2017-03-23T00:00:00Z

Content type: opinion

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>), [Python](<https://devfeed.tech/topics/python.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Java](<https://devfeed.tech/topics/java.md>), [C](<https://devfeed.tech/topics/c.md>), [Ruby](<https://devfeed.tech/topics/ruby.md>), [C#](<https://devfeed.tech/topics/csharp.md>)

Tags: [c](<https://devfeed.tech/tags/c.md>), [c-sharp](<https://devfeed.tech/tags/c-sharp.md>), [java](<https://devfeed.tech/tags/java.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [learn](<https://devfeed.tech/tags/learn.md>), [memory-management](<https://devfeed.tech/tags/memory-management.md>), [programming-language](<https://devfeed.tech/tags/programming-language.md>), [python](<https://devfeed.tech/tags/python.md>), [ruby](<https://devfeed.tech/tags/ruby.md>)

### AI overview

An opinionated guide to choosing a programming language in 2017. It recommends Python for beginners, JavaScript for internet-related work, Java for serious company roles and high-throughput server software, and C for programmers who do not yet understand it well.

### Source excerpt

I occasionally find someone asking this question in my inbox. I've learned that for every person that bothers there are a bunch more with the same question, so I thought I'd take a break from relentlessly plugging my side hustle Later for Reddit to answer it publicly.

## Basic site monitoring with Riemann

DevFeed: [Basic site monitoring with Riemann](<https://devfeed.tech/articles/basic-site-monitoring-with-riemann-32096.md>)

Original publisher: [Read original article](<https://adambard.com/blog/basic-website-monitoring-with-riemann/>)

Published: 2016-08-23T00:00:00Z

Content type: tutorial

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [Monitoring](<https://devfeed.tech/topics/monitoring.md>), [DevOps](<https://devfeed.tech/topics/devops.md>), [Ubuntu](<https://devfeed.tech/topics/ubuntu.md>), [Digital Ocean](<https://devfeed.tech/topics/digital-ocean.md>), [Grafana](<https://devfeed.tech/topics/grafana.md>)

Tags: [devops](<https://devfeed.tech/tags/devops.md>), [digital-ocean](<https://devfeed.tech/tags/digital-ocean.md>), [grafana](<https://devfeed.tech/tags/grafana.md>), [java](<https://devfeed.tech/tags/java.md>), [monitoring](<https://devfeed.tech/tags/monitoring.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [systemd](<https://devfeed.tech/tags/systemd.md>), [ubuntu](<https://devfeed.tech/tags/ubuntu.md>)

### AI overview

A practical guide to setting up Riemann for basic site and system health monitoring. It covers installing Riemann on an Ubuntu DigitalOcean server, viewing events with its command-line tools, and configuring email notifications.

### Source excerpt

Riemann is a general-purpose event processing system, but its most typical application is as a place to send and generate metrics about applications. I recently set up a Riemann server for my personal projects, and I feel like my devops game is stepped up by 1000%. Or, at very least, I feel like I know know about it as soon as one of my sites goes down.

## What's in a namespace?

DevFeed: [What's in a namespace?](<https://devfeed.tech/articles/what-s-in-a-namespace-32177.md>)

Original publisher: [Read original article](<https://adambard.com/blog/whats-in-a-namespace/>)

Published: 2016-04-15T00:00:00Z

Content type: tutorial

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [Clojure](<https://devfeed.tech/topics/clojure.md>), [Code](<https://devfeed.tech/topics/code.md>), [Java](<https://devfeed.tech/topics/java.md>)

Tags: [clojure](<https://devfeed.tech/tags/clojure.md>), [code](<https://devfeed.tech/tags/code.md>), [internals](<https://devfeed.tech/tags/internals.md>), [source](<https://devfeed.tech/tags/source.md>)

### AI overview

This article examines what a Clojure namespace is internally. It explains that the ns macro expands into functions involved in loading code, including setting the current namespace, referring to clojure.core, and updating the namespace registry for non-core namespaces.

### Source excerpt

Every well-behaved clojure source file starts with a namespace declaration. The ns macro, as we all know, is responsible for declaring the namespace to which the definitions in the rest of the file belong, and generally also includes some requirements and imports and whatnot. But today (at Clojure/West, shoutout!) Stuart Sierra made a passing reference to the internals of ns during his talk that got me interested. But what is a namespace really?

## Write and deploy your own self-hosted Readability clone

DevFeed: [Write and deploy your own self-hosted Readability clone](<https://devfeed.tech/articles/write-and-deploy-your-own-self-hosted-readability-clone-32158.md>)

Original publisher: [Read original article](<https://adambard.com/blog/self-hosted-readability-on-heroku-with-nodejs/>)

Published: 2016-03-29T00:00:00Z

Content type: tutorial

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [Self-hosted](<https://devfeed.tech/topics/self-hosted.md>), [Node.js](<https://devfeed.tech/topics/node-js.md>), [Library](<https://devfeed.tech/topics/library.md>), [Heroku](<https://devfeed.tech/topics/heroku.md>), [Software](<https://devfeed.tech/topics/software.md>), [Code](<https://devfeed.tech/topics/code.md>), [Document Object Model (DOM)](<https://devfeed.tech/topics/dom.md>), [App](<https://devfeed.tech/topics/app.md>), [Mozilla](<https://devfeed.tech/topics/mozilla.md>), [browser](<https://devfeed.tech/topics/browser.md>)

Tags: [app](<https://devfeed.tech/tags/app.md>), [browser](<https://devfeed.tech/tags/browser.md>), [code](<https://devfeed.tech/tags/code.md>), [deploy](<https://devfeed.tech/tags/deploy.md>), [heroku](<https://devfeed.tech/tags/heroku.md>), [libraries](<https://devfeed.tech/tags/libraries.md>), [node-js](<https://devfeed.tech/tags/node-js.md>), [self-hosted](<https://devfeed.tech/tags/self-hosted.md>), [software](<https://devfeed.tech/tags/software.md>)

### AI overview

A tutorial for building and deploying a self-hosted Readability clone with Heroku and Node.js. It uses Mozilla's Readability.js through readability-node, jsdom to provide a DOM, and a Node.js server to fetch URLs and display extracted article text.

### Source excerpt

Readability.org is a handy tool, but it also suffers from being useful, popular and free - the service is (understandably) often down, or slow. If you're a heavy Readability user, it might interest you to know that there exist many software libraries that attempt to recreate Readability's main function - pulling the main body of text out of a page laden with ads and other distractions. Some of these work better than others, but Mozilla's Readability.

## Composible Architecture: A real-world example.

DevFeed: [Composible Architecture: A real-world example.](<https://devfeed.tech/articles/composible-architecture-a-real-world-example-32111.md>)

Original publisher: [Read original article](<https://adambard.com/blog/composible-architecture-a-real-world-example/>)

Published: 2016-03-27T00:00:00Z

Content type: article

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [Flask](<https://devfeed.tech/topics/flask.md>), [REST API](<https://devfeed.tech/topics/rest-api.md>), [Library](<https://devfeed.tech/topics/library.md>), [Routing (disambiguation)](<https://devfeed.tech/topics/routing.md>), [JSON](<https://devfeed.tech/topics/json.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [flask](<https://devfeed.tech/tags/flask.md>), [json](<https://devfeed.tech/tags/json.md>), [library](<https://devfeed.tech/tags/library.md>), [real-world](<https://devfeed.tech/tags/real-world.md>), [rest-api](<https://devfeed.tech/tags/rest-api.md>), [routing](<https://devfeed.tech/tags/routing.md>)

### AI overview

A technical discussion of composable architecture in a Flask-Restful REST API, focusing on reqparse validation and the use of reusable validator functions to keep special-case handling out of general-purpose parsing code.

### Source excerpt

I am the primary maintainer of a significant REST API written using Flask-Restful. Flask-Restful is a pretty full-featured library for creating REST frameworks with Flask. It features everything you need to manage routing to class-based resources, a library for marshalling objects to JSON format, and reqparse, an argparse-inspired library for writing input parsers.

## React.js in the small

DevFeed: [React.js in the small](<https://devfeed.tech/articles/react-js-in-the-small-32153.md>)

Original publisher: [Read original article](<https://adambard.com/blog/react-in-the-small/>)

Published: 2016-03-26T00:00:00Z

Content type: opinion

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [React](<https://devfeed.tech/topics/react.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Document Object Model (DOM)](<https://devfeed.tech/topics/dom.md>), [Angular](<https://devfeed.tech/topics/angular.md>)

Tags: [html](<https://devfeed.tech/tags/html.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [react](<https://devfeed.tech/tags/react.md>)

### AI overview

A developer describes using React.js for a small web application that randomly combines a language, framework, and datastore into an acronym. The article discusses React components, properties, state, and hand-written JavaScript DOM construction without JSX.

### Source excerpt

I'm a big fan of accessible technologies. I get suspicious whenever I encounter a framework or library that is "not worth it for a small project," because that is a coded statement that means either "It has a broad scope of features that a small project won't take advantage of," or "it trades off simplicity or user experience for performance or other reasons." Accessibility also helps open-source projects move from obscure to ubiquitous; if jQuery had required a command-line tool to compile it when it came out, I can practically guarantee you wouldn't have ever heard about it.

## The Web is (finally) a mature platform

DevFeed: [The Web is (finally) a mature platform](<https://devfeed.tech/articles/the-web-is-finally-a-mature-platform-32164.md>)

Original publisher: [Read original article](<https://adambard.com/blog/the-web-is-a-mature-platform/>)

Published: 2016-03-19T00:00:00Z

Content type: opinion

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [Web](<https://devfeed.tech/topics/web.md>), [MEAN](<https://devfeed.tech/topics/mean-stack.md>), [web applications](<https://devfeed.tech/topics/web-applications.md>), [LAMP](<https://devfeed.tech/topics/lamp.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>), [Node.js](<https://devfeed.tech/topics/node-js.md>), [PHP](<https://devfeed.tech/topics/php.md>)

Tags: [angular](<https://devfeed.tech/tags/angular.md>), [applications](<https://devfeed.tech/tags/applications.md>), [backend](<https://devfeed.tech/tags/backend.md>), [css](<https://devfeed.tech/tags/css.md>), [express](<https://devfeed.tech/tags/express.md>), [html](<https://devfeed.tech/tags/html.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [lamp](<https://devfeed.tech/tags/lamp.md>), [linux](<https://devfeed.tech/tags/linux.md>), [mongodb](<https://devfeed.tech/tags/mongodb.md>), [mysql](<https://devfeed.tech/tags/mysql.md>), [node-js](<https://devfeed.tech/tags/node-js.md>), [platform](<https://devfeed.tech/tags/platform.md>), [technology-stack](<https://devfeed.tech/tags/technology-stack.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

The article argues that the web has become a mature platform with many established ways to build applications. It contrasts the historically dominant LAMP stack with MEAN and contends that MEAN is a reasonable but not uniquely exceptional technology stack.

### Source excerpt

I started my career as a "web developer" circa 2007. I'd dabbled before with Javascript while making sites in HTML/CSS as early as middle school, but that was my first real job as a real software developer. Back in those days, LAMP (Linux/Apache/MySQL/PHP) was about the only sensible way to build a web application. You could use Java servlets, of course, or build applications using CGI, but once PHP was stable and available and straightforward, and it quickly became the obvious choice for a huge range of applications.

## Clojure SQL Migration Libraries

DevFeed: [Clojure SQL Migration Libraries](<https://devfeed.tech/articles/clojure-sql-migration-libaries-32106.md>)

Original publisher: [Read original article](<https://adambard.com/blog/clojure-migration-libraries/>)

Published: 2016-02-28T00:00:00Z

Content type: article

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [migration](<https://devfeed.tech/topics/migration.md>), [Clojure](<https://devfeed.tech/topics/clojure.md>), [SQL](<https://devfeed.tech/topics/sql.md>)

Tags: [clojure](<https://devfeed.tech/tags/clojure.md>), [libraries](<https://devfeed.tech/tags/libraries.md>), [migration](<https://devfeed.tech/tags/migration.md>), [sql](<https://devfeed.tech/tags/sql.md>)

### AI overview

This article surveys Clojure libraries for managing SQL database schema migrations. It explains common migration-library features and compares approaches used by several JDBC migration libraries, including migration files, up and down phases, and tracking database state.

### Source excerpt

It is generally recommended, if you're developing an application that uses a database, that you manage changes to the schema of said database using some sort of migration system or another. Luckily, several intrepid developers in the clojure community have stepped up with their own solutions to this problem - all of which end up being very similar indeed. Read on for an overview of your options and to find out which one is right for you.

## Plotting Reddit post frequencies with d3

DevFeed: [Plotting Reddit post frequencies with d3](<https://devfeed.tech/articles/plotting-reddit-post-frequencies-with-d3-32151.md>)

Original publisher: [Read original article](<https://adambard.com/blog/plotting-reddit-post-frequencies-with-d3/>)

Published: 2016-02-20T00:00:00Z

Content type: tutorial

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [d3.js](<https://devfeed.tech/topics/d3-js.md>), [plotting](<https://devfeed.tech/topics/plotting.md>), [data](<https://devfeed.tech/topics/data.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [charts](<https://devfeed.tech/tags/charts.md>), [code](<https://devfeed.tech/tags/code.md>), [d3](<https://devfeed.tech/tags/d3.md>), [d3-js](<https://devfeed.tech/tags/d3-js.md>), [data](<https://devfeed.tech/tags/data.md>), [graphs](<https://devfeed.tech/tags/graphs.md>), [plotting](<https://devfeed.tech/tags/plotting.md>)

### AI overview

A tutorial describing how the author added a 7x24 color-coded grid plot to Later's Reddit post timing analysis page using D3.js. The chart represents posting frequency across hours and days of the week, providing a more precise view than separate bar charts.

### Source excerpt

This week I added a better graph to Later (for Reddit)'s post timing analysis page. Previously, the most common time and the most common day were plotted on separate bar charts. However, I noticed that I got called out on this in this article on Medium, which offered a pretty sensible alternative that I wasted no time in ripping off wholesale. I still have the bar graphs in, but I also added a 7x24 color-coded grid plot, allowing for a more accurate view of exactly when the most popular posts were posted.

## Failjure: Exception-free error handling for Clojure

DevFeed: [Failjure: Exception-free error handling for Clojure](<https://devfeed.tech/articles/failjure-exception-free-error-handling-for-clojure-32137.md>)

Original publisher: [Read original article](<https://adambard.com/blog/introducing-failjure/>)

Published: 2016-01-30T00:00:00Z

Content type: release

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [Clojure](<https://devfeed.tech/topics/clojure.md>), [Error Handling](<https://devfeed.tech/topics/error-handling.md>), [Library](<https://devfeed.tech/topics/library.md>), [exceptions](<https://devfeed.tech/topics/exceptions.md>)

Tags: [clojure](<https://devfeed.tech/tags/clojure.md>), [error-handling](<https://devfeed.tech/tags/error-handling.md>), [exceptions](<https://devfeed.tech/tags/exceptions.md>), [library](<https://devfeed.tech/tags/library.md>), [monad](<https://devfeed.tech/tags/monad.md>)

### AI overview

The article introduces Failjure, a Clojure utility library for exception-free error handling. It describes returning failure values instead of throwing exceptions, short-circuiting with built-in helpers, wrapping exceptions as failures, and distinguishing expected faults from unexpected errors.

### Source excerpt

I've written before about handling errors in Clojure without using exceptions, by making use of ad-hoc monads. In that post, I also referenced Andrew Brehaut's error monad implementation. Since then, I've written a number of projects that use similar handling, and I thought the time had come to wrap it up in a library, which I'm calling Failjure.

## Setting Up Live-Reloading ClojureScript Development with Boot

DevFeed: [Setting Up Live-Reloading ClojureScript Development with Boot](<https://devfeed.tech/articles/clojurescript-boot-live-reload-weasel-vim-fireplace-piggieback-32109.md>)

Original publisher: [Read original article](<https://adambard.com/blog/clojurescript-boot-fireplace/>)

Published: 2016-01-11T00:00:00Z

Content type: tutorial

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [ClojureScript](<https://devfeed.tech/topics/clojurescript.md>), [boot](<https://devfeed.tech/topics/boot.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [Development](<https://devfeed.tech/topics/development.md>), [Documentation](<https://devfeed.tech/topics/documentation.md>)

Tags: [boot](<https://devfeed.tech/tags/boot.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [development](<https://devfeed.tech/tags/development.md>), [reload](<https://devfeed.tech/tags/reload.md>), [repl](<https://devfeed.tech/tags/repl.md>), [vim](<https://devfeed.tech/tags/vim.md>)

### AI overview

A tutorial for assembling a live-reloading, auto-compiling ClojureScript development setup with Boot. It explains the required dependencies, configuration, and task composition, including starting a REPL and passing the fileset.

### Source excerpt

My long-standing complaint about Clojurescript is that it's a pain to get running. People who prefer Leiningen seem to have gotten a handle on this with figwheel; however, those of us who have jumped on the Boot train (it's newer and therefore better!) still have to do some assembly to get the live-reloading auto-compiling repl setup that's become the standard for Clojurescript development. Like many problems in the Clojure universe, this is less a problem of technology and more a problem of approachable documentation. With just a little bit of configuration and some understanding, you too can assemble that perfect Clojurescript dev setup using Boot.

## Deploying a Clojure web app with Pallet

DevFeed: [Deploying a Clojure web app with Pallet](<https://devfeed.tech/articles/deploying-a-clojure-web-app-with-pallet-32114.md>)

Original publisher: [Read original article](<https://adambard.com/blog/deploying-a-clojure-project-with-pallet/>)

Published: 2016-01-04T00:00:00Z

Content type: tutorial

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [Clojure](<https://devfeed.tech/topics/clojure.md>), [DevOps](<https://devfeed.tech/topics/devops.md>), [Deployment](<https://devfeed.tech/topics/deployment.md>), [web applications](<https://devfeed.tech/topics/web-applications.md>), [ssh](<https://devfeed.tech/topics/ssh.md>), [nginx](<https://devfeed.tech/topics/nginx.md>), [Digital Ocean](<https://devfeed.tech/topics/digital-ocean.md>)

Tags: [clojure](<https://devfeed.tech/tags/clojure.md>), [deployment](<https://devfeed.tech/tags/deployment.md>), [devops](<https://devfeed.tech/tags/devops.md>), [digitalocean](<https://devfeed.tech/tags/digitalocean.md>), [nginx](<https://devfeed.tech/tags/nginx.md>), [ssh](<https://devfeed.tech/tags/ssh.md>), [web-app](<https://devfeed.tech/tags/web-app.md>)

### AI overview

This tutorial explains how to deploy a Clojure web application with Pallet, focusing on Pallet's task model and concepts such as actions, plans, phases, server specs, and crates. It also describes limitations in Pallet's incomplete documentation and its incompatibility with the JClouds version needed for DigitalOcean's v2 API, so the article uses manually provisioned servers through SSH.

### Source excerpt

Pallet is a Clojure DevOps platform/library designed to automate blah blah blah. We all know what these things are supposed to do, the question is how they do it, and Pallet takes the agreeable tack of just being a Clojure library that you can run in a repl and do devops stuff.

## Clojure SQL library showdown

DevFeed: [Clojure SQL library showdown](<https://devfeed.tech/articles/clojure-sql-library-showdown-32108.md>)

Original publisher: [Read original article](<https://adambard.com/blog/clojure-sql-libs-compared/>)

Published: 2015-12-28T00:00:00Z

Content type: comparison

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [Clojure](<https://devfeed.tech/topics/clojure.md>), [SQL](<https://devfeed.tech/topics/sql.md>), [Library](<https://devfeed.tech/topics/library.md>), [Object-relational mapping](<https://devfeed.tech/topics/orm.md>)

Tags: [clojure](<https://devfeed.tech/tags/clojure.md>), [compare](<https://devfeed.tech/tags/compare.md>), [dsls](<https://devfeed.tech/tags/dsls.md>), [jdbc](<https://devfeed.tech/tags/jdbc.md>), [library](<https://devfeed.tech/tags/library.md>), [orm](<https://devfeed.tech/tags/orm.md>), [sql](<https://devfeed.tech/tags/sql.md>)

### AI overview

A comparison of several Clojure SQL DSLs and libraries, including Korma and HoneySQL, against JDBC. The author discusses the trade-offs between writing SQL directly and using abstractions or ORM-style tools.

### Source excerpt

When it comes to database access, I've become less particular over the years as I've gotten more and more comfortable with SQL. These days I'm happier to write the SQL to get just the thing I want, than wrestle with an ORM to produce the same thing. Nevertheless, there's something to be said for abstractions over SQL, and they seem to have lasting popularity. In this post, I'll compare a few popular SQL DSLs for Clojure, and contrast them all with their mutual pappy, clojure.

[Next page](<https://devfeed.tech/sources/adam-bard.md?cursor=WyIyMDE1LTEyLTI4VDAwOjAwOjAwKzAwOjAwIiwgIjMyZDMxNDlkLWVlNzYtNDYxNS05YzdiLTRlMTg0MDVmYzQzNyJd>)