<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Mark Dovgalyuk</title><description>Notes and writing on data, software, and cloud.</description><link>https://mark-dovgalyuk.com/</link><item><title>Bullhorn batch ingestion Part 2: JPQL, Lucene, and pagination design</title><link>https://mark-dovgalyuk.com/blog/posts/bullhorn-pagination-part-2/</link><guid isPermaLink="true">https://mark-dovgalyuk.com/blog/posts/bullhorn-pagination-part-2/</guid><description>With Bullhorn&apos;s API split across relational JPQL and Lucene search, you need to consider multiple pagination strategies. Here is how I designed different paging architectures to handle the unique limits of each engine.</description><pubDate>Sat, 27 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Bullhorn batch ingestion Part 1: 3-legged OAuth and rotating refresh tokens</title><link>https://mark-dovgalyuk.com/blog/posts/bullhorn-oauth-part-1/</link><guid isPermaLink="true">https://mark-dovgalyuk.com/blog/posts/bullhorn-oauth-part-1/</guid><description>Bullhorn&apos;s API uses 3-legged OAuth, built for human-in-the-loop apps. Building a backend batch sync on top meant designing around that mismatch, plus the rotating refresh tokens Bullhorn issues and the failure modes that come with them.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate></item></channel></rss>