{"title":"davidcel.is","subtitle":"Articles","author":{"name":"David Celis","email":"me@davidcel.is","uri":"https:\/\/davidcel.is\/"},"icon":"https:\/\/davidcel.is\/assets\/me-46c38f84.jpg","logo":"https:\/\/davidcel.is\/assets\/me-46c38f84.jpg","link":[{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/davidcel.is\/articles"}},{"@attributes":{"rel":"self","type":"application\/atom+xml","href":"https:\/\/davidcel.is\/feeds\/articles"}}],"id":"https:\/\/davidcel.is\/feeds\/articles","updated":"2025-12-19T20:26:36Z","rights":"\u00a9 2026 David Celis","entry":[{"id":"https:\/\/davidcel.is\/posts\/2002113355361636900","title":"Writing Code Is Fun","content":{"@attributes":{"type":"html"}},"published":"2025-12-19T20:26:36Z","updated":"2025-12-19T20:26:36Z","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/davidcel.is\/articles\/writing-code-is-fun"}}},{"id":"https:\/\/davidcel.is\/posts\/1969109987865000737","title":"Rails Needs New Governance","content":{"@attributes":{"type":"html"}},"published":"2025-09-19T18:43:00Z","updated":"2025-09-24T21:51:44Z","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/davidcel.is\/articles\/rails-needs-new-governance"}}},{"id":"https:\/\/davidcel.is\/posts\/1738384198135409427","title":"Fraying Threads","content":{"@attributes":{"type":"html"}},"published":"2023-12-23T02:21:06Z","updated":"2023-12-23T16:11:21Z","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/davidcel.is\/articles\/fraying-threads"}}},{"id":"https:\/\/davidcel.is\/posts\/1610334269207479338","title":"Fifteen Years of Ru...ewriting My Website","content":{"@attributes":{"type":"html"}},"published":"2023-01-03T17:56:23Z","updated":"2023-01-03T17:56:23Z","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/davidcel.is\/articles\/fifteen-years-of-ru-ewriting-my-website"}}},{"id":"https:\/\/davidcel.is\/posts\/817043227407287337","title":"Give It a REST: Use GraphQL for Your APIs","content":{"@attributes":{"type":"html"}},"published":"2017-01-05T16:21:00Z","updated":"2022-12-29T23:06:00Z","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/davidcel.is\/articles\/give-it-a-rest-use-graphql-for-your-apis"}}},{"id":"https:\/\/davidcel.is\/posts\/676205209973687336","title":"Easily Publish Your Site to S3 and CloudFront","content":{"@attributes":{"type":"html"}},"published":"2015-12-14T01:01:00Z","updated":"2022-12-29T22:47:00Z","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/davidcel.is\/articles\/easily-publish-your-site-to-s3-and-cloudfront"}}},{"id":"https:\/\/davidcel.is\/posts\/560991789511607335","title":"Distance Constraints with PostgreSQL and PostGIS","content":{"@attributes":{"type":"html"}},"published":"2015-01-30T02:44:00Z","updated":"2022-12-29T22:31:00Z","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/davidcel.is\/articles\/distance-constraints-with-postgresql-and-postgis"}}},{"id":"https:\/\/davidcel.is\/posts\/330014320358327334","title":"Deploying Discourse with Capistrano","content":{"@attributes":{"type":"html"}},"published":"2013-05-02T17:42:00Z","updated":"2022-12-29T21:08:00Z","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/davidcel.is\/articles\/deploying-discourse-with-capistrano"}}},{"id":"https:\/\/davidcel.is\/posts\/314446741631927333","title":"From 1.5 GB to 50 MB: Debugging Memory Usage in Redis","content":{"@attributes":{"type":"html"}},"published":"2013-03-20T18:42:00Z","updated":"2022-12-29T20:57:00Z","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/davidcel.is\/articles\/from-1-5-gb-to-50-mb-debugging-memory-usage-in-redis"}}},{"id":"https:\/\/davidcel.is\/posts\/243763743421367332","title":"Stop Validating Email Addresses with Regex","content":{"@attributes":{"type":"html"}},"published":"2012-09-06T17:33:00Z","updated":"2022-12-29T20:02:00Z","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/davidcel.is\/articles\/stop-validating-email-addresses-with-regex"}}},{"id":"https:\/\/davidcel.is\/posts\/230344571089847331","title":"Internationalization and the Rails Inflector","content":{"@attributes":{"type":"html"}},"published":"2012-07-31T16:50:00Z","updated":"2022-12-29T19:39:00Z","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/davidcel.is\/articles\/internationalization-and-the-rails-inflector"}}},{"id":"https:\/\/davidcel.is\/posts\/225734192133047330","title":"The State of Rails Inflections","content":{"@attributes":{"type":"html"}},"published":"2012-07-18T23:30:00Z","updated":"2022-12-29T18:10:00Z","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/davidcel.is\/articles\/the-state-of-rails-inflections"}}},{"id":"https:\/\/davidcel.is\/posts\/166992125752247329","title":"Collaborative Filtering with Likes and Dislikes","content":{"@attributes":{"type":"html"}},"published":"2012-02-07T21:10:00Z","updated":"2022-12-30T00:51:00Z","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/davidcel.is\/articles\/collaborative-filtering-with-likes-and-dislikes"}}},{"id":"https:\/\/davidcel.is\/posts\/164797665899447328","title":"Why I Hate Five-Star Ratings","content":{"@attributes":{"type":"html"}},"published":"2012-02-01T19:50:00Z","updated":"2022-12-29T17:23:00Z","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/davidcel.is\/articles\/why-i-hate-five-star-ratings"}}}]}